clickhouse学习笔记-管理与运维

网友投稿 1200 2022-10-02

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

clickhouse学习笔记-管理与运维

默认配置文件结构

cat users.xml                        10000000000 random         1                              ::/0                        default            default                                             3600 0 0 0 0 0

参考资料:https://clickhouse.com/docs/zh/introduction/performance/

一. 用户配置

用户profile

# CH使用 etc/clickhouse-server/users.xml 来定义用户相关配置项# profile的作用类似用户角色,可以在users.XML中定义多组profile。每组定义不同的配置项,实现配置复用。# 在所有的profiles中default的profiles默认被加载,必须存在。# profiles配置支持继承。 10000000000 # 默认10G random 1

配置约束

# constaints 标签可以设置一组约束条件,保障profile内的参数不会被随意修改。# default中默认定义的constraints约束,默认被全局其他profile继承。# 约束有三个规则# Min:最小值约束,设置参数不能小于该值。# Max: 最大值约束,不能大于该值。# Readonly:只读约束,该值不能被修改。

用户定义

# users标签可以配置自定义用户# password 支持明文,sha256加密和double_sha1加密三种形式# sha256 配置8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92echo -n 123456 |openssl dgst -sha256# double_sha1 配置6bb4837eb74329105ee4568dda7dc67ed2ca2ad9echo -n 123456 |openssl dgst -sha1 -binary|openssl dgst -sha1(stdin)= 6bb4837eb74329105ee4568dda7dc67ed2ca2ad9# networks:表示被允许登录的网络地址。# profile:用户所用的profile配置default# quota:该用户能够使用的资源限额,可以理解为一种熔断机制default

二. 权限管理

访问权限

网络访问权限

# 网络访问权限使用networks标签设置,用于限制某个用户登录的客户端地址。# 有ip地址,host主机名称,正则表达式三种形式 10.0.1.205

数据库与字典访问权限

# allow_databases  指定数据库权限,不定义表示不限制# allow_dictionaries 指定字典权限 wgw test

查询权限

# 读权限:select,exists,show,describe# 写权限:insert,optimize查询# 设置权限:set# DDL权限:create,drop,alter,rename,attach,detach,truncate# 其他权限:kill,use# 以上权限可以通过如下两个标签控制# readonly:读,写,设置三类均可以控制。0--不限制(默认值)。1--只读。2--三者都有。# allow_ddl:ddl权限控制。0-不允许,1,允许(默认值)10

数据行级别权限

# 决定了一个用户能看到什么数据.# 在具体使用场景中进行权衡。id<10 #############id='a0007'

三. 熔断机制

# 使用资源数量达到阈值则会被自动中断,实现自我保护。# 1. 根据时间周期的累计使用量熔断 # 自定一名称,全局唯一。 3600 # 累积时间周期-秒 0 # 周期内允许d额查询次数,0表示不限制 0 # 异常次数,0表示不限制。 0 # 返回的结果行,0表示不限制。                0 # 允许远端节点读取的数据行,0不限制。 0 # 执行的查询时间,单位秒。0 不限制。 # 2. 根据单次查询的用量熔断。# max_memory_usage: 运行一次查询限制的最大内存量,默认为10GB.# MAX_partitions_per_insert_block: 单次insert写入时候,创建的最大分区个数,默认100个。# max_rows_to_group_by:去重后聚合key的最大个数,默认0,不限制。# group_by_overflow_mode:throw--抛出异常;break--立即停止查询,返回当前数据。any--根据当前已存在的key继续完成聚合。# max_bytes_before_external_group_by: 在group by的的时候限制使用的最大内存量,超过借用磁盘。

配置实例

# 创建一个用户wgw,密码使用sha256 加密,只能通过127.0.0.1访问CH# 仅能访问数据库wgw。数据字典test_flat_dictionary。# 引用熔断策略rule1,当15秒内累计查询超过10次则熔断。# 数据库只有可读权限,没有DDL权限。开启log_queries日志权限。# max_memory_usage 设置为700M. 可以在500-1000M之间进行配置。[root@ch5 users.d]# cat wgw.xml 700000000 random              500000000 1000000000 1 1 0 olap 127.0.0.1 21cedfef481c0e0cc8aa08897ca0232f065269c8a2ad607f79e9f019f0808fb8 rule1 wgw test_flat_dictionary 15 10 2 100 0 5 #配置了profiles 需要重启,否则不生效。service clickhouse-server restart clickhouse-client -h 127.0.0.1 -u wgw --password 9900clickhouse-client -h 10.0.1.205 -u wgw --password 9900# 使用http方式访问curl "http://localhost:8123/?query=SELECT+'Play+ClickHouse';&user=default&password=123456&database=default" Play ClickHouse

四. 数据备份

副本并必能解决误删数据的问题。

导出文件备份

