背景:
用戶集群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;