一、前言
因今年下半年计划要接收研发中心一套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,后面我会做更新,敬请期待。