????? 在Leader觸發failover之前,首先wait數秒(隨即0~5),以便讓其他sentinel實例準備和調整。如果一切正常,那么leader就需要開始將一個salve提升為master,此slave必須為狀態良好(不能處于SDOWN/ODOWN狀態)且權重值最低(redis.conf中)的,當master身份被確認后,開始failover
??? A)“+failover-triggered”: Leader開始進行failover,此后緊跟著“+failover-state-wait-start”,wait數秒。
??? B)“+failover-state-select-slave”: Leader開始查找合適的slave
??? C)“+selected-slave”: 已經找到合適的slave
??? D) “+failover-state-sen-slaveof-noone”: Leader向slave發送“slaveof no one”指令,此時slave已經完成角色轉換,此slave即為master
??? E) “+failover-state-wait-promotition”: 等待其他sentinel確認slave
??? F)“+promoted-slave”:確認成功
??? G)“+failover-state-reconf-slaves”: 開始對slaves進行reconfig操作。
??? H)“+slave-reconf-sent”:向指定的slave發送“slaveof”指令,告知此slave跟隨新的master
??? I)“+slave-reconf-inprog”: 此slave正在執行slaveof + SYNC過程,如過slave收到“+slave-reconf-sent”之后將會執行slaveof操作。
??? J)“+slave-reconf-done”: 此slave同步完成,此后leader可以繼續下一個slave的reconfig操作。循環G)
??? K)“+failover-end”: 故障轉移結束
??? L)“+switch-master”:故障轉移成功后,各個sentinel實例開始監控新的master。