分布式緩存——Redis哨兵機制
一、哨兵的作用和原理:
1、哨兵機制的作用:
Redis提供了哨(shao)兵(Sentinel)機制來實現主(zhu)從集群的(de)(de)master、slave的(de)(de)自動故障恢復。哨(shao)兵的(de)(de)結構和(he)作用如下:
作用——監控: Sentinel 會不斷檢查您的master和slave是否按預期工作。
作用——自動故障恢復: 如果master故障,Sentinel會將一個slave提升為master。當故障實例恢復后也以新的master為主。
作用——通知: Sentinel充當Redis客戶端的服務發現來源,當集群發生故障轉移時,會將最新信息推送給Redis的客戶端,比如告訴客戶端master節點變更了,這樣客戶端寫數據的時候才不會找錯節點。

2、哨兵(bing)如何監測節點的狀態:
Sentinel基于(yu)心跳機制監測服務狀(zhuang)態,每隔1秒(miao)向集群的每個實例發送ping命令:
主觀下線(xian):如果某(mou)sentinel節點發現某(mou)實例未(wei)在規定(ding)時間(jian)響應,則認為該(gai)實例主觀下線(xian)。
客(ke)觀下線:若超(chao)過(guo)指定(ding)數量(quorum)的sentinel都認(ren)為該(gai)實(shi)例主觀下線,則該(gai)實(shi)例客(ke)觀下線。quorum值最好超(chao)過(guo)Sentinel實(shi)例數量的一半。

3、哨兵如(ru)何選舉新的master:
選舉的依據:
- 首先會(hui)(hui)判(pan)斷slave節(jie)點(dian)與master節(jie)點(dian)斷開時(shi)間長(chang)短,如果超過指定(ding)值(zhi)(down-after-milliseconds * 10)則會(hui)(hui)排除該slave節(jie)點(dian);
- 然(ran)后判斷slave節點的slave-priority值,越小優先(xian)級越高,如果(guo)是0則永不參與(yu)選(xuan)舉;
- 如(ru)果slave-prority一樣,則判斷slave節點(dian)的offset值,越(yue)大說(shuo)明(ming)數(shu)據(ju)越(yue)新,優先(xian)級越(yue)高;
- 最后(hou)是判斷slave節點的運行(xing)id大小(xiao)(xiao),越小(xiao)(xiao)優先級越高(gao)
4、哨(shao)兵如何實現故障(zhang)轉移:
- sentinel給備選的slave1節點(dian)發送slaveof no one命令,讓(rang)該節點(dian)成為(wei)master;
- sentinel給(gei)所有(you)其它(ta)slave發(fa)送slaveof slave1 ip slave1 端口(kou)命令,讓這些slave成(cheng)為(wei)新(xin)master的(de)從節(jie)點,開(kai)(kai)始從新(xin)的(de)master上同步(bu)數據(一開(kai)(kai)始還是進(jin)行全(quan)量同步(bu));
- 最后,sentinel強行給故(gu)障節點標記為slave(修改配置文件),當故(gu)障節點恢(hui)復后會自動成(cheng)為新的master的slave節點。
5、總結:

二(er)、RedisTemplate的(de)哨兵模式:
在Sentinel集群監管下的(de)(de)Redis主(zhu)從(cong)集群,其節(jie)點(dian)會因為自(zi)動故障轉移而發生變化,Redis的(de)(de)客(ke)戶端必須感(gan)知這(zhe)種變化,及(ji)時更新連(lian)接(jie)信息。Spring的(de)(de)RedisTemplate底層利(li)用lettuce實(shi)現了節(jie)點(dian)的(de)(de)感(gan)知和自(zi)動切換。
RedisTemplate和Sentinel的整合:
配(pei)(pei)置(zhi)文件不(bu)需要配(pei)(pei)置(zhi)redis的地址(zhi),因為這(zhe)個(ge)地址(zhi)也(ye)是不(bu)確(que)定的,只需要配(pei)(pei)置(zhi)好Sentinel的地址(zhi)就可以了;客戶端會根據(ju)地址(zhi)找到(dao)Sentinel,從而得(de)知(zhi)redis的地址(zhi)以及(ji)主從情況。


————————————————
版權(quan)聲(sheng)明:本文為CSDN博主「方方土^_^」的原(yuan)創文章,遵循CC 4.0 BY-SA版權(quan)協議(yi),轉(zhuan)載請附(fu)上(shang)原(yuan)文出處鏈接(jie)及本聲(sheng)明。
原文鏈接(jie)://blog.csdn.net/weixin_44792186/article/details/122907401