1. 程式人生 > >redis集群節點宕機

redis集群節點宕機

div 強一致 clust info post 超過半數 mage 在一起 情況下

redis集群是有很多個redis一起工作,那麽就需要這個集群不是那麽容易掛掉,所以呢,理論上就應該給集群中的每個節點至少一個備用的redis服務。這個備用的redis稱為從節點(slave)。

1、集群是如何判斷是否有某個節點掛掉

  首先要說的是,每一個節點都存有這個集群所有主節點以及從節點的信息。它們之間通過互相的ping-pong判斷是否節點可以連接上。如果有一半以上的節點去ping一個節點的時候沒有回應,集群就認為這個節點宕機了,然後去連接它的備用節點。

2、集群進入fail狀態的必要條件

A、某個主節點和所有從節點全部掛掉,我們集群就進入faill狀態。

B、如果集群超過半數以上master掛掉,無論是否有slave,集群進入fail狀態.

C、如果集群任意master掛掉,且當前master沒有slave.集群進入fail狀態

3、redis的投票機制

具體原理如下圖所示:

    技術分享圖片

投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超時(cluster-node-timeout),認為當前master節點掛掉。

選舉的依據依次是:網絡連接正常->5秒內回復過INFO命令->10*down-after-milliseconds內與主連接過的->從服務器優先級->復制偏移量->運行id較小的。選出之後通過slaveif no ont將該從服務器升為新主服務器。

通過slaveof ip port命令讓其他從服務器復制該信主服務器。

最後當舊主重新連接後將其變為新主的從服務器。註意如果客戶端與舊主服務器分隔在一起,寫入的數據在恢復後由於舊主會復制新主的數據會造成數據丟失。

4、集群中的主從復制
集群中的每個節點都有1個至N個復制品,其中一個為主節點,其余的為從節點,如果主節點下線了,集群就會把這個主節點的一個從節點設置為新的主節點繼續工作,這樣集群就不會因為一個主節點的下線而無法正常工作。
註意:
1、如果某一個主節點和他所有的從節點都下線的話,redis集群就會停止工作了。redis集群不保證數據的強一致性,在特定的情況下,redis集群會丟失已經被執行過的寫命令。

2、使用異步復制(asynchronous replication)是redis 集群可能會丟失寫命令的其中一個原因,有時候由於網絡原因,如果網絡斷開時間太長,redis集群就會啟用新的主節點,之前發給主節點的數據就會丟失。

redis集群節點宕機