背景:
用户集群DDL、DML操作较多情况下,Zookeeper 会成为整个ClickHouse集群的瓶颈,虽然扩容Zookeeper节点能起到一定缓解作用,但是在业务量继续上升之后,扩容Zookeeper效果不佳。此时,多套Zookeeper集群会成为解决ClickHouse业务紧张的最佳选择。天翼云ClickHouse产品支持多Zookeeper方案,用户可以根据集群负载情况选择添加多套Zookeeper 集群,从而缓解集群负载。
注意事项:
- 多 Zookeeper 方案只能应用于高可用集群
- 最多可以支持5套额外的 Zookeeper 集群。
- 同一个集群内所有的 Zookeeper 节点规格保持一致,规格变配后也会保持同一规格。
- 多 Zookeeper 使用只是在创建表的时候有区别,其他按照数仓常规操作即可。
具体操作步骤:在集群详情-》配置信息里头,可以点击“升级多ZK”按钮,确定后就能自动创建额外的Zookeeper集群;
多Zookeeper升级完成后,可以在 实例详情-》节点信息-〉协调节点 查看扩出来的zookeeper 集群信息
可以在 参数配置-》metrika.xml 里头查询具体的zookeeper配置信息
创建完多Zookeeper之后,具体如何使用额外的Zookeeper集群呢,方法如下:
1、创建数据库
CREATE DATABASE IF NOT EXISTS testdb ON CLUSTER default_cluster;
2、创建连接默认Zookeeper的表
CREATE TABLE IF NOT EXISTS testdb.sample on cluster default_cluster (id UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/testdb/sample', '{replica}') ORDER BY id;
3、创建连接额外Zookeeper的表
根据metrika.xml 里头查询到的额外zookeeper集群名称:zookeeper2,建表时在zookeeper路径前把名称加上:
CREATE TABLE IF NOT EXISTS testdb.sample2 on cluster default_cluster (id UInt64) ENGINE = ReplicatedMergeTree('zookeeper2:/clickhouse/tables/{shard}/testdb/sample2', '{replica}') ORDER BY id;