1、哨兵的介紹
sentinal,中文名是哨兵
哨兵是redis集群架構(gòu)中非常重要的一個(gè)組件,主要功能如下
(1)集群監(jiān)控,負(fù)責(zé)監(jiān)控redis master和slave進(jìn)程是否正常工作
(2)消息通知踩寇,如果某個(gè)redis實(shí)例有故障,那么哨兵負(fù)責(zé)發(fā)送消息作為報(bào)警通知給管理員
(3)故障轉(zhuǎn)移六水,如果master node掛掉了俺孙,會(huì)自動(dòng)轉(zhuǎn)移到slave node上
(4)配置中心,如果故障轉(zhuǎn)移發(fā)生了掷贾,通知client客戶端新的master地址
哨兵本身也是分布式的睛榄,作為一個(gè)哨兵集群去運(yùn)行,互相協(xié)同工作
(1)故障轉(zhuǎn)移時(shí)想帅,判斷一個(gè)master node是宕機(jī)了场靴,需要大部分的哨兵都同意才行,涉及到了分布式選舉的問(wèn)題
(2)即使部分哨兵節(jié)點(diǎn)掛掉了港准,哨兵集群還是能正常工作的旨剥,因?yàn)槿绻粋€(gè)作為高可用機(jī)制重要組成部分的故障轉(zhuǎn)移系統(tǒng)本身是單點(diǎn)的,那就很坑爹了
目前采用的是sentinal 2版本浅缸,sentinal 2相對(duì)于sentinal 1來(lái)說(shuō)轨帜,重寫了很多代碼,主要是讓故障轉(zhuǎn)移的機(jī)制和算法變得更加健壯和簡(jiǎn)單
2衩椒、哨兵的核心知識(shí)
(1)哨兵至少需要3個(gè)實(shí)例蚌父,來(lái)保證自己的健壯性
(2)哨兵 + redis主從的部署架構(gòu),是不會(huì)保證數(shù)據(jù)零丟失的毛萌,只能保證redis集群的高可用性
(3)對(duì)于哨兵 + redis主從這種復(fù)雜的部署架構(gòu)苟弛,盡量在測(cè)試環(huán)境和生產(chǎn)環(huán)境,都進(jìn)行充足的測(cè)試和演練
3阁将、為什么redis哨兵集群只有2個(gè)節(jié)點(diǎn)無(wú)法正常工作膏秫?
哨兵集群必須部署2個(gè)以上節(jié)點(diǎn)
如果哨兵集群僅僅部署了個(gè)2個(gè)哨兵實(shí)例,quorum=1
+----+? ? ? ? +----+
| M1 |---------| R1 |
| S1 |? ? ? ? | S2 |
+----+? ? ? ? +----+
Configuration: quorum = 1
master宕機(jī)冀痕,s1和s2中只要有1個(gè)哨兵認(rèn)為master宕機(jī)就可以還行切換荔睹,同時(shí)s1和s2中會(huì)選舉出一個(gè)哨兵來(lái)執(zhí)行故障轉(zhuǎn)移
同時(shí)這個(gè)時(shí)候狸演,需要majority言蛇,也就是大多數(shù)哨兵都是運(yùn)行的僻他,2個(gè)哨兵的majority就是2(2的majority=2,3的majority=2腊尚,5的majority=3吨拗,4的majority=2),2個(gè)哨兵都運(yùn)行著婿斥,就可以允許執(zhí)行故障轉(zhuǎn)移
但是如果整個(gè)M1和S1運(yùn)行的機(jī)器宕機(jī)了劝篷,那么哨兵只有1個(gè)了,此時(shí)就沒(méi)有majority來(lái)允許執(zhí)行故障轉(zhuǎn)移民宿,雖然另外一臺(tái)機(jī)器還有一個(gè)R1娇妓,但是故障轉(zhuǎn)移不會(huì)執(zhí)行
4、經(jīng)典的3節(jié)點(diǎn)哨兵集群
? ? ? +----+
? ? ? | M1 |
? ? ? | S1 |
? ? ? +----+
? ? ? ? ? |
+----+? ? |? ? +----+
| R2 |----+----| R3 |
| S2 |? ? ? ? | S3 |
+----+? ? ? ? +----+
Configuration: quorum = 2活鹰,majority
如果M1所在機(jī)器宕機(jī)了哈恰,那么三個(gè)哨兵還剩下2個(gè),S2和S3可以一致認(rèn)為master宕機(jī)志群,然后選舉出一個(gè)來(lái)執(zhí)行故障轉(zhuǎn)移
同時(shí)3個(gè)哨兵的majority是2着绷,所以還剩下的2個(gè)哨兵運(yùn)行著,就可以允許執(zhí)行故障轉(zhuǎn)移