redis哨兵架構基礎

千鋒Python唐小強發表於2020-07-06

1. 哨兵的介紹

sentinel , 中文是哨兵。

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

(1)叢集監控:負責監控reidis master 和slave 程式是否正常工作;

(2)訊息通知:如果某個redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員;

(3)故障轉移:如果master node掛掉了,會自動轉移到slave node上;

(4)配置中心:如果故障轉移發生了,通知client 客戶端新的master 地址;

哨兵本身也是分散式的作為一個哨兵叢集去執行,互相協同工作;

(1)故障轉移時, 判斷一個master node當機了,需要大部分的哨兵都同意才行,涉及到了分散式選舉的問題;

(2)即使部分哨兵節點掛了,哨兵叢集還是能正常工作的,因為如果 一個作為高可用機制重要組成部分的故障轉移系統本身是單點的,那就坑爹了;目前採用的是sentinel 2 版本,sentinel2 相對於 sentinel 1 來說,重寫了很多程式碼,主要是讓故障轉移的機制和演算法變得更加健壯和簡單。

2. 哨兵的核心知識

(1)哨兵至少需要3個例項,來保證自己的健壯性;

(2)哨兵+redis 主從的部署架構,是不會保證資料0丟失的,只能保證redis 叢集的高可用性;

(3)對於哨兵+redis主從這種負責的部署架構,儘量在測試環境和生產環境,都進行充足的測試和演練;

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

哨兵叢集必須部署2個以上節點,如果哨兵叢集僅僅部署了2個哨兵例項,quorum=1

M1 R1

S1 S2

Configuration:quorum = 1 (哨兵節點只要1個認為當機就可以進行切換了)

master 當機,s1 和 s2 中只要有一個哨兵認為當機就可以進行切換,同時s1和s2中會選舉出一個哨兵來進行故障轉移,同時這個時候,需要majority,也就是大多數哨兵都是執行的,2個哨兵的majority就是2,2個哨兵都執行這,就可以允許執行故障轉移,但是整個M1和S2執行的機器當機了,那麼哨兵只有1個了,此時就沒有majority來允許執行故障轉移,雖然另外一臺機器還有一個R1,但是故障轉移不會執行;

4. 經典的3節點哨兵叢集

M1

S1

R2 R3

S2 S3

Configuration:quorum = 2 majoiry

如果M1所在機器當機了,那麼3個哨兵還剩下2個,S2和S3可以一致認為master 當機,然後選舉一個來執行故障轉移;同時3個哨兵的majoiry = 2 , 所以還剩下2個哨兵執行著,就可以進行故障轉移。

redis哨兵架構基礎


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2702803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章