Redis集羣--故障轉移

Redis集羣–故障轉移

標籤(空格分隔): Redisweb


舉例

若是集羣中的某一節點宕機會出現什麼情況?咱們這裏假設6380宕機。
這裏寫圖片描述
1.中止6380節點
2.咱們嘗試鏈接下集羣,而且查看集羣信息,發現6380的節點斷開鏈接
3.測試集羣是否可用
結論:集羣中的某個節點斷開以後,key值計算出來的插槽值若是恰好在這個節點上,存儲數據失敗!綜合故障所屬:集羣只是用來擴展集羣的存儲數據量,那怎麼來保障高可用呢? — 結合主從、主從從、哨兵模式redis

故障機制

一、 集羣中的每一個節點都會按期的向其它節點發送PING命令,而且經過有沒有收到回覆判斷目標節點是否下線;
二、 集羣中每一秒就會隨機選擇5個節點,而後選擇其中最久沒有響應的節點放PING命令;
三、 若是必定時間內目標節點都沒有響應,那麼該節點就認爲目標節點疑似下線
四、 當集羣中的節點超過半數認爲該目標節點疑似下線,那麼該節點就會被標記爲下線
五、 當集羣中的任何一個節點下線,就會致使插槽區有空檔,不完整,那麼該集羣將不可用
六、 如何解決上述問題?
a) 在Redis集羣中可使用主從模式實現某一個節點的高可用
b) 當該節點(master)宕機後,集羣會將該節點的從數據庫(slave)轉變爲(master)繼續完成集羣服務;數據庫

架構

這裏寫圖片描述
出現故障:
這裏寫圖片描述架構

因此對於Redis集羣中最低配置都是三主三從。svg

建立三主三從集羣

建立集羣,指定了從庫數量爲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

使用集羣的注意事項:
一、 多鍵的命令操做(如MGET、MSET),若是每一個鍵都位於同一個節點(插槽所處的節點),則能夠正常支持,不然會提示錯誤。
二、 集羣中的節點只能使用0號數據庫,若是執行SELECT切換數據庫會提示錯誤。ui