首頁>技術>

什麼是哨兵

Redis Sentinel 是一個分散式架構,其中包含若干個 Sentinel 節點和 Redis 資料節點,每個 Sentinel 節點會對資料節點和其餘 Sentinel 節點進行監控,當它發現節點不可達時,會對節點做下線標識。如果被標識的是主節點,它還會和其他 Sentinel 節點進行“協商”,當大多數 Sentinel 節點都認為主節點不可達時,它們會選舉出一個 Sentinel 節點來完成自動故障轉移的工作,同時會將這個變化實時通知給 Redis 應用方。整個過程完全是自動的,不需要人工來介入,所以這套方案很有效地解決了 Redis 的高可用問題。

Redis 2.8 版開始正式提供名為Sentinel的主從切換方案,Sentinel用於管理多個Redis伺服器例項,主要負責三個方面的任務:

監控(Monitoring): Sentinel 會不斷地檢查你的主伺服器和從伺服器是否運作正常。提醒(Notification): 當被監控的某個 Redis 伺服器出現問題時, Sentinel 可以通過 API 向管理員或者其他應用程式傳送通知。自動故障遷移(Automatic failover): 當一個主伺服器不能正常工作時, Sentinel 會開始一次自動故障遷移操作, 它會將失效主伺服器的其中一個從伺服器升級為新的主伺服器, 並讓失效主伺服器的其他從伺服器改為複製新的主伺服器; 當客戶端試圖連線失效的主伺服器時, 叢集也會向客戶端返回新主伺服器的地址, 使得叢集可以使用新主伺服器代替失效伺服器。

sentinel1.jpg

哨兵(sentinel) 是一個分散式系統,你可以在一個架構中執行多個哨兵(sentinel) 程序,這些程序使用流言協議(gossip protocols)來接收關於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).

基本的故障轉移流程

1、主節點出現故障,此時兩個從節點與主節點失去連線,主從複製失敗。

2、每個 Sentinel 節點通過定期監控發現主節點出現了故障

3、多個 Sentinel 節點對主節點的故障達成一致會選舉出其中一個節點作為領導者負責故障轉移。

4、Sentinel 領導者節點執行了故障轉移,整個過程基本是跟我們手動調整一致的,只不過是自動化完成的。

5、故障轉移後整個 Redis Sentinel 的結構,重新選舉了新的主節點。

注意事項

Sentinel 節點不應該部署在一臺物理“機器”上。這裡特意強調物理機是因為一臺物理機做成了若干虛擬機器或者現今比較流行的容器,它們雖然有不同的 IP 地址,但實際上它們都是同一臺物理機,同一臺物理機意味著如果這臺機器有什麼硬體故障,所有的虛擬機器都會受到影響,為了實現 Sentinel 節點集合真正的高可用,請勿將 Sentinel 節點部署在同一臺物理機器上。部署至少三個且奇數個的 Sentinel 節點。個以上是通過增加 Sentinel 節點的個數提高對於故障判定的準確性,因為領導者選舉需要至少一半加 1 個節點,奇數個節點可以在滿足該條件的基礎上節省一個節點。

優缺點

優點:

Redis Sentinel叢集部署簡單;能夠解決Redis主從模式下的高可用切換問題;很方便實現Redis資料節點的線形擴充套件,輕鬆突破Redis自身單執行緒瓶頸,可極大滿足Redis大容量或高效能的業務需求;可以實現一套Sentinel監控一組Redis資料節點或多組資料節點。

缺點:

部署相對Redis主從模式要複雜一些,原理理解更繁瑣;資源浪費,Redis資料節點中slave節點作為備份節點不提供服務;Redis Sentinel主要是針對Redis資料節點中的主節點的高可用切換,對Redis的資料節點做失敗判定分為主觀下線和客觀下線兩種,對於Redis的從節點有對節點做主觀下線操作,並不執行故障轉移。不能解決讀寫分離問題,實現起來相對複雜。

轉自:https://www.jianshu.com/p/5de2ab291696

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 又見新型Linux勒索軟體,採用GO語言編寫