ClickHouse生产运维系列[部署篇]-01_ckman介绍及安装部署
根据网上资料显示,ckman(ClickHouse Manager)是由擎创科技这家公司自主研发的一款管理ClickHouse的工具。ckman拥有前后端,前后端分别采用不同的编程语言开发,前端采用Vue框架,后端使用Go语言编写。ckman主要用来管理ClickHouse集群、节点以及数据监控等。传统的ClickHouse集群部署比较复杂,流程步骤多,对于初学者来不是很友好,特别是在生产部署中,
一、前言
因今年下半年计划要接收研发中心一套ClickHouse集群生产系统。对于ClickHouse,之前曾初步调研,但并未做深入的研究,因这次根据计划确实要对该系统进行生产运维,所以决心在接收该系统前对其做些深入的学习研究。 作为学习研究的一部分,计划通过文章方式进行学习记录,针对该系列,计划初步分为部署篇、运维篇、优化篇等几部分内容。 对于部署篇,参照当前生产环境部署,计划分为如下几个章节:
-
ckman部署
-
zookeeper部署
-
ckman部署ClickHouse集群
-
Prometheus+Grafana部署
-
chproxy 部署配置
-
keepalived 配置
二、ckman简介
2.1 ckman介绍
根据网上资料显示,ckman(ClickHouse Manager)是由擎创科技这家公司自主研发的一款管理ClickHouse的工具。ckman拥有前后端,前后端分别采用不同的编程语言开发,前端采用Vue框架,后端使用Go语言编写。ckman主要用来管理ClickHouse集群、节点以及数据监控等。
传统的ClickHouse集群部署比较复杂,流程步骤多,对于初学者来不是很友好,特别是在生产部署中,工作量较大。使用ckman可以大大减轻集群部署难度,可以在段时间内快速部署一套ClickHouse集群。
另外可以方便通过ckman网页端的可视化界面,比较方便的完成诸如集群部署、导入、节点的增删、集群启停以及性能指标的监控等功能。目前ckman已在国内很多公司大量使用。
2.2 ckman架构
参照官网资料,可用如下一幅图来介绍ckman架构,如下图所示。 ::: hljs-center

:::
根据上图信息,结合官网介绍,ckman可支持多中心部署,使用nacos进行配置同步,可以对多个集群进行管理,在集群的每个节点下,如果配置node_exporter,则可以对对应的节点进行指标监控。node_exporter的数据传给prometheus,然后在前端展示。 注:Nacos 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
三、ckman编译
根据官网介绍,由于ckman使用go语言实现,若要编译ckman,需提前安装go语言环境(且go语言版本不低于1.17),另外在编译前还需要安装yarn。 ckman编译可以采用四种编译方式,分别是
-
tar.gz包编译
-
rpm包编译
-
docker编译
-
前端单独编译
因本次重点为通过ckman部署ClickHouse集群,所以对于ckman的深入研究不作为本篇重点内容,对于感兴趣的朋友可通过官网或网上资料深入学习研究,本次就不作为重点内容详述。
四、ckman部署
ckman的部署相对比较简单,有多种安装方式,比如可以选择rpm安装、tar包安装或者docker安装,本次选择rpm安装。
本次选择在Centos 7.9部署使用rpm包方式来安装ckman。 可登录ckman github网站下载最新版ckman,ckman github 官网地址 Releases · housepower/ckman · GitHub,截止到2024年3月4日,最新版ckman为v3.0.2版本。 ::: hljs-center