# 数据量较小导出方式clickhouse-client -u default --password 123456 --query="select * from partition_v2" >test_back.tsvclickhouse-client -u default --password 123456 --query="select * from partition_v2" >test_back.csv # 导入cat test_back.tsv |clickhouse-client -u default --password 123456 --query "insert into partition_v1 FORMAT TSV"# 数据量大的时候,可以指直接cp备份整个目录文件。

通过快照表备份

# 将本地表备份到远程节点去。create table partition_v3 as partition_v2;insert into table partition_v3 select * from remote('10.0.1.205:9000','default','partition_v2','default')

按分区备份

# 使用freeze备份,本质是文件目录的硬链接操作alter table tb_name freeze partition partition_expr# 使用fetch备份alter table tb_name fetch partition partition_id from zk_path# 还原按照装载模式进行。

五. 服务监控

系统表

# metrics,events,asynchronous-metrics# metrics 统计CH运行中的高层次概要信息。select * from metrics limit 5;┌─metric──────────┬─value─┬─description─────────────────────────────────────┐│ Query │ 1 │ Number of executing queries ││ Merge │ 0 │ Number of executing background merges ││ PartMutation │ 0 │ Number of mutations (ALTER DELETE/UPDATE) ││ ReplicatedFetch │ 0 │ Number of data parts being fetched from replica ││ ReplicatedSend │ 0 │ Number of data parts being sent to replicas │└─────────────────┴───────┴─────────────────────────────────────────────────┘# events 统计已经执行过的高层次累计概要信息。select event,value from events limit 5;┌─event─────────────┬─value─┐│ Query │ 34 ││ SelectQuery │ 18 ││ InsertQuery │ 4 ││ FailedQuery │ 5 ││ FailedSelectQuery │ 1 │└───────────────────┴───────┘# asynchronous-metrics 用于统计当前正在后台异步运行的高层次概要信息select * from asynchronous_metrics limit 5;┌─metric───────────────────────────────────┬───────value─┐│ AsynchronousMetricsCalculationTimeSpent │ 0.000931086 ││ jemalloc.arenas.all.muzzy_purged │ 43734642 ││ jemalloc.arenas.all.pmuzzy │ 193455 ││ jemalloc.background_thread.run_intervals │ 0 ││ jemalloc.background_thread.num_runs │ 0 │└──────────────────────────────────────────┴─────────────┘

查询日志

# 查询日志目前主要有6中类型,从不同角度记录CH操作行为。默认配置是关闭的。# 需要在config.xml中进行更改。# 1.query_log:记录了CH服务中所有已经执行的查询记录。select type,concat(substr(query,1,50),'...')query ,read_rows,query_duration_ms as duration from query_log limit 5;┌─type────────┬─query─────────────────────────────────────────────────┬─read_rows─┬─duration─┐│ QueryStart │ SELECT message FROM system.warnings... │ 0 │ 0 ││ QueryStart │ SELECT DISTINCT arrayJoin(extractAll(name, '[\\w_]... │ 0 │ 0 ││ QueryFinish │ SELECT message FROM system.warnings... │ 0 │ 6 ││ QueryFinish │ SELECT DISTINCT arrayJoin(extractAll(name, '[\\w_]... │ 4025 │ 27 ││ QueryStart │ select bar(number,0,4) from numbers(4);... │ 0 │ 0 │└─────────────┴───────────────────────────────────────────────────────┴───────────┴──────────┘# 2. query_thread_log:记录了所有线程执行的查询信息。select thread_ids,concat(substr(query,1,50),'...')query ,query_duration_ms as duration,memory_usage from query_log limit 5;┌─thread_ids──────────────────────┬─query─────────────────────────────────────────────────┬─duration─┬─memory_usage─┐│ [] │ SELECT message FROM system.warnings... │ 0 │ 0 ││ [] │ SELECT DISTINCT arrayJoin(extractAll(name, '[\\w_]... │ 0 │ 0 ││ [3126,3464] │ SELECT message FROM system.warnings... │ 6 │ 0 ││ [3127,3334,3612,3464,3610,3611] │ SELECT DISTINCT arrayJoin(extractAll(name, '[\\w_]... │ 27 │ 4283246 ││ [] │ select bar(number,0,4) from numbers(4);... │ 0 │ 0 │└─────────────────────────────────┴───────────────────────────────────────────────────────┴──────────┴──────────────┘# 3. part_log:记录了MergeTree系列引擎的分区操作日志。select event_type,table,partition_id,event_date from part_log;# 4. text_log:记录了CH运行过程中的一系列打印日志。包括info,debug,trace。select tread_name,concat(substr(logger_name,1,50),'...')logger_name,concat(substr(message,1,50),'...')message from text_log limit 5;# 5.metric_log:将metrics和events中的数据汇聚在一起。

上一篇:MySQL运维案例分析:Binlog中的时间戳
下一篇:RocketMQ 源码分析之消息写入 | 运维进阶
相关文章

 发表评论

暂时没有评论,来抢沙发吧~