緩存架構(gòu)之11:redis哨兵架構(gòu)的相關(guān)基礎(chǔ)知識的講解

1、哨兵的介紹

sentinal,中文名是哨兵

哨兵是redis集群架構(gòu)中非常重要的一個組件,主要功能如下

(1)集群監(jiān)控,負責(zé)監(jiān)控redis master和slave進程是否正常工作

(2)消息通知,如果某個redis實例有故障,那么哨兵負責(zé)發(fā)送消息作為報警通知給管理員

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

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

哨兵本身也是分布式的,作為一個哨兵集群去運行,互相協(xié)同工作

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

(2)即使部分哨兵節(jié)點掛掉了,哨兵集群還是能正常工作的,因為如果一個作為高可用機制重要組成部分的故障轉(zhuǎn)移系統(tǒng)本身是單點的,那就很坑爹了

目前采用的是sentinal 2版本,sentinal 2相對于sentinal 1來說,重寫了很多代碼,主要是讓故障轉(zhuǎn)移的機制和算法變得更加健壯和簡單

2、哨兵的核心知識

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

(2)哨兵 + redis主從的部署架構(gòu),是不會保證數(shù)據(jù)零丟失的,只能保證redis集群的高可用性

(3)對于哨兵 + redis主從這種復(fù)雜的部署架構(gòu),盡量在測試環(huán)境和生產(chǎn)環(huán)境,都進行充足的測試和演練

3、為什么redis哨兵集群只有2個節(jié)點無法正常工作?

哨兵集群必須部署2個以上節(jié)點

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

+----+? ? ? ? +----+

| M1 |---------| R1 |

| S1 |? ? ? ? | S2 |

+----+? ? ? ? +----+

Configuration: quorum = 1

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

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

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

4、經(jīng)典的3節(jié)點哨兵集群

? ? ? +----+

? ? ? | M1 |

? ? ? | S1 |

? ? ? +----+

? ? ? ? ? |

+----+? ? |? ? +----+

| R2 |----+----| R3 |

| S2 |? ? ? ? | S3 |

+----+? ? ? ? +----+

Configuration: quorum = 2,majority

如果M1所在機器宕機了,那么三個哨兵還剩下2個,S2和S3可以一致認(rèn)為master宕機,然后選舉出一個來執(zhí)行故障轉(zhuǎn)移

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容