操作场景
当ZooKeeper集群出现异常时,您可以通过以下步骤进行故障诊断,快速定位问题原因并采取相应的处理措施。
诊断思路
1、检查集群节点状态:检查各节点是否存活及角色状态。重点关注集群中是否有且仅有一个Leader,存活节点数是否超过半数。
2、检查网络连通性:确认各节点之间2888、3888、2181端口的网络通信是否正常。
3、检查磁盘空间与IO:确认dataDir和dataLogDir所在磁盘空间是否充足,磁盘IO是否存在瓶颈。
4、检查监控指标:确认请求堆积、平均处理延迟、堆内存使用率、ZNode数量和Watch数量是否出现异常。
5、检查日志异常信息:查看ZooKeeper运行日志中是否存在ERROR或WARN级别的异常信息。
典型故障处理
| 故障类型 | 故障现象 | 处理方式 |
|---|---|---|
| 集群脑裂 | 集群中出现两个或多个Leader | 1、检查各节点之间的网络连接,排除网络分区问题。 2、重启异常节点,使其重新加入集群参与选举。 3、确认zoo.cfg中各节点的server.N配置一致。 |
| 节点无法加入集群 | 新节点启动后无法加入集群,日志中持续报错。
| 1、检查新节点的zoo.cfg配置是否与集群其他节点一致。 2、检查新节点的myid文件是否正确配置。 3、检查新节点与集群中已有节点之间的端口通信是否正常。 4、检查新节点的dataDir目录中是否存在冲突的快照或日志文件,如有请清理后重新启动。 |
| 客户端频繁重连 | 客户端日志中出现大量连接断开和重新连接的记录 | 1、检查ZooKeeper服务端是否存在Full GC导致的长时间停顿。 2、检查网络是否存在间歇性中断或延迟抖动。 3、检查ZooKeeper的maxClientCnxns配置是否过低导致连接被拒绝。 4、检查客户端的会话超时时间设置是否合理。 |
| ZNode数量暴增 | 监控显示zookeeper_NodeCount指标出现暴增 | 1、排查是否存在业务程序未正确清理临时节点,导致节点残留。 2、排查是否存在程序异常导致重复创建节点。 3、手动清理不再使用的ZNode,释放内存。 4、检查并优化业务程序的节点创建逻辑,确保节点使用后及时删除。 |