问题导读:
1、怎样修改ckman默认密码和集群配置?
2、怎样管理ckman集群?
3、怎样监控ckman集群?
上一篇:
ClickHouse可视化管理工具ckman【上篇】
https://www.aboutyun.com/forum.php?mod=viewthread&tid=30987
ckman功能说明
ckman 支持的接口
详细接口参数可通过swagger文档查看。
swagger访问方式:开启ckman服务后,通过http://127.0.0.1:8808/swagger/index.html 网址访问。
接口 | method | 说明 | /api/login | POST | 登录 | /api/logout | PUT | 退出登录 | /api/v1/ck/cluster | GET | 获取所有集群信息 | /api/v1/ck/cluster | PUT | 更新集群信息 | /api/v1/ck/cluster | POST | 导入集群 | /api/v1/ck/cluster/{clusterName} | GET | 获取指定集群的信息 | /api/v1/ck/cluster/{clusterName} | DELETE | 删除集群 | /api/v1/ck/destroy/{clusterName} | PUT | 销毁集群 | /api/v1/ck/get/{clusterName} | GET | 获取指定集群的信息 | /api/v1/ck/node/{clusterName} | POST | 增加节点 | /api/v1/ck/node/{clusterName} | DELETE | 删除节点 | /api/v1/ck/open_sessions/{clusterName} | GET | 获取有效session个数 | /api/v1/ck/query/{clusterName} | GET | 执行Query | /api/v1/ck/rebalance/{clusterName} | PUT | Rebalance集群数据 | /api/v1/ck/slow_sessions/{clusterName} | GET | 获取慢SQL查询 | /api/v1/ck/start/{clusterName} | PUT | 启动集群 | /api/v1/ck/stop/{clusterName} | PUT | 停止集群 | /api/v1/ck/table/{clusterName} | GET | 描述表 | /api/v1/ck/table/{clusterName} | PUT | 更新表 | /api/v1/ck/table/{clusterName} | POST | 创建表 | /api/v1/ck/table/{clusterName} | DELETE | 删除表 | /api/v1/ck/table_metric/{clusterName} | GET | 获取表集群信息 | /api/v1/ck/upgrade/{clusterName} | PUT | 升级集群 | /api/v1/config | GET | 获取配置 | /api/v1/config | PUT | 修改配置 | /api/v1/deploy/ck | POST | 部署ck | /api/v1/metric/query | GET | 获取query指标 | /api/v1/metric/query_range | GET | 获取范围指标 | /api/v1/package | GET | 获取安装包列表 | /api/v1/package | POST | 上传安装包 | /api/v1/package | DELETE | 删除安装包 | /api/v1/zk/replicated_table/{clusterName} | GET | 获取复制表状态 | /api/v1/zk/status/{clusterName} | GET | 获取集群状态 | /api/v1/ck/ping/{clusterName} | POST | 监测集群节点连通性 | /api/v1/ck/purge_tables/{clusterName} | POST | 删除指定范围内的数据 | /api/v1/ck/archive/{clusterName} | POST | 归档指定时间范围数据到HDFS |
登录
ckman默认的登录名为ckman, 密码为Ckman123456!
注意: Ckman123456!是默认的密码,该密码可以通过ckmanpassword工具进行修改。修改方式和ckman的安装方式有关:
如果是tar.gz解压安装,则需要进入到bin目录下,在该目录下执行:
复制代码
如果是通过rpm方式安装,则需要cd到/etc/ckman/conf目录下,执行:
- cd /etc/ckman/conf
- ckmanpassword
复制代码
执行完成后,在conf目录下会生成一个新的password文件,覆盖掉原来的password,这样就可以使用新的密码登录了。
登陆成功后会得到一个token,该token在1个小时内有效,token失效后需要重新登录。
登陆成功后会进入如下所示的主页:
在主页上,除了有创建集群和导入集群等操作按钮外,还有集群展示的列表。
这个集群列表是通过ckman工作目录下conf/clusters.json文件导入进来的。主要展示集群名、是否支持副本、节点ip、节点数量、zk节点等信息。
重点说下clusters.json这个文件。
如下所示,为一个clusters.json 的示例文件。
- {
- "@ck_cluster_config_version": "配置版本,如果配置了多中心部署,会从nacos上同步集群配置,版本号大的会覆盖版本号小的",
- "ck_cluster_config_version": 5,
- "@test":"test是集群名称,它是以一个map的形式存储的",
- "test": {
- "@mode":"集群的模式,import表示是导入的集群,还有deploy,表示是通过部署的,import的集群只能查看,不能操作,deploy的集群可以查看和操作",
- "mode": "import",
- "@hosts":"ck节点ip列表",
- "hosts": [
- "192.168.101.40",
- "192.168.101.41",
- "192.168.101.42",
- "192.168.101.57"
- ],
- "@names":"ck节点的hostname",
- "names": [
- "vm10140",
- "vm10141",
- "vm10142",
- "zhanglei01"
- ],
- "@port": "ck节点的端口",
- "port": 9000,
- "@user":"ck用户",
- "user": "eoi",
- "@password": "ck密码",
- "password": "123456",
- "@default": "访问的数据库",
- "database": "default",
- "@cluster": "集群的名字",
- "cluster": "test",
- "@zkNodes": "zk集群的ip列表",
- "zkNodes": [
- "192.168.101.40",
- "192.168.101.41",
- "192.168.101.42"
- ],
- "@zkPort":"zk的端口",
- "zkPort": 2181,
- "@zkStatusPort": "zookeeper的监控端口",
- "zkStatusPort": 8080,
- "@isReplica": "是否支持副本",
- "isReplica": true,
- "@version": "ck版本",
- "version": "20.8.5.45",
- "@sshUser": "ssh连接节点主机的用户名,如果是import的集群,此处为空",
- "sshUser": "",
- "@sshPassword": "ssh连接节点主机的密码",
- "sshPassword": "",
- "@shards": "分片信息,以下表示2分片2副本",
- "shards": [
- {
- "@replicas": "副本信息,包含ip和hostname"
- "replicas": [
- {
- "ip": "192.168.101.40",
- "hostname": "vm10140"
- },
- {
- "ip": "192.168.101.41",
- "hostname": "vm10141"
- }
- ]
- },
- {
- "replicas": [
- {
- "ip": "192.168.101.42",
- "hostname": "vm10142"
- },
- {
- "ip": "192.168.101.57",
- "hostname": "zhanglei01"
- }
- ]
- }
- ],
- "@path": "存放数据的路径,如果是import的集群,为空",
- "path": ""
- }
- }
复制代码
每次对集群进行操作(增加、删除、修改、rebalance等),都会修改clusters.json这个文件,相应的ck_cluster_config_version都会发生变化。
安装包管理
在主页上点击设置按钮,进入如下的页面:
点击Upload RPMs,出现如下界面。
注意安装包上传时需要三个安装包都上传(server、client、common),上传成功后,在安装包列表下会显示新上传的记录:
注意:如果上传的安装包有缺失(比如少了common),安装包仍然能上传成功,但不会显示在列表上。
上传成功的安装包其实位于ckman工作目录的package目录下:
点击删除按钮,则会删除掉对应版本的安装包。
此处的安装包主要用来部署ck集群、节点部署ck以及升级ck集群的时候使用。
集群管理
创建集群
点击主页的Create a ClickHouse Cluster,就会进入创建集群的界面:
需要填写的项主要有以下:
- ClickHouse Version: ck的版本,不需要自己填写,通过下拉列表选择,下拉列表中会列出ckman服务器中所有的安装包版本。
- 此处版本信息只会列出当前ckman服务下的安装包版本,如果配置了多中心,其他ckman的安装包是无法看见的
- 由version的来源可知,在部署集群之前,需要先上传安装包。部署的集群版本时基于上传安装包的版本的。
- Cluster Name:集群的名字,注意不要和已有的名字重合
- ClickHouse TCP Port: clickhouse的TCP端口,默认是9000,当然也可以自己指定
- ClickHouse Node List: clickhouse节点列表,以逗号分隔
- Replica:是否开启副本,默认是关闭
- 如果开启了副本,默认是1个shard一个副本,所以节点数量一定要是偶数,否则会报错
- 如果要增加节点的副本数,可通过增加节点完成,创建集群时最多只能指定一个副本
- 如果没有开启副本,则有几个节点就有几个shard
- Zookeeper Node List: zk列表
- ckman并没有提供zookeeper集群搭建的功能,因此在部署集群之前,需要将zookeeper集群搭建好。
- ZooKeeper Port: zk端口,默认是2181
- ZK Status Port: zookeeper指标监控的端口,默认8080
- 该功能是zookeeper v3.5.0以上版本开始支持的,如果zk版本太旧,无法从界面看到zk的指标
- Data path: ck节点数据存放的路径
- Cluster Username: ck的用户名
- 注意:default用户作为保留用户,此处不能填default。
- Cluster Password: ck的密码
- SSH Username: ssh登录ck节点的用户名
- 该用户必须具有root权限或是root本身,否则部署无法成功,一般都是root。
- SSH Password: ssh登录ck节点的密码
通过此种方式安装部署成功的集群的mode就是deploy,可以对其进行删、改、rebalance、启停、升级以及节点的增删等操作。
需要注意的是:当前版本的ckman仅支持在centos7以上的系统部署ck。
导入集群
点击主页的 Import a ClickHouse Cluster按钮,会进去导入集群界面。
需要填写的信息如下所示:
- Cluster Name: 节点名称,该名称必须是确实存在的集群名,且不能与ckman中已有的集群名字重复。
- ClickHouse Node IP: clickhouse节点ip列表,以逗号分隔
- ClickHouse TCP Port: ck节点TCP端口,默认为9000
- Zookeeper Node List: zk节点列表
- ZooKeeper Port: zk端口,默认为2181
- ZK Status Port: zookeeper指标监控的端口,默认8080
- Cluster Username: ck的用户名
- Cluster Password: ck的密码
导入集群有个前提是该集群必须确实存在,否则导入会出现问题。
导入的集群的mode为import,这种模式的集群不能进行修改、rebalance、启停、升级以及节点的增删等操作(因为这些操作都需要提供root用户权限,但是导入的集群没有提供这些信息),但是可以删除和查看。
管理节点
从首页点击 Go to cluster,进入集群的管理界面。
主要有Overview、Manage、Tables、Session、Query Execution、Settings等选项,点击Manage按钮,进入下面的页面:
右上角的操作:Start Cluster、Stop Cluster、Destroy Cluster以及rebalance Cluster针对的是deploy模式的集群,import的集群均不可操作。
以下这些过程都是ckman自己完成的,用户无需手动干涉。
- Start Cluster: 启动集群
- ssh到每台ck节点下启动clickhouse服务,都成功才返回成功
- Stop Cluster
- ssh到每台ck节点下关闭clickhouse服务,都成功才返回成功
- Destroy Cluster
- 销毁集群后集群彻底不存在了
- 删除集群只是删除ckman中集群管理的入口(cluster.json),集群还存在,可以重新导入
- 首先第一步停止正在运行的clickhouse服务
- 然后卸载clickhouse软件
- 删除cluster.json并同步到nacos
- 销毁集群与删除集群的区别:
- Rebalance Cluster
- 一般情况下,通过clickhouse-sinker插入的数据基本上是均衡分布在各个节点的。但是如果新增了一个节点,那么新增的节点数据一定是空的,这时候可以通过rebalance工具进行数据搬运
- r ebalance搬运数据是直接将某个分区的数据直接搬运到目标节点,在搬运的过程中如果有查询操作,正在搬运的这部分数据是无法查到的,因此在进行rebalance操作时,请避免查询操作(rebalance操作时间很短,一般不会影响业务)
升级集群
如果上传了新版本的安装包,可以从Upgrade Cluster下拉列表中选择新版本,点击Upgrade即可进行升级。
增加节点
增加节点需要填写:
- New Node IP: 新节点的IP
- Node Shard: 节点的Shard NUmber。
- 如果填写的shard是已经存在的,那么增加的节点会作为已存在shard的一个副本;如果shard不存在(一般是最大的shard编号+1,如果不是就不正确了),就会新增加一个shard。
增加节点时ckman会先将集群整体都停掉,然后将新节点的信息增加到metrika.xml中,同步给所有的节点,再重启集群。
删除节点
删除节点时需要注意的是:如果某个shard本来是有副本的,删除节点后该shard副本没有了,要同时更新replica的标志,删除节点并不会销毁该节点,只会停止该节点的clickhouse服务,并从cluster.json中删除掉。
同增加节点一样,删除节点ckman也会先将集群停掉,将删除后的信息更新到metrika.xml中,同步给其他所有节点,再重启集群。
监控管理
监控管理需要提前配置好node_exporter和prometheus。
node_exporter需要配置在ck节点上,这样才能监控ck的指标。
在ck节点安装好node_exporter后,再在prometheus中配置node_exporter的节点信息。
- scrape_configs:
- # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- - job_name: 'prometheus'
-
- # metrics_path defaults to '/metrics'
- # scheme defaults to 'http'.
-
- static_configs:
- - targets: ['localhost:9090', 'localhost:9100', '192.168.101.40:9100', '192.168.101.41:9100', '192.168.101.42:9100', '192.168.101.57:9100']
复制代码
集群监控
点击Overview就进入到集群监控页面,如下图所示:
ClickHouse Table KPIs
指标 | 说明 | clickhouse.Query | 针对Clickhouse集群的分布式表发起的查询,按照发起时刻的分布图 |
ClickHouse Node KPIs
指标 | 说明 | cpu usage | CPU占用情况 | memory usage | 内存占用情况 | disk usage | 硬盘占用情况 | IOPS | IO指标 |
ZooKeeper KPIs
zookeeper监控使用的是zookeeper-3.5.0版本新增的特性,通过暴露的8080端口监控mntr指标信息,因此,如果想要看到zookeeper的监控指标,需要保证当前使用的zookeeper版本大于等于3.5.0。
指标 | 说明 | znode_count | znode数 | leader_uptime | leader存活时间 | stale_sessions_expired | 过期的会话 | jvm_gc_collection_seconds_count | jvm gc的次数 | jvm_gc_collection_seconds_sum | jvm gc花费的时间 |
数据加载监控
点击主页的Data Loader Management按钮,就可以进入数据加载管理页面,从此处可以看到clickhouse-sinker的一些指标。
指标 | 说明 | sum by(task)(rate(clickhouse_sinker_consume_msgs_total[1m])) | clickhouse_sinker消费Kafka消息的速率(个/秒) | sum by(task) (rate(clickhouse_sinker_flush_msgs_total[1m])) | clickhouse_sinker写ClickHouse的速率(行/秒) | sum by(task) (clickhouse_sinker_shard_msgs) | clickhouse_sinker shard buffer当前包含的消息数目 | sum by(task) (clickhouse_sinker_ring_msgs) | clickhouse_sinker ring buffer当前包含的消息数目 | sum by(task)(clickhouse_sinker_parsing_pool_backlog) | clickhouse_sinker 解析协程池当前积压的消息数目 | sum by(task) (clickhouse_sinker_writing_pool_backlog) | clickhouse_sinker 输出协程池当前积压的批数目 |
表管理
表管理主要分为Table Metrics、Table Replication Status、以及Zookeeper Status。
Table Metrics
统计表的一些指标。除system数据库的表之外,其他数据库的表都会显示在下面。
Queries Cost有三个值:
- 0.5:过去7天50%SQL的平均耗时
- 0.99:过去7天99%SQL的平均耗时
- max:过去7天 SQL最大耗时
Table Replication Status
统计复制表的一些状态。
此处会统计每个shard下每张表的各副本之间的统计量。
理论上每个shard内副本之间各表的统计都应该相等的,如果有不相等,就说明有节点落后了,这时候落后的节点会标黄。如果某个副本上所有的表都落后,说明这个副本可能出问题了。
Zookeeper Status
zookeeper的相关指标查看。
可查看的指标包括:版本,主从状态,平均延迟,近似数据总和大小,znode数等。
会话管理
Open Sessions
显示当前正在进行的会话。
Slow Sessions
显示7天内最慢的10条SQL语句。
包含SQL的执行时间、SQL耗时、SQL语句、ck用户、query id、查询的IP以及线程号。
Query管理
ckman还提供了简单的clickhouse查询的页面。通过该页面可以查询集群中的数据。
注意:
该工具只能查询,不能进行mutation的相关操作。
该工具主要针对分布式表,本地表也能查,但是如果本地表在集群的其他节点不存在,就会报错。即使表在所有节点都存在,查询出来的数据也是某个节点的数据,因此每次查询出来的数据可能不一致。
Settings
- HA Pair Addresses:多中心部署ckman的节点列表
- Prometheus Addresses: 普罗米修斯配置地址
- Alert Manager Addresses:告警管理地址
配置完成后,点击Save & Reboot,会将这些配置信息重新写入到配置文件,并重启ckman。
命令行工具
ckman除了上面的网络端界面以外,还提供了一些命令行工具:
exporter
导出指定时间范围的数据到HDFS。
如:
- exporter --ch-hosts=192.168.101.40,192.168.101.42 --ch-user=eoi --ch-password=123456 --ch-tables=dbtest,tbtesttype --hdfs-addr=localhost:8020 --hdfs-dir=/data
复制代码
参数说明:
- v
- 查看版本号
- ch-hosts
- clickhouse节点列表(每shard仅列出一个)
- ch-port
- clickhouse tcp 端口号,默认9000
- ch-user
- clickhouse 用户
- ch-password
- clickhouse 密码
- ch-database
- clickhouse 数据库,默认default
- ch-tables
- 表名列表
- dt-begin
- 开始时间,默认1970-01-01(包含)
- dt-end
- 结束时间(不包含)
- max-file-size
- 文件最大大小限制,默认10G
- hdfs-addr
- hdfs的ip:port
- hdfs-user
- hdfs的用户
- hdfs-dir
- hdfs的文件路径
以上命令会在HDFS中,指定的hdfs-dir下,以表名作为目录,生成形如host_slot.parquet格式的文件。
时间范围包含begin,不包含end。
purger
删除指定时间范围的数据。直接drop 分区数据。
如:
- purger --ch-hosts=192.168.101.40,192.168.101.42 --ch-port=9000 --ch-user=eoi --ch_password=123456 --ch-database=default --ch-tables=dbtest --dt-begin=2021-02-01 --dt-end=2021-02-28
复制代码
参数说明:
- v
- 查看版本号
- ch-hosts
- clickhouse节点列表(每shard仅列出一个)
- ch-port
- clickhouse tcp 端口号,默认9000
- ch-user
- clickhouse 用户
- ch-password
- clickhouse 密码
- ch-database
- clickhouse 数据库,默认default
- ch-tables
- 表名列表
- dt-begin
- 开始时间,默认1970-01-01(包含)
- dt-end
- 结束时间(不包含)
schemer
在指定结点创建与另一指定结点相同的表格。
通过该工具,会在目标节点上创建于源节点除system数据库以外的所有数据库和表。如:
- schemer --src-host=192.168.101.40 --dst-host=192.168.21.73 --ch-port=9000 --ch-user=eoi --ch-password=123456
复制代码
参数说明:
- v
- 显示版本信息
- src-host
- 源节点
- dst-host
- 目标节点
- ch-port
- tcp端口号,默认9000
- ch-user
- 目标节点ck用户
- ch-password
- 目标节点ck密码
rebalancer
集群结点间负载均衡。
此处的均衡操作直接是物理搬运,先通过一套均衡规则计算出需要从哪些节点移除,添加到哪些节点,然后将源节点的分区detach掉,然后通过ssh将分区数据传输给目标节点,attach到目标节点上,并删除掉源节点的分区数据。
ckman的rebalance也是使用此工具完成的负载均衡。在搬运某表数据期间,针对该表的查询将可能得到不一致的结果。
参数说明:
- v
- 显示版本信息
- ch-hosts
- ck节点列表
- ch-port
- ck节点tcp端口,默认9000
- ch-user
- ck用户名
- ch-password
- ck密码
- ch-database
- ck数据库,默认default
- ch-data-dir
- 数据存放目录
- os-user
- 节点主机用户名(需要有root权限)
- os-password
- 节点主机密码
扩展API
除了ckman页面上展示的功能外,ckman还提供了一些扩展的API,用户可使用cURL或Postman等工具对这些API进行操作,从而完成一些扩展功能。
这些API主要有:
描述表
METHOD:GET
URL: /api/v1/ck/table/{clusterName}
调用 DESCRIBE TABLE database.table语句进行查看表的结构信息。使用tableName指定表名,database指定数据库名。
举例如下:
- GET http://192.168.31.55:8808/api/v1/ck/table/test?tableName=tbtest&database=default
复制代码
返回结果:
- {
- "code": 200,
- "msg": "ok",
- "data": [
- {
- "name": "service",
- "type": "String",
- "defaultType": "",
- "defaultExpression": "",
- "comment": "",
- "codecExpression": "",
- "ttlExpression": ""
- },
- {
- "name": "ip",
- "type": "String",
- "defaultType": "",
- "defaultExpression": "",
- "comment": "",
- "codecExpression": "",
- "ttlExpression": ""
- },
- {
- "name": "metric",
- "type": "String",
- "defaultType": "",
- "defaultExpression": "",
- "comment": "",
- "codecExpression": "",
- "ttlExpression": ""
- },
- {
- "name": "value",
- "type": "Int64",
- "defaultType": "",
- "defaultExpression": "",
- "comment": "",
- "codecExpression": "",
- "ttlExpression": ""
- },
- {
- "name": "timestamp",
- "type": "DateTime",
- "defaultType": "",
- "defaultExpression": "",
- "comment": "",
- "codecExpression": "",
- "ttlExpression": ""
- }
- ]
- }
复制代码
注意:本操作要求表在集群的各节点存在,包括本地表和dist_开头的分布式表。
更新表
METHOD: PUT
URL: /api/v1/ck/table/{clusterName}
使用ALTER语句完成分布式表的更新。
支持的操作包括增加列、修改列、删除列。
修改完成后需要删除分布式表并重建。
举例如下:
- PUT /api/v1/ck/table/test
- {
- "@name": "表名",
- "name":"t1",
- "@database": "数据库名",
- "database":"default",
- "add":[{
- "@name": "在field3后增加一个fieldNew,类型为String",
- "name":"fieldNew",
- "type":"String",
- "after":"field3"
- },
- {
- "@name": "在最后增加一个字段fieldLast,类型为Int32",
- "name":"filedLast",
- "type":"Int32"
- }],
- "modify":[{
- "@name": "将filed6修改为DateTime类型",
- "name":"field6",
- "type":"DateTime"
- }],
- "@drop":"删除field8,field9",
- "drop": ["field8", "field9"]
- }
复制代码
注意:该操作只能针对集群中各节点的本地表,且表在各个节点存在。对dist_开头的分布式表无法操作。
创建表
METHOD: POST
URL: /api/v1/ck/table/{clusterName}
创建表默认使用的是MergeTree引擎,如果指定了distinct为false,表示支持去重,使用的引擎为ReplacingMergeTree。
- POST /api/v1/ck/table/test
- {
- "name": "t1",
- "database": "default",
- "fields":[{
- "name":"id",
- "type":"Int32"
- },{
- "name":"birth",
- "type":"Date"
- },{
- "name":"name",
- "type":"String"
- }],
- "@order": "order by 的字段,可以指定多个",
- "order": ["id"],
- "partition": "partition by的字段",
- "partition":"toMMMMYY(birth)",
- "distinct": true
- }
复制代码
当然,最终的引擎还是要根据集群是否支持副本来决定,一共有以下几种情况:
distinct | isReplica | engine | true | true | ReplicatedReplacingMergeTree | true | false | ReplacingMergeTree | false | true | ReplicatedMergeTree | false | false | MergeTree |
与此同时,还需要在集群里创建一张dist_开头的分布式表。
删除表
METHOD: DELETE
URL: /api/v1/ck/table/{clusterName}
操作和描述表类似,通过tableName指定表名,database指定数据库名。
举例如下:
- DELETE http://192.168.31.55:8808/api/v1/ck/table/test?tableName=t1&database=default
复制代码
通过以上操作就能删除掉表t1。删除时先删dist_开头的分布式表,再删表t1。
注意:表必须在集群的各个节点存在且不能是dist_开头的分布式表。如果该本地表虽然在集群中各节点存在,但没有根据该本地表创建过分布式表,删除依然会报错。这一点需要注意。
结语
千里之行,始于足下。ckman的功能目前还只是初版,肯定还存着着诸多不足和可以改进的地方,希望大家多提意见,共同提升ckman的使用体验。
最新经典文章,欢迎关注公众号
---------------------
|