ZooKeeper 协调配置是什么
副本表与分布式 DDL 依赖 ZooKeeper(或内置 Keeper)做协调:在 config.xml 的 zookeeper 段配置节点列表并设置会话超时,同一集群的所有节点应指向同一组协调服务。常用参数有 session_timeout_ms、operation_timeout_ms 与 root 路径。ZooKeeper 不可用期间已有副本表通常仍可读,但无法创建新副本,也做不了副本注册类操作。
基本信息
| 配置位置 | /etc/clickhouse-server/config.xml 的 <zookeeper> 段 |
|---|---|
| 节点格式 | <node><host>zk-1</host><port>2181</port></node>,可配多个 |
| 相关参数 | session_timeout_ms、operation_timeout_ms、root |
| 生效方式 | 改完需要重启或重载服务 |
| 所属系统 | ClickHouse 服务端配置 |
典型使用场景
- 副本表初始化:新建复制表前先确认协调服务可用
- 集群部署:所有节点指向同一组 ZooKeeper 地址
- 超时调优:网络抖动频繁时调整会话与操作超时
- 路径隔离:多个集群共用一套 ZooKeeper 时用不同 root
- 故障排查:副本同步异常时先确认协调服务状态
配置示例
配置示例
<zookeeper>
<node>
<host>zk-1</host>
<port>2181</port>
</node>
<node>
<host>zk-2</host>
<port>2181</port>
</node>
<session_timeout_ms>30000</session_timeout_ms>
<operation_timeout_ms>10000</operation_timeout_ms>
<root>/clickhouse/prod</root> <!-- 多集群共用时做路径隔离 -->
</zookeeper>配置项读法
| 参数 | 含义 | 注意 |
|---|---|---|
| host / port | 协调节点地址与端口 | 建议至少三个节点 |
| session_timeout_ms | 会话超时 | 过短会在网络抖动时频繁重连 |
| operation_timeout_ms | 单次操作超时 | 应小于会话超时 |
| root | 集群在协调服务中的路径 | 多集群共用时必须区分 |
| 节点列表 | 全部协调成员 | 各节点配置必须一致 |
协调服务不可用期间已有副本表通常仍可读,但无法创建新副本、也无法做副本注册类操作;这类故障的表现往往不是「查不到数据」而是「所有新动作全部失败」。
三个 ZooKeeper 节点全部部署在同一台机器上属于伪高可用,机器一挂协调能力全部失效,故障域必须分开。
协调节点磁盘写满后副本会集体进入只读,监控必须覆盖 ZooKeeper 的磁盘用量与请求延迟,不能只看 ClickHouse 自身指标。
排障时可在协调节点上用四字命令查看会话与延迟,ClickHouse 侧再查询 system.zookeeper 确认节点路径是否存在,两边对照能区分是协调服务故障还是表配置问题。