当slave 发现自己的master 变为FAIL 状态时,便尝试进行Failover,以期成为新的master。由于挂掉的master 可能会有多个slave,从而存在多个slave 竞争成为master节点的过程, 其过程如下:

1.slave 发现自己的master 变为FAIL

2.将自己记录的集群currentEpoch 加1,并广播FAILOVER_AUTH_REQUEST 信息

3. 其他节点收到该信息, 只有master 响应, 判断请求者的合法性, 并发送FAILOVER_AUTH_ACK,对每一个epoch 只发送一次ack

4.尝试failover 的slave 收集FAILOVER_AUTH_ACK

5.超过半数后变成新Master

6.广播Pong 通知其他集群节点。

Redis Cluster 既能够实现主从的角色分配,又能够实现主从切换,相当于集成了Replication 和Sentinal 的功能。