一、问题描述
2019-02-19 08:44左右,实时计算服务重启,报错显示找不到zk集群的leader节点,同时ZooKeeper集群有告警显示连接超时:
指标[连接耗时(ms)=18221]符合告警规则[连接耗时(ms)>=3000]
二、排查过程
- 查看当前集群状态,集群状态正常,查看报“连接超时”的zk节点日志,发现有shutdown情况,表明作为follower的zk server在一段时间内会停止工作;
2. 继续查看zk运行日志,发现有大量的fsync的告警,说明ZooKeeper将数据存入磁盘慢,导致ZooKeeper节点间心跳超时,进而ZooKeeper实例异常;
3. 查看磁盘划分情况和zk data路径,发现zk数据盘没有单独划分,而且机器是老机器,zk数据量增大,磁盘IO性能跟不上;
三、根因分析
- “FOLLOWER”在跟“LEADER”同步时,fsync操作时间过长,导致超时。
四、解决方法
- 根本解决: 挂载新的磁盘到zk节点机器上,提高磁盘IO性能,根本上解决fsync超时问题;
2. 临时规避: 增大zk中tickTime、syncLimit 配置参数,需要重启节点,可以一台一台操作。