天天看點

redis的哨兵模式

https://www.cnblogs.com/kerwinC/p/6069864.html

http://blog.csdn.net/a67474506/article/details/50435498

Redis Sentinel 模式簡介

Redis-Sentinel是官方推薦的高可用解決方案,當redis在做master-slave的高可用方案時,假如master當機了,redis本身(以及其很多用戶端)都沒有實作自動進行主備切換,而redis-sentinel本身也是獨立運作的程序,可以部署在其他與redis叢集可通訊的機器中監控redis叢集。

它的主要功能有一下幾點

1、不時地監控redis是否按照預期良好地運作;

2、如果發現某個redis節點運作出現狀況,能夠通知另外一個程序(例如它的用戶端);

3、能夠進行自動切換。當一個master節點不可用時,能夠選舉出master的多個slave(如果有超過一個slave的話)中的一個來作為新的master,其它的slave節點會将它所追随的master的位址改為被提升為master的slave的新位址。

4、哨兵為用戶端提供服務發現,用戶端連結哨兵,哨兵提供目前master的位址然後提供服務,如果出現切換,也就是master挂了,哨兵會提供用戶端一個新位址。

哨兵(sentinel)本身也是支援叢集的

很顯然,單個哨兵會存在自己挂掉而無法監控整個叢集的問題,是以哨兵也是支援叢集的,我們通常用三台哨兵機器來監控一組redis叢集。

Redis的哨兵(sentinel) 系統用于管理多個 Redis 伺服器,該系統執行以下三個任務:

· 監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運作正常。

· 提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 可以通過 API 向管理者或者其他應用程式發送通知。

· 自動故障遷移(Automatic failover):當一個Master不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會将失效Master的其中一個Slave更新為新的Master, 并讓失效Master的其他Slave改為複制新的Master; 當用戶端試圖連接配接失效的Master時,叢集也會向用戶端傳回新Master的位址,使得叢集可以使用Master代替失效Master。

哨兵(sentinel) 是一個分布式系統,你可以在一個架構中運作多個哨兵(sentinel) 程序,這些程序使用流言協定(gossipprotocols)來接收關于Master是否下線的資訊,并使用投票協定(agreement protocols)來決定是否執行自動故障遷移,以及選擇哪個Slave作為新的Master.

每個哨兵(sentinel) 會向其它哨兵(sentinel)、master、slave定時發送消息,以确認對方是否”活”着,如果發現對方在指定時間(可配置)内未回應,則暫時認為對方已挂(所謂的”主觀認為當機” Subjective Down,簡稱sdown).

若“哨兵群”中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱odown),通過一定的vote算法,從剩下的slave節點中,選一台提升為master,然後自動修改相關配置.

雖然哨兵(sentinel) 釋出為一個單獨的可執行檔案 redis-sentinel ,但實際上它隻是一個運作在特殊模式下的 Redis 伺服器,你可以在啟動一個普通 Redis 伺服器時通過給定 --sentinel 選項來啟動哨兵(sentinel).

哨兵(sentinel) 的一些設計思路和zookeeper非常類似

繼續閱讀