Redis服務(wù)之高可用組件sentinel
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質(zhì)文章,第一時間送達
? 作者?|?Linux-1874
來源 |?cnblogs.com/qiuhom-1874/p/13429776.html
前文我們了解了redis的常用數(shù)據(jù)類型相關(guān)命令的使用和說明,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13419690.html;今天我們來聊一下redis的高可用組件sentinel;首先來回顧下redis的主從同步,主從同步最主要的作用是讓master的數(shù)據(jù)在其他服務(wù)器上實時存在副本,起到了備份的效果;對于redis的讀寫來說,主從架構(gòu)能夠讓讀的請求分散到多個從服務(wù)器上,從而降低了單臺redis讀請求的io壓力,同時也提高了redis讀請求的并發(fā)能力;通常為了數(shù)據(jù)的一致性,從服務(wù)器一旦成為某一臺redis的slave,那么從服務(wù)器上之前有的數(shù)據(jù)會被清空,然后把master發(fā)送過來的數(shù)據(jù)應用到內(nèi)存,從而實現(xiàn)和master數(shù)據(jù)一致;除此之外slave通常會是只讀屬性,也就說slave端只能執(zhí)行讀操作,寫操作會被拒絕,所以寫請求始終是由master來完成;那么問題來了,對于這種主從復制架構(gòu)的環(huán)境中,如果master宕機了,master宕機意味著整個系統(tǒng)將不能夠?qū)憯?shù)據(jù)到redis,很顯然這種情況我們應該及時解決;怎么解決呢?有沒有這樣的一組件幫我們對master做實時的監(jiān)控,一旦發(fā)現(xiàn)master宕機就提升一個slave當選新的master,如果原master還有其他slave,將其他slave都從屬于新的master;除此之外它還應該讓系統(tǒng)在發(fā)生切換master時觸發(fā)報警通知,讓管理員盡快把壞掉的master修復上線;對,sentinel就有我們上述的這些功能,它能夠監(jiān)控主從同步集群中的master節(jié)點,在master發(fā)生宕機后能夠自動故障轉(zhuǎn)移,將提升一臺slave作為新的master,然后通知管理員;
Sentinel是一個分布式系統(tǒng),我們可以在一個架構(gòu)中運行多個sentinel,這些sentinel進程使用流言協(xié)議(gossipprotocols)來接收關(guān)于 Master是否下線的信息,并使用投票協(xié)議(Agreement Protocols)來決定是否執(zhí)行自動故障遷移,以及選擇哪個 Slave 作為新的 Master。每個sentinel進程會向其他sentinel進程、master、slave定時發(fā)送消息,以確保對方是否”活”著,如果發(fā)現(xiàn)對方在指定配置時間(可配置的)內(nèi)未得到回應,則暫時認為對方已掉線,也就是所謂的”主觀認為宕機” ,英文名稱:Subjective Down,簡稱 SDOWN。有主觀宕機,肯定就有客觀宕機。當多個sentinel進程中多數(shù)的sentinel進程在對 Master 做出 SDOWN 的判斷,并且通過 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的 Master Server 下線判斷,這種方式就是“客觀宕機”,英文名稱是:Objectively Down, 簡稱 ODOWN。通過一定的 vote 算法,從剩下的 slave 從服務(wù)器節(jié)點中,選一臺提升為 Master 服務(wù)器節(jié)點,然后自動修改相關(guān)配置,并開啟故障轉(zhuǎn)移(failover)。
配置使用sentinel
環(huán)境說明
| 角色 | ip地址 | 端口 |
| master | 192.168.0.41 | 6379 |
| slave01 | 192.168.0.42 | 6379 |
| slave02 | 192.168.0.43 | 6379 |
| sentinel01 | 192.168.0.41 | 26379 |
| sentinel02 | 192.168.0.42 | 26379 |
| sentinel03 | 192.168.0.43 | 26379 |
架構(gòu)圖

提示:從上面的架構(gòu)圖可以知道,首先我們必須要有一個主從架構(gòu)的集群,然后在部署sentinel 來對主從同步集群做監(jiān)控;
redis主從復制集群搭建
1、在192.168.0.41/42/43上安裝redis,可以使用yum安裝,也可以使用編譯安裝,redis安裝請參考https://www.cnblogs.com/qiuhom-1874/p/13378138.html;
2、配置192.168.0.41/42/43上的redis監(jiān)聽在非本機127.0.0.1上并配置42/43上的redis從屬于192.168.0.41
master

slave01

slave02

提示:redis支持在線修改配置,保存配置到配置文件;SLAVEOF 指令用于指定redismaster的ip地址和端口,表示把該redis配置成對應master的slave角色;CONFIG REWRITE是把我們的配置保存到配置文件;
在master上查看是否有兩個從節(jié)點連接到master

驗證:在master上寫數(shù)據(jù),看看是否能夠及時同步到兩個slave上?



提示:可以看到在主庫上寫數(shù)據(jù),從庫上能夠及時的同步主庫上的數(shù)據(jù);到此redis的主從集群就搭建完畢了;
配置sentinel,讓其監(jiān)控master

提示:三個sentinel的配置都是一樣的,這里需要明確指定監(jiān)控主從同步集群的master的ip地址和端口,以及有效法定票數(shù),有效法定票數(shù)指的是至少有多少個sentinel主觀認為master down了,然后才觸發(fā)選舉新master操作;通常在這種流言協(xié)議中,一般都是大于集群半數(shù),如果是3臺sentinel,至少要2臺主觀認為master宕機,才開始觸發(fā)選舉新master;如果是5臺,那至少要3臺;如果master配置的有認證密碼,我們還需要在sentinel中指定認證密碼;
sentinel配置文件說明
bind:該指令和redis配置文件中的bind是同樣的用法,用于指定sentinel的監(jiān)聽地址;默認不指定,監(jiān)聽本機所有可用地址;
protected-mode:指定是否開啟保護模式;
port:用于指定sentinel的監(jiān)聽端口;默認是26379
daemonize:用于指定sentinel是否運行為守護進程,yes表示運行為后臺守護進程;no表示不運行為守護進程,直接在前臺運行;
pidfile:指定pid文件路徑;
logfile:指定日志文件路徑;
dir:指定sentinel的工作路徑;
sentinel monitor
sentinel auth-pass
sentinel down-after-milliseconds
sentinel parallel-syncs
sentinel failover-timeout
sentinel notification-script
