1. 程式人生 > >Redis叢集--故障轉移

Redis叢集--故障轉移

Redis叢集–故障轉移

標籤(空格分隔): Redis

舉例

如果叢集中的某一節點宕機會出現什麼狀況?我們這裡假設6380宕機。
這裡寫圖片描述
1.停止6380節點
2.我們嘗試連線下叢集,並且檢視叢集資訊,發現6380的節點斷開連線
3.測試叢集是否可用
結論:叢集中的某個節點斷開之後,key值計算出來的插槽值如果剛好在這個節點上,儲存資料失敗!綜合故障所屬:叢集只是用來擴充套件叢集的儲存資料量,那怎麼來保障高可用呢? — 結合主從、主從從、哨兵模式

故障機制

1、 叢集中的每個節點都會定期的向其它節點發送PING命令,並且通過有沒有收到回覆判斷目標節點是否下線;
2、 叢集中每一秒就會隨機選擇5個節點,然後選擇其中最久沒有響應的節點放PING命令;
3、 如果一定時間內目標節點都沒有響應,那麼該節點就認為目標節點疑似下線


4、 當叢集中的節點超過半數認為該目標節點疑似下線,那麼該節點就會被標記為下線
5、 當叢集中的任何一個節點下線,就會導致插槽區有空檔,不完整,那麼該叢集將不可用
6、 如何解決上述問題?
a) 在Redis叢集中可以使用主從模式實現某一個節點的高可用
b) 當該節點(master)宕機後,叢集會將該節點的從資料庫(slave)轉變為(master)繼續完成叢集服務;

架構

這裡寫圖片描述
出現故障:
這裡寫圖片描述

所以對於Redis叢集中最低配置都是三主三從。

建立三主三從叢集

建立叢集,指定了從庫數量為1,建立順序為主庫(3個)、從庫(3個):

./redis-trib.rb create --replicas 1 192.168.116.137:6379 192.168.116.137:6380 192.168.116.137:6381 192.168.116.137:6479 192.168.116.137:6480 192.168.116.137:6481

使用叢集的注意事項:
1、 多鍵的命令操作(如MGET、MSET),如果每個鍵都位於同一個節點(插槽所處的節點),則可以正常支援,否則會提示錯誤。
2、 叢集中的節點只能使用0號資料庫,如果執行SELECT切換資料庫會提示錯誤。