ClickHouse生产运维系列[部署篇]-01_ckman介绍及安装部署

一、前言

因今年下半年计划要接收研发中心一套ClickHouse集群生产系统。对于ClickHouse,之前曾初步调研,但并未做深入的研究,因这次根据计划确实要对该系统进行生产运维,所以决心在接收该系统前对其做些深入的学习研究。 作为学习研究的一部分,计划通过文章方式进行学习记录,针对该系列,计划初步分为部署篇、运维篇、优化篇等几部分内容。 对于部署篇,参照当前生产环境部署,计划分为如下几个章节:

  1. ckman部署

  2. zookeeper部署

  3. ckman部署ClickHouse集群

  4. Prometheus+Grafana部署

  5. chproxy 部署配置

  6. 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

image.png

:::

根据上图信息,结合官网介绍,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

image.png

::: 官网上提供了多种架构的安装包,另外也提供了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,后面我会做更新,敬请期待。

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚雷5580

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值