為什麼redis哨兵集群只有2個節點無法正常工作?

  • 2019 年 11 月 8 日
  • 筆記

文章由小編綜合整理 文章來源: https://blog.csdn.net/u010883383/article/details/77989145 https://blog.csdn.net/qq_25868207/article/details/79147469

由於redis的響應速度快,每秒支援的並發極高(號稱10萬),現在redis越來越流行了

redis支援的存儲有: string, hash(map),list, set, sortset 同時可以使用redis的setnx 來實現分散式鎖

首先談談redis的哨兵模式:

哨兵支援對主從的監控,並且當主節點掛機之後,可以啟動從節點升級為主節點繼續提供服務

同時哨兵也支援對客戶端提供發現服務,客戶端通過連接哨兵從而獲取主節點的資訊,如果主節點掛機,在升級從節點為主節點之後,客戶端通過哨兵可以連接上新的主節點

主節點和從節點之間通過同步寫命令來保持數據一致(在啟動的時候會立刻先同步主節點的快照,保存主節點的資訊)

判斷節點是否宕機並且需要重啟需要幾個哨兵協同判斷,當一定數量的哨兵(可配置) 認為主節點宕機才會去升級從節點

接下來談談redis的集群模式

redis集群從多主多從共同支撐,至少需要三個主節點才能啟動集群

每個集群包含 16384個槽 ,每一個主(從節點負責同步主節點的數據)負責存儲其中的某一個槽,redis 通過對key的hash 確定存儲在哪一個槽上面,

當需要加入新的節點或者刪除節點的時候 ,redis 會去維護不同主節點上面的槽,從而重新分配槽的所屬

為什麼redis哨兵集群只有2個節點無法正常工作?

哨兵集群必須部署2個以上節點

如果哨兵集群僅僅部署了個2個哨兵實例,quorum=1

+----+         +----+  | M1 |---------| R1 |  | S1 |         | S2 |  +----+         +----+

Configuration: quorum = 1

master宕機,s1和s2中只要有1個哨兵認為master宕機就可以還行切換,同時s1和s2中會選舉出一個哨兵來執行故障轉移

同時這個時候,需要majority,也就是大多數哨兵都是運行的,2個哨兵的majority就是2(2的majority=2,3的majority=2,5的majority=3,4的majority=2),2個哨兵都運行著,就可以允許執行故障轉移

但是如果整個M1和S1運行的機器宕機了,那麼哨兵只有1個了,此時就沒有majority來允許執行故障轉移,雖然另外一台機器還有一個R1,但是故障轉移不會執行

經典的3節點哨兵集群

      +----+         | M1 |         | S1 |         +----+            |  +----+    |    +----+  | R2 |----+----| R3 |  | S2 |         | S3 |  +----+         +----+

Configuration: quorum = 2,majority

如果M1所在機器宕機了,那麼三個哨兵還剩下2個,S2和S3可以一致認為master宕機,然後選舉出一個來執行故障轉移

同時3個哨兵的majority是2,所以還剩下的2個哨兵運行著,就可以允許執行故障轉移

推薦閱讀

下載達10萬次的IDEA插件,K8s一鍵部署了解下

SpringBoot 並發登錄人數控制

Springboot 整合Mybatis多數據源並動態切換

Spring的BeanUtils有坑?可能是你用錯了!