redis集群節點宕機
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集群會丟失已經被執行過的寫命令。
redis集群節點宕機