Clickhouse环境下ZooKeeper Leader CPU占用过高排查求助
ZooKeeper Leader节点CPU占用过高排查方向(结合ClickHouse集群场景)
一、ZooKeeper自身状态与日志排查
- 查看Leader节点的ZooKeeper日志(默认路径
/var/log/zookeeper/或自定义配置路径),重点排查WARN、ERROR级别的信息,比如频繁的会话超时、节点创建/删除风暴、数据同步异常等 - 使用ZooKeeper自带工具确认集群状态:
- 执行
zkServer.sh status验证节点角色(Leader/Follower) - 通过
zkCli.sh连接集群后执行stat命令,关注OutstandingRequests(未处理请求数)、AvgLatency(平均请求延迟)指标,若数值持续偏高,说明Leader请求处理压力过大
- 执行
- 检查ZooKeeper快照与事务日志目录的磁盘IO情况,用
iostat -x 1 5或vmstat查看磁盘读写利用率,磁盘IO瓶颈会导致Leader处理请求时CPU等待占比升高
二、ClickHouse与ZooKeeper交互排查
- 查询ClickHouse系统表
system.zookeeper,执行SELECT * FROM system.zookeeper WHERE path='/clickhouse'查看节点结构,确认是否存在大量临时节点、频繁更新的元数据节点(比如分布式表分片状态、副本同步节点) - 检查ClickHouse服务日志(默认路径
/var/log/clickhouse-server/),搜索zookeeper相关条目,排查是否存在重复的节点创建、删除、watch操作——部分分布式表配置不当会触发这类高频请求 - 核对ClickHouse的ZooKeeper连接配置:
- 检查
zookeeper.session_timeout_ms是否过小,导致客户端频繁重连 - 确认
zookeeper.connection_pool_size是否设置过大,造成Leader节点连接数过载
- 检查
三、ZooKeeper配置与系统资源瓶颈排查
- 检查Leader节点的JVM配置(
zoo.cfg中的jvmflags参数),重点看堆内存-Xmx是否不足,导致频繁GC。可执行jstat -gc <zk_pid> 1000 10查看GC频率与耗时,FullGC频繁会大幅占用CPU资源 - 查看
zoo.cfg中的maxClientCnxns配置,确认是否允许过多客户端连接,导致Leader需要处理大量连接请求与心跳包 - 用
top或htop确认CPU占用主体是ZooKeeper的Java进程,再通过netstat -anp | grep <zk_port>查看网络连接状态,排查是否存在大量TIME_WAIT或ESTABLISHED连接
四、集群异常场景排查
- 检查Follower节点状态,执行
zkServer.sh status确认Follower的SyncConnected状态是否稳定,若Follower频繁断开重连,Leader会持续进行数据重同步,消耗大量CPU - 排查是否有非ClickHouse客户端连接ZooKeeper集群,通过
zkCli.sh执行ls /查看根节点下的非ClickHouse路径,其他分布式系统(如Kafka、HBase)的高频操作也可能导致Leader CPU升高
内容的提问来源于stack exchange,提问作者prasanth boggarapu
相关产品推荐
相关产品推荐