::: 官网上提供了多种架构的安装包,另外也提供了tar.gz及zip格式的源码包。
ckman可以安装在任意一台服务器上,也可以和其它环境合用。
本次我选择在一台Centos 7.9 虚拟机测试服务器上安装ckman。
使用root用户将下载的 ckman-3.0.2.x86_64.rpm 安装包上传到服务器上某个目录下,比如/home目录下。
然后采用如下步骤安装并启动ckman。
1)安装ckman
[root@xxxxxxxapp ~]# rpm -ivh ckman-3.0.2.x86_64.rpm Preparing... ################################# [100%] user ckman created Updating / installing... 1:ckman-0:3.0.2-1 ################################# [100%]
2)启动ckman服务
[root@xxxxxxxapp ~]# systemctl status ckman ● ckman.service - ClickHouse monitor and manage tool Loaded: loaded (/etc/systemd/system/ckman.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@xxxxxxxapp ~]# systemctl start ckman [root@xxxxxxxapp ~]# systemctl status ckman ● ckman.service - ClickHouse monitor and manage tool Loaded: loaded (/etc/systemd/system/ckman.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2024-03-04 17:49:59 CST; 2s ago Process: 2261873 ExecStart=/usr/local/bin/ckman -c=/etc/ckman/conf/ckman.hjson -p=/run/ckman/ckman.pid -l=/var/log/ckman/ckman.log -d (code=exited, status=0/SUCCESS) Main PID: 2261881 (ckman) Tasks: 10 Memory: 30.3M CGroup: /system.slice/ckman.service └─2261881 /usr/local/bin/ckman -c=/etc/ckman/conf/ckman.hjson -p=/run/ckman/ckman.pid -l=/var/log/ckman/ckman.log -d Mar 04 17:49:59 xxxxxxxapp systemd[1]: Starting ClickHouse monitor and manage tool... Mar 04 17:49:59 xxxxxxxapp ckman[2261873]: ckman is used to manager and monitor clickhouse Mar 04 17:49:59 xxxxxxxapp ckman[2261873]: ckman-v3.0.2 is running... Mar 04 17:49:59 xxxxxxxapp ckman[2261873]: See more information in /var/log/ckman/ckman.log Mar 04 17:49:59 xxxxxxxapp systemd[1]: Started ClickHouse monitor and manage tool. -- ckman默认采用8808端口 [root@xxxxxxxapp ~]# netstat -ntlp|grep 8808 tcp6 0 0 :::8808 :::* LISTEN 2261881/ckman [root@xxxxxxxapp ~]# lsof -i:8808 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ckman 2261881 ckman 9u IPv6 35915651 0t0 TCP *:8808 (LISTEN)
3)登录ckman
可以通过 http://xxx.xxx.xxx.xxx:8808/home 登录ckman网页地址。
ckman默认账号及密码分别是:ckman/Ckman123456!

登录ckman页面地址后,首页内容如下所示。

右上角还可以下拉选择中文界面,打开中文后的界面信息如下:

