serverCron(redis.c)--》sentinelHandleDictOfRedisInstances(sentinel.c)
(执行定期操作
比如 PING 实例、分析主服务器和从服务器的 INFO 命令
向其他监视相同主服务器的 sentinel 发送问候信息
并接收其他 sentinel 发来的问候信息
执行故障转移操作,等等
)
——》sentinelHandleRedisInstance(sentinel.c)对给定的实例执行定期操作
--》sentinelSendPeriodicCommands(sentinel.c)根据情况,向实例发送 PING、 INFO 或者 PUBLISH 命令
——》对主服务器进行处理
1 判断 master 是否进入 ODOWN 状态 sentinelCheckObjectivelyDown(sentinel.c)主观下线
2 如果主服务器进入了 ODOWN 状态,那么开始一次故障转移操作 sentinelStartFailoverIfNeeded
设置主服务器的状态,开始一次故障转移sentinelStartFailover
强制向其他 Sentinel 发送 SENTINEL is-master-down-by-addr 命令 sentinelAskMasterStateToOtherSentinels
(如果 Sentinel 认为主服务器已下线,那么它会通过向其他 Sentinel 发送 SENTINEL is-master-down-by-addr 命令,尝试获得足够的票数,将主服务器标记为 ODOWN 状态,并开始一次故障转移操作
3 执行故障转移 sentinelFailoverStateMachine
等待故障转移开始 sentinelFailoverWaitStart
选举出master在指定epoch上的领头 sentinelGetLeader
选择新主服务器 sentinelFailoverSelectSlave
升级被选中的从服务器为新主服务器 sentinelFailoverSendSlaveOfNoOne
等待升级生效,如果升级超时,那么重新选择新主服务器 sentinelFailoverWaitPromotion
向从服务器发送 SLAVEOF 命令,让它们同步新主服务器 sentinelFailoverReconfNextSlave
事件处理器
读事件处理器 redisAeReadEvent redisAsyncHandleRead redisBufferRead redisProcessCallbacks
写事件处理器 redisAeWriteEvent redisBufferWrite
sentinelSendPing sentinelPingReplyCallback