Sentinel(哨兵)進(jìn)程是用于監(jiān)控redis集群中Master主服務(wù)器工作的狀態(tài),在Master主服務(wù)器發(fā)生故障的時(shí)候,可以實(shí)現(xiàn)Master和Slave服務(wù)器的切換,保證系統(tǒng)的高可用,其已經(jīng)被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就穩(wěn)定了下來(lái)。一般在生產(chǎn)環(huán)境也建議使用Redis的2.8版本的以后版本。哨兵(Sentinel) 是一個(gè)分布式系統(tǒng),你可以在一個(gè)架構(gòu)中運(yùn)行多個(gè)哨兵(sentinel) 進(jìn)程,這些進(jìn)程使用流言協(xié)議(gossipprotocols)來(lái)接收關(guān)于Master主服務(wù)器是否下線的信息,并使用投票協(xié)議(Agreement Protocols)來(lái)決定是否執(zhí)行自動(dòng)故障遷移,以及選擇哪個(gè)Slave作為新的Master。每個(gè)哨兵(Sentinel)進(jìn)程會(huì)向其它哨兵(Sentinel)、Master、Slave定時(shí)發(fā)送消息,以確認(rèn)對(duì)方是否”活”著,如果發(fā)現(xiàn)對(duì)方在指定配置時(shí)間(可配置的)內(nèi)未得到回應(yīng),則暫時(shí)認(rèn)為對(duì)方已掉線,也就是所謂的”主觀認(rèn)為宕機(jī)” ,英文名稱:Subjective Down,簡(jiǎn)稱SDOWN。有主觀宕機(jī),肯定就有客觀宕機(jī)。當(dāng)“哨兵群”中的多數(shù)Sentinel進(jìn)程在對(duì)Master主服務(wù)器做出 SDOWN 的判斷,并且通過(guò) SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下線判斷,這種方式就是“客觀宕機(jī)”,英文名稱是:Objectively Down, 簡(jiǎn)稱 ODOWN。通過(guò)一定的vote算法,從剩下的slave從服務(wù)器節(jié)點(diǎn)中,選一臺(tái)提升為Master服務(wù)器節(jié)點(diǎn),然后自動(dòng)修改相關(guān)配置,并開啟故障轉(zhuǎn)移(failover)。
哨兵(sentinel) 雖然有一個(gè)單獨(dú)的可執(zhí)行文件 redis-sentinel ,但實(shí)際上它只是一個(gè)運(yùn)行在特殊模式下的 Redis 服務(wù)器,你可以在啟動(dòng)一個(gè)普通 Redis 服務(wù)器時(shí)通過(guò)給定 –sentinel 選項(xiàng)來(lái)啟動(dòng)哨兵(sentinel),哨兵(sentinel) 的一些設(shè)計(jì)思路和zookeeper非常類似。
Sentinel集群之間會(huì)互相通信,溝通交流redis節(jié)點(diǎn)的狀態(tài),做出相應(yīng)的判斷并進(jìn)行處理,這里的主觀下線狀態(tài)和客觀下線狀態(tài)是比較重要的狀態(tài),它們決定了是否進(jìn)行故障轉(zhuǎn)移,可以 通過(guò)訂閱指定的頻道信息,當(dāng)服務(wù)器出現(xiàn)故障得時(shí)候通知管理員,客戶端可以將 Sentinel 看作是一個(gè)只提供了訂閱功能的 Redis 服務(wù)器,你不可以使用 PUBLISH 命令向這個(gè)服務(wù)器發(fā)送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通過(guò)訂閱給定的頻道來(lái)獲取相應(yīng)的事件提醒。一個(gè)頻道能夠接收和這個(gè)頻道的名字相同的事件。 比如說(shuō), 名為 +sdown 的頻道就可以接收所有實(shí)例進(jìn)入主觀下線(SDOWN)狀態(tài)的事件。?
Sentinel(哨兵)進(jìn)程的作用:
1、監(jiān)控(Monitoring): 哨兵(sentinel) 會(huì)不斷地檢查你的Master和Slave是否運(yùn)作正常。
2、提醒(Notification):當(dāng)被監(jiān)控的某個(gè)Redis節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí), 哨兵(sentinel) 可以通過(guò) API 向管理員或者其他應(yīng)用程序發(fā)送通知。
3、自動(dòng)故障遷移(Automatic failover):當(dāng)一個(gè)Master不能正常工作時(shí),哨兵(sentinel) 會(huì)開始一次自動(dòng)故障遷移操作,它會(huì)將失效Master的其中一個(gè)Slave升級(jí)為新的Master, 并讓失效Master的其他Slave改為復(fù)制新的Master;當(dāng)客戶端試圖連接失效的Master時(shí),集群也會(huì)向客戶端返回新Master的地址,使得集群可以使用現(xiàn)在的Master替換失效Master。Master和Slave服務(wù)器切換后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的內(nèi)容都會(huì)發(fā)生相應(yīng)的改變,即,Master主服務(wù)器的redis.conf配置文件中會(huì)多一行slaveof的配置,sentinel.conf的監(jiān)控目標(biāo)會(huì)隨之調(diào)換