五、ckman配置文件及目录
5.1 配置文件
ckman安装后,会生成一个ckman.hjson的配置文件,可以看下该配置文件具体内容,如下所示。
[root@xxxxxxxapp ~]# cat /etc/ckman/conf/ckman.hjson
// ckman config file
// All password can be encrypt by ENC(xxxxxxxxx),
// you can get encrypt password by using: ./ckman --encrypt 123456 to get password like: E310E892E56801CED9ED98AA177F18E6
// If password not including by ENC(), that means it's a plaintext.
// hjson(https://hjson.github.io/) is easy for humans to read and write.
{
"server":{
//"ip":
"port": 8808,
"https": false,
//certfile:
//keyfile:
"pprof": true,
"session_timeout": 3600,
//support local, mysql, postgres
"persistent_policy": "local",
"task_interval": 5
//public_key:
},
"log":{
"level": "INFO",
"max_count": 5,
// megabyte
"max_size": 10,
// day
"max_age": 10
},
// clickhouse connect pool options
"clickhouse":{
//sets the maximum number of open connections to the database
"max_open_conns": 10,
//sets the maximum number of connections in the idle
"max_idle_conns": 2,
//sets the maximum amount of time a connection may be idle.
"conn_max_idle_time": 10
},
// cron job task
"cron":{
"sync_logic_schema": "0 * * * * ?",
"watch_cluster_status": "0 */3 * * * ?",
"sync_dist_schema": "30 */10 * * * ?"
},
//"persistent_config":{
// // if peristent_policy is mysql, must config this
// "mysql":{
// "host": "127.0.0.1",
// "port": 3306,
// "user": "root",
// // you can use ./ckman --encrypt 123456 to get password like: E310E892E56801CED9ED98AA177F18E6
// "password": "ENC(E310E892E56801CED9ED98AA177F18E6)",
// // database must be created before start ckman
// "database": "ckman_db"
// },
// "local":{
// "format": "json"
// "config_dir": "/etc/ckman/conf"
// "config_file": "clusters"
// }
//},
"nacos":{
"enabled": false,
"hosts":[
"127.0.0.1"
],
"port": 8848,
"user_name": "nacos",
// you can use './ckman --encrypt nacos' to get password like: A7561228101CB07938FAFF00C4444546
"password": "ENC(A7561228101CB07938FAFF00C4444546)"
//namespace_id:
}
}
以上ckman.hjson配置文件包含 server、log、clickhouse、cron、nacos等几个部分,这几个部分下对应了很多配置信息,比如server下涵盖了 port、pprof、session_timeout等配置相关的内容。
5.2 目录结构
使用rpm安装ckman,默认安装在/etc/ckman目录下,可以通过tree命令来展现下ckman目录及其子目录结构。
[root@xxxxxxxapp ~]# cd /etc/ [root@ivorysqldb etc]# tree -L 3 ckman/ ckman/ ├── conf │ ├── ckman.hjson │ ├── migrate.hjson │ ├── password │ ├── server.crt │ └── server.key ├── dbscript │ └── postgres.sql └── package └── README.md 3 directories, 7 files
通过上述tree目录展示,可以看到ckman目下包含了 conf、dbscript、package这三个目录,conf是ckman的配置文件目录,内涵了诸如ckman.hjson配置文件,passord密码文件和一些秘钥等。
dbscript包含了一个postgres.sql脚本文件,查看该脚本文件,内容如下。
-- 该脚本文件包含了一些建表和创建序列等内容,对于该脚本具体作用,还不慎了解,后面可以慢慢熟悉。
[root@xxxxxxxapp dbscript]# cat postgres.sql
-- Converted by db_converter
START TRANSACTION;
DROP TABLE IF EXISTS "tbl_cluster";
CREATE TABLE "tbl_cluster" (
"id" bigint ,
"created_at" timestamp with time zone ,
"updated_at" timestamp with time zone ,
"deleted_at" timestamp with time zone ,
"cluster_name" varchar(382) ,
"config" text ,
PRIMARY KEY ("id"),
UNIQUE ("cluster_name")
);
DROP TABLE IF EXISTS "tbl_logic";
CREATE TABLE "tbl_logic" (
"id" bigint ,
"created_at" timestamp with time zone ,
"updated_at" timestamp with time zone ,
"deleted_at" timestamp with time zone ,
"logic_name" varchar(382) ,
"physic_clusters" text ,
PRIMARY KEY ("id"),
UNIQUE ("logic_name")
);
DROP TABLE IF EXISTS "tbl_query_history";
CREATE TABLE "tbl_query_history" (
"cluster" varchar(382) ,
"checksum" varchar(382) ,
"query" text ,
"create_time" timestamp with time zone ,
PRIMARY KEY ("checksum")
);
DROP TABLE IF EXISTS "tbl_task";
CREATE TABLE "tbl_task" (
"task_id" varchar(382) ,
"status" bigint ,
"config" text ,
PRIMARY KEY ("task_id")
);
-- Post-data save --
COMMIT;
START TRANSACTION;
-- Foreign keys --
-- Sequences --
CREATE SEQUENCE tbl_cluster_id_seq;
SELECT setval('tbl_cluster_id_seq', max(id)) FROM tbl_cluster;
ALTER TABLE "tbl_cluster" ALTER COLUMN "id" SET DEFAULT nextval('tbl_cluster_id_seq');
CREATE SEQUENCE tbl_logic_id_seq;
SELECT setval('tbl_logic_id_seq', max(id)) FROM tbl_logic;
ALTER TABLE "tbl_logic" ALTER COLUMN "id" SET DEFAULT nextval('tbl_logic_id_seq');
-- Full Text keys --
COMMIT;
好了,以上就是ckman的相关知识内容,作为安装篇,我们已经将ckman安装上了,下一篇内容是安装配置zookeeper,后面我会做更新,敬请期待。
更多推荐




所有评论(0)