Redis Sentinel 哨兵模式

2022-09-09 22:30:40 字數 2450 閱讀 1689

目錄經過上期【redis】主從複製 的學習,

我們知道主從複製是為了避免單點故障,將資料儲存在多台伺服器上的一種機制。

但是主節點只有乙個,如果主節點掛掉了,怎麼辦?於是哨兵模式誕生了。

哨兵模式可以不時地監控redis是否按照預期良好的執行(至少是保證主節點是存在的),若一台主機出現問題,哨兵會自動將該主機下的某一從機設定為新的主機,並讓其他從機和新主機建立主從關係。

《redis 設計與實現》哨兵模式介紹:

sentinel(哨兵)是redis的高可用性解決方案:由乙個或多個sentinel例項組成的sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器公升級為新主伺服器,然後由新的主伺服器替代已下線的主伺服器繼續處理命令請求。

sentinel(哨兵) 本質上只是乙個執行在特殊模式下的redis伺服器,但是因為sentinel(哨兵)並不使用資料庫,所以初始化sentinel(哨兵)時就不會載入rdb檔案或者aof檔案。

哨兵模式架構模型

每10秒每個sentinel(哨兵)向主從節點傳送info命令,用來獲取最新的主從結構

每2秒每個sentinel(哨兵)通過master節點的channel交換資訊,channel是發布訂閱的頻道,可以獲取其他哨兵節點的資訊。

每1秒sentinel(哨兵)向與它建立了命令連線的例項(主、從伺服器,其他sentinel)傳送ping命令,用來進行心跳檢測,判斷是否下線

sentinel(哨兵)在連線主伺服器 或者 從伺服器時,會同時建立命令連線訂閱連線,命令連線用來 向 主伺服器 和 從伺服器傳送訊息,而訂閱連線用來接收來自主伺服器和從伺服器的資訊。

但是在連線其他sentinel(哨兵)時只會建立命令連線,而不建立訂閱連線。這是因為sentinel(哨兵)需要通過接收主伺服器或者從伺服器發來的資訊發現未知的新sentinel,而相互已知的sentinel只要用命令連線來進行通訊就足夠了。

如果只有乙個sentinel(哨兵),那麼可能會又出現單點故障的問題,所以一般設定多個sentinel(哨兵)來監視。此外,這些不同的哨兵節點應部署在不同的物理機上。

sentinel(哨兵)將乙個主伺服器判斷為下線後,為主觀下線。為了確定這個主伺服器是否真的下線了,他會向同樣監視這一主伺服器的其他sentinel(哨兵)進行詢問,看他們是否也認為主伺服器已經進入了下線狀態。如果多個哨兵(設定乙個閾值)都認為 master 異常了,就會認為master 判定為客觀下線,並對主伺服器執行故障轉移操作。

注意,這裡客觀下線是主節點才有的概念;如果從節點和哨兵節點發生故障,被哨兵主觀下線後,不會再有後續的客觀下線和故障轉移操作。

當主節點被判斷客觀下線以後,各個哨兵節點會進行協商,選舉出乙個領導者哨兵節點,並由該領導者節點對其進行故障轉移操作。

監視該主節點的所有哨兵都有可能被選為領導者,選舉使用的演算法是 raft 演算法。選舉規則:

每個哨兵都詢問其它哨兵,請求對方為自己投票

每個哨兵只投票給第乙個請求投票的哨兵,且只能投票一次

首先拿到超過半數投票的哨兵,當選為領導者,發起主從切換

選舉出的領導者哨兵,開始進行故障轉移操作,該操作大體可以分為 3 個步驟:選出新的主伺服器修改從伺服器的複製目標將舊的主伺服器變為從伺服器

哨兵仍然沒有解決寫操作無法負載均衡、及儲存能力受到單機限制的問題;這些問題的解決需要使用集群

本文沒有詳細說明 sentinel 的初始化過程,詳細請看《redis 設計與實現》第16章。

參考:《redis 設計與實現》

如何從0到1構建乙個穩定、高效能的redis集群?(附16張**) (qq.com)

redis哨兵模式講解_xingsilong的部落格-csdn部落格_redis 哨兵模式

Redis Sentinel 哨兵 集群解決方案

size x large color black b redis 哨兵的服務框架 b color size 哨兵也是 redis 伺服器,只是它與我們平時提到的 redis 伺服器職能不同,哨兵負責監視普通的 redis 伺服器,提高乙個伺服器集群的健壯和可靠性。哨兵和普通的 redis 伺服器所用...

Redis Sentinel部署規則和API使用

redis sentinel可以同時監控多個主節點,具體拓撲圖類似於圖。配置方法也比較簡單,只需要指定多個mastername來區分不同的主節點即可,例如下面的配置監控monitor master business 1 10.10.xx.1 6379 和monitor master business...

末端哨兵(end sentinel)

public class linkedstack node u item,nodenext boolean end 建立乙個成員變數來充當棧頂元素,此時top物件裡面的成員屬性都為空。private nodetop new node public void push t item public t ...