判断节点宕机
如果一个节点认为另外一个节点宕机,那么就是pfail(主观宕机);
如果多个节点都认为另外一个节点宕机,超过半数,那么就是fail(客观宕机)。
在cluster-node-timeout内,如果某个节点一直没有返回pong,则在超时后就会被认为是pfail。
如果一个节点认为某个节点pfail,就会在gossip ping消息中,将pfail的信息发送给其他节点,如果超过半数的节点都认为是pfail,那么就会变成fail。
从节点过滤
对宕机的master节点,会从其所有的slave节点中,选择一个切换为master节点。
会检查每个slave节点与master节点的断开连接时间,如果超过了 cluster-node-timeout * cluster-slave-validity-factor
,这个salve节点就没有资格成为master节点。
从节点选举
每一个从节点,都会根据自己对master复制数据的offset,来设置一个选举时间,offset越大,说明已经复制的数据越多,从节点的选举时间就能越靠前,优先进行选举。
所有的master节点会对要进行选举的slave进行投票,如果超过 n/2+1
的大部分master节点都投票给了某个slave节点,那么slave节点选举通过,会将该slave节点切换为master节点。