ClickHouse是一种用于在线分析处理的面向列的开源DBMS。 由俄罗斯IT公司Yandex为Yandex.Metrica网站分析服务开发的, 多用于OLAP分析需求. 今天记录下clickhouse-operator的搭建部署.
这里只会分享ck operator的部署流程, 至于它的原理及operator的原理,不会详细说明.
Ck以2*2为例, 使用表复制.
部署zookeeper
由于表复制需要zk的协调, 这里直接使用ck github上的zk容器部署方案, 3节点statefulset,yaml文件大家可参考这里,当然在生产环境下量好使用pv来保障可用性, 由于只是测试环境这里直接使用的是emptyDir.
1 | kubectl -n clickhouse-operator apply -f zk-node-3.yaml |
node打taints
考虑到ck的资源消耗, 因此需要使用taint来控制其调度
1 | # 添加taint |
local PV
配置local PV
配置ck使用的存储, 这里没有使用共享存储, 直接使用宿主机的systemFile做为PV
1 | apiVersion: storage.k8s.io/v1 |
1 | kubectl apply -f pv-pvc.yaml |
部署operator
使用OPERATOR_NAMESPACE=clickhouse-operator
变量指定需要部署的ns,这里为clickhouse-operator
1 | curl -s https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator-web-installer/clickhouse-operator-install.sh| OPERATOR_NAMESPACE=clickhouse-operator bash |
部署Clickhouse
yaml文件
这里以ck 2*2
为例子, 即 2shard+ 2replicas
1 | apiVersion: 'clickhouse.altinity.com/v1' |
说明:
- 由于节点上打了taint, 因此需要使用tolerations
- 由于使用了local PV, 因此使用nodeAffinity来限制pod调度到合适的节点,同时使用podAntiAffinity来限制相同的clickhouse pod不调度到相同节点.
- 可以限制使用的cpu/memory, 以免ck对整个集群造成影响.
1 | kubectl -n clickhouse-operator apply -f ck-2x2-cluster.yaml |
默认情况下, ck-operator的默认用户名密码为cli, 可通过clickhouse-operator/deploy/operator/clickhouse-operator-install-template.yaml`修改
1
2
3
4
5
6# 修改 01-clickhouse-user.xml, 大约在1682行
<password_sha256_hex>716b36073a90c6fe1d445ac1af85f4777c5b7a155cea359961826a030513e448</password_sha256_hex>
# 修改
chUsername: clickhouse_operator
chPassword: clickhouse_operator_password # 密码, 大约在1480行
chPort: 812
验证pod运行
可以看到, 出现了4个pod刚好对应2*2
且pv都由avaliable变成bound状态,说明按照预期的方式调度
创建的pod名称例如chi-{metadata}-{clusterName}-0-0-0等格式
查看configmap
1 | kubectl get cm -n clickhouse-operator |
查看svc/ep对象
登录集群
最后可以通过clickhouse-1box
这个service来登录ck集群
1 | clickhouse-client -h clickhouse-1box --port 9000 |
过程分析
在pv对应的目录下,会发现ck operator生成的目录结构如下:
目录结构
1 | . |
启动进程
clickhouse启动时的主要配置文件为/etc/clickhouse-server/config.xml, 但其它的配置文件如/etc/clickhouse-server/config.d
等里面的配置可以覆盖主配置. 参考
容器挂载
看一下pod中挂载情况,
1 | # ... |
可以发现, 有2个common配置, common配置是4个pod都相同的配置, 也就是跟集群相关的配置,另外每个pod还有特定的配置,每个pod都不相同,如macros.xml
配置文件分析
部署完,生成的operator的配置如下:
其中, 下面几个带operator相关的配置是operator本身的配置, 可以直接用官方的,也可以根据实际情况微调,但并不是所有的配置文件都会用上, 上面的那几个则为clickhouse集群相关的配置, 不需要关注, 这里重点看以下文件.
config.xml
这个是clickhouse启动时指定的主配置文件, 该配置文件可以被config.d下的配置文件覆盖或者合并
config.d
Path to folder where ClickHouse configuration files common for all instances within CHI are located.
集群相关的配置文件, 分片相关的配置就在该目录下
conf.d
Path to folder where ClickHouse configuration files unique for each instance (host) within CHI are located.
每个实际独有的配置, 如实例名
users.d/users.xml
Path to folder where ClickHouse configuration files with users settings are located.
Files are common for all instances within CHI
用户权限相关的配置
配置文件相关的大家可自行查看内容,比较好理解.
客户端登录
如果不写端口,域名中默认端口9000
至此, 整个clickhouse-operator就部署完了, github上docs/chi-example有非常多的例子适用各种场合,非常有参考价值.
后续还有操作比如分片扩容, ck版本升级等操作, github上也有详细的说明.