天天看點

突破Java面試(23-7) - Redis的哨兵架構1 Redis Sentinal機制2 哨兵的核心知識3 為什麼僅2個節點時無法正常工作4 3-節點哨兵叢集(經典)參考

Github

1 Redis Sentinal機制

sentinal,中文名哨兵

哨兵是redis叢集架構中非常重要的一個元件,主要功能如下

  • 叢集監控

    監控Redis master和slave程序的正常工作

  • 消息通知

    如果某個Redis執行個體有故障,那麼哨兵負責發送報警消息給管理者

  • 故障轉移

    若master node當機,會自動轉移到slave node上

  • 配置中心

    若發生故障轉移,通知client用戶端新的master位址

哨兵本身也是分布式的,作為一個哨兵叢集去運作,協同工作

  • 故障轉移時,判斷一個master node是否當機,需要大部分的哨兵都同意,涉及到了分布式選舉問題
  • 即使部分哨兵節點當機,哨兵叢集還是能正常工作的
目前采用的是sentinal 2版本,sentinal 2相對于sentinal 1來說,重寫了很多代碼,主要是讓故障轉移的機制和算法變得更加健壯和簡單

2 哨兵的核心知識

  1. 哨兵需要至少3個執行個體,保證自己的健壯性
  2. 哨兵 + Redis主從的部署架構,是不會保證資料零丢失的,隻能保證redis叢集的高可用性
  3. 對于哨兵 + Redis主從這種複雜的部署架構,盡量在測試環境和生産環境,都進行充足的測試和演練

3 為什麼僅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

4個哨兵的majority=2

5個哨兵的majority=3

2個哨兵都運作着,就可以允許執行故障轉移

若整個M1和S1運作的機器當機了,那麼哨兵僅剩1個,此時就無majority來允許執行故障轉移,雖然另外一台機器還有一個R1,但故障轉移不會執行

4 3-節點哨兵叢集(經典)

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

Configuration: quorum = 2,majority

若M1節點當機了,還剩下2個哨兵,S2和S3可以一緻認為master當機了,然後選舉出一個來執行故障轉移

同時3個哨兵的

majority

是2,是以餘存的2個哨兵運作着,就可執行故障轉移

參考

《Java工程師面試突擊第1季-中華石杉老師》

繼續閱讀