Sentinel 故障转移
1.1检测主观下线状态
Sentinel 每秒一次的频率向所有与他创建了命令链接的实例(包括主服务器、从服务器、其他Sentinel在内)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线。
实例对PING命令的回复可以分为以下两种情况:
·有效回复:实例返回+PONG、LOADING、MASTERDOWN三种回复的其中一种。
·无效回复:实例返回除+PONG、LOADING、MASTERDOWN三种回复之外的其他回复,或者在指定时限内没有返回任何回复。
如果一个实例在downaftermilliseconds毫秒内,连续向Sentinel返回无效回复,那么Sentinel会修改这个实例所对应的实例结构,在结构的flags属性中打开SRI_S_DOWN标识,以此来表示这个实例已经进入主观下线状态。
1.2检查客观下线状态
当Sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务器是否真的下线了,它会向同样监视这一主服务器的其他Sentinel进行询问,看它们是否也认为主服务器已经进入了下线状态(可以是主观下线或者客观下线)。当Sentinel从其他Sentinel那里接收到足够数量的已下线判断之后,Sentinel就会将从服务器判定客观下线,并对主服务器执行故障转移操作。
2.1 选举领头Sentinel
当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头Sentinel,并由领头Sentinel对下线主服务器执行故障转移操作。
如果有多个 sentinel 都判定某个主服务器为客观下线,它们就会参与 leader