Zookeeper是如何检测服务器宕机的?
在Zookeeper的机制里,所谓的宕机并非简单地指服务器断电或蓝屏,而是指服务器停止响应客户端请求,或者直接因为故障导致进程重启,甚至完全无法开机启动,这些情况在广义上都被归类为宕机状态。
在Zookeeper的机制里,所谓的宕机并非简单地指服务器断电或蓝屏,而是指服务器停止响应客户端请求,或者直接因为故障导致进程重启,甚至完全无法开机启动,这些情况在广义上都被归类为宕机状态。
这个定义其实挺关键的,很多人会忽略“停止响应”也是一种宕机。ZK的Watchers机制本质上靠的是心跳包,只要Leader一段时间收不到某个Follower的心跳,就会认为它挂了,哪怕它只是网络延迟了。
这个回答有点避重就轻了。题目问的是“如何检测”,核心在于心跳机制(Heartbeat)和会话超时(Session Timeout)。ZK客户端会定期发送ping包,如果Leader在zxid和tickTime定义的超时间内没收到,就会判定该Follower宕机并移除。单纯定义什么是宕机没有解决“怎么发现它”的问题,建议补充具体的超时判定逻辑。
这个定义确实很关键。很多人误以为只要机器还亮着就没宕机,其实ZK更关注的是“服务可用性”。只要心跳断了或者请求无响应,哪怕服务器还在重启,它也会被视为不可用节点。