
Redis的哨兵(sentinel) 系統用于管理多個(gè) Redis 服務(wù)器,該系統執行以下三個(gè)任務(wù):
監控(Monitoring): 哨兵(sentinel) 會(huì )不斷地檢查你的Master和Slave是否運作正常。
提醒(Notification): 當被監控的某個(gè) Redis出現問(wèn)題時(shí), 哨兵(sentinel) 可以通過(guò) API 向管理員或者其他應用程序發(fā)送通知。
自動(dòng)故障遷移(Automatic failover): 當一個(gè)Master不能正常工作時(shí),哨兵(sentinel) 會(huì )開(kāi)始一次自動(dòng)故障遷移操作,它會(huì )將失效Master的其中一個(gè)Slave升級為新的Master, 并讓失效Master的其他Slave改為復制新的Master; 當客戶(hù)端試圖連接失效的Master時(shí),集群也會(huì )向客戶(hù)端返回新Master的地址,使得集群可以使用Master代替失效Master。
哨兵(sentinel) 是一個(gè)分布式系統,你可以在一個(gè)架構中運行多個(gè)哨兵(sentinel) 進(jìn)程,這些進(jìn)程使用流言協(xié)議(gossipprotocols)來(lái)接收關(guān)于Master是否下線(xiàn)的信息,并使用投票協(xié)議(agreement protocols)來(lái)決定是否執行自動(dòng)故障遷移,以及選擇哪個(gè)Slave作為新的Master。
每個(gè)哨兵(sentinel) 會(huì )向其它哨兵(sentinel)、master、slave定時(shí)發(fā)送消息,以確認對方是否”活”著(zhù),如果發(fā)現對方在指定時(shí)間(可配置)內未回應,則暫時(shí)認為對方已掛(所謂的”主觀(guān)認為宕機” Subjective Down,簡(jiǎn)稱(chēng)sdown).
若“哨兵群”中的多數sentinel,都報告某一master沒(méi)響應,系統才認為該master"徹底死亡"(即:客觀(guān)上的真正down機,Objective Down,簡(jiǎn)稱(chēng)odown),通過(guò)一定的vote算法,從剩下的slave節點(diǎn)中,選一臺提升為master,然后自動(dòng)修改相關(guān)配置。
雖然哨兵(sentinel) 釋出為一個(gè)單獨的可執行文件 redis-sentinel ,但實(shí)際上它只是一個(gè)運行在特殊模式下的 Redis 服務(wù)器,你可以在啟動(dòng)一個(gè)普通 Redis 服務(wù)器時(shí)通過(guò)給定 --sentinel 選項來(lái)啟動(dòng)哨兵(sentinel)。
哨兵(sentinel) 的一些設計思路和zookeeper非常類(lèi)似。
1、Sentinel的作用:
2. Sentinel的工作方式:
若 Master 重新向 Sentinel 的 PING 命令返回有效回復, Master 的主觀(guān)下線(xiàn)狀態(tài)就會(huì )被移除。