1. 程式人生 > >21.Redis Cluster

21.Redis Cluster

複製與故障轉移

Redis叢集中的節點分為主節點(master)和從節點(slave),其中主節點用於處理槽,而從節點則用於複製某個主節點,並在被複制的主節點下線時,代替下線主節點繼續處理命令請求。
這裡寫圖片描述
一個節點成為從節點,並開始複製某個主節點這一資訊會通過訊息傳送給叢集中的其他節點,最終叢集中的所有節點都會知道某個從節點正在複製某個主節點。

故障檢測

叢集中的每個節點都會定期的向叢集中的其他節點發送PING訊息,以此來檢測對方是否線上,如果接收PING訊息的節點沒有在規定的時間內,向傳送PING訊息的節點返回PONG訊息,那麼傳送PING訊息的節點就會將接收PING訊息的節點標記為疑似下線(probable fail,PFAIL)。


叢集中的各個節點會通過互相傳送訊息的方式來交換叢集中各個節點的狀態資訊,例如某個節點是處於線上狀態、疑似下線狀態(PFAIL),還是已下線狀態(FAIL)。
如果在一個叢集裡面,半數以上負責處理槽的主節點都將某個主節點X報告為疑似下線,那麼這個主節點X將被標記為已下線(FAIL),將主節點X標記為已下線的節點會向叢集廣播一條關於主節點X的FAIL訊息,所有收到這條FAIL訊息的節點都會立即將主節點X標記為已下線。

故障轉移

當一個從節點發現自己正在複製的主節點進入了已下線狀態時,從節點將開始對下線主節點進行故障轉移,以下是故障轉移執行的步驟:
1.複製下線主節點的所有從節點裡面,會有一個從節點被選中;
2.被選中的從節點會執行SLAVEOF no one命令,成為新的主節點;
3.新的主節點會撤銷所有對已下線主節點的槽指派,並將這些槽全部指派給自己;
4.新的主節點向叢集廣播一條PONG訊息,這條PONG訊息可以讓叢集中的其他節點立即知道這個節點已經由從節點變成了主節點,並且這個主節點已經接管了原本由已下線節點負責處理的槽。
5.新的主節點開始接收和自己負責處理的槽有關的命令請求,故障轉移完成。

選舉新的主節點

這裡寫圖片描述