我们需要知道 Sentinel
是通过对自己监控的所有实例(主服务器、从服务器、监控当前主服务器的其他Sentinel
)发送PING 命令来判断服务是否下线的,然后Sentinel既然发送了一个命令,那么自然希望得到回复, 这个回复也是Sentinel进行判断的重要标准:
对于 Sentinel来说,有效回复有以下三种:
- +PONG
- -LOADING
- -MASTERDOWN
无效回复就是除了这三种之外的所有回复,或者没有在指定时间内回复也算无效回复
Sentinel
是根据时间长度来判断是否下线的,也就是在一个时间段内如果一个服务器联系向Sentinel
发送无效回复,那么当前的Sentinel
就认为这个服务器已经下线,这就是主观下线
这个时间段是在配置文件sentinel.conf中配置好的:
如图,sentinel down-after-milliseconds 服务器名 毫秒数
就是说 在主服务器mymaster 连续30000ms 都向 这个Sentinel
服务器返回无效回复的时候,Sentinel
就会把主服务器mymaster标记为主观下线.
当Sentinel
将一个主服务器判断为主观下线之后,为了确认这个服务器是否真的下线了,它会向其他同样监视这个主服务器的Sentinel
进行询问,看它们是否也认为主服务器已经进入下线判断。当Sentinel
从其他Sentinel那里接收到足够数量的已下线判断之后,Sentinel
就会将主服务器判定为客观下线,然后进行选举操作
然后对于足够数量的判断,这也是在配置文件 sentinel.conf
中定义好的:
如图,最后的 2 就是表示包括当前的Sentinel在内,只要总共有两个Sentinel认为主服务器已经进入下线状态,那么就把主服务器设置为客观下线