Redis的Sentinel(哨兵)模式

2021-10-10 17:54:51 字數 1349 閱讀 8881

首先,我先說下我對於sentinel模式的理解:我覺得就是redis的主從複製的高可用解決方案,什麼意思呢?就是當主伺服器掛了,不再用人手工操作的方式切換主從伺服器,sentinel伺服器會自動的檢測出掛了的主伺服器,並且自動完成主從伺服器的切換。

同樣的,因為書中講到了大量的實現細節,我覺得不用記錄得這麼詳細,所以這裡只寫一些重點內容。想要詳細了解實現細節的話還是去看書的第16章吧。

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

sentinel只是乙個執行在特殊模式下的redis伺服器,它使用了和普通模式不同的命令表,所以sentinel模式能夠使用的命令和普通redis伺服器能夠使用的命令不同。

sentinel會讀入使用者指定的配置檔案,為每個要被監視的主伺服器建立相應的例項結構,並建立連向主伺服器的命令連線和訂閱連線,其中命令連線用於向主伺服器傳送命令請求,而訂閱連線則用於接收指定頻道的訊息。

sentinel通過向主伺服器傳送info命令來獲得主服務屬下所有從伺服器的位址資訊,並為這些從伺服器建立相應的例項結構,以及連向這些從伺服器的命令連線和訂閱連線。

在一般情況下,sentinel以每十秒一次的頻率向被監視的主伺服器的從伺服器傳送info命令,當主伺服器處於下線狀態,或者sentinel正在對主伺服器進行故障轉移操作時,sentinel向從伺服器傳送info命令的頻率會改為每秒一次。

對於監視同乙個主伺服器和從伺服器的多個sentinel來說,它們會以每兩秒一次的頻率,通過向被監視伺服器的__sentinel__:hello頻道傳送訊息來向其他sentinel宣告自己的存在。

每個sentinel也會從__sentinel__:hello頻道中接收其他sentinel發來的資訊,並根據這些資訊為其他sentinel建立相應的例項結構,以及命令連線。

sentinel只會與主伺服器和從伺服器建立命令連線和訂閱連線,sentinel與sentinel之間則只建立命令連線。

當sentinel將乙個主伺服器判斷為主觀下線時,它會向同樣監視這個主伺服器的其他sentinel進行詢問,看它們是否同意這個主伺服器已經進入主觀下線狀態。

當sentinel收集到足夠多的主觀下線投票之後,它會將主伺服器判斷為客觀下線。當乙個主伺服器被判斷為客觀下線時,監視這個下線主伺服器的各個sentinel會進行協商,選舉乙個領頭sentinel,並由領頭sentinel對下線主伺服器執行故障轉移操作。

redis當中的Sentinel架構

sentinel 哨兵 是redis 的高可用性解決方案 由乙個或多個sentinel 例項 組成的sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器公升級為新的主伺服器。例如 在server1...

Redis及其Sentinel配置

redis cli h 指定ip p 指定埠 a 指定密碼 1 哨兵配置 3 redis提供了兩種持久化機制,rdb和aof。關於aof的原理,類似於預寫日誌,不再解釋。其中幾個選項如下 可見,從持久化角度講,always是最安全的。從效率上講,no是最快的。而redis預設設定進行了折中,選擇了e...

Redis設計 Sentinel哨兵

redis單獨實現了乙個sentinel模組,用於監聽主從例項,主動下線問題的主例項,替換從例項,以達到redis的高可用。初始化sentinel時指定監控的主例項列表masters,向主例項們改起連線,偽裝成它們的乙個客戶端。sentinel每隔十秒傳送一條info訊息給主伺服器,獲取主伺服器狀態...