(1)redis cluster选主(5)

一、redis 选主过程

 slave发现自己的master为FAIL,便尝试Failover,成新master。但挂掉master可能有多个slave。Failover经过类似Raft在集群内一致:

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

    2)将自己记录集群currentEpoch加1,广播Failover Request信息

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

    4)尝试failover的slave收集FAILOVER_AUTH_ACK超半数成新Master,广播Pong通知其他集群节点

ps:epoch纪元:用类似 Raft 算法 term(任期)称为 ,给事件增加版本号。currentEpoch (选举) 和 configEpoch(指节点所负责槽位信息)

打开主服务器的持久化,不丢数据

二、选主代码分析

1、slave定期发送ping检测master存活性,master未响应,记为疑似下线。

clusterHandleSlaveFailover执行重新选主核心逻辑

2、clusterHandleSlaveFailover内部通过clusterRequestFailoverAuth方法向集群所有节点发送CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST报文,通知slave准备执行failover

超过n/2+1个master的response升为主

3、clusterProcessPacket内部主要处理,选举过程中报文相关解析逻辑CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST和CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK报文。

    request报文的处理逻辑:如果master就发回ack响应

    ack报文的处理逻辑:增加支持投票数failover_auth_count++

https://www.jianshu.com/p/03d87fa84fc4

https://blog.csdn.net/chen_kkw/article/details/82724330

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。