一篇文章帶你讀懂Redis的哨兵模式

大雄45發表於2022-07-20
導讀 redis的哨兵模式,就是用於在一主多從的叢集環境下,如果主伺服器當機了,它會自動的將從伺服器中的一臺設為新的master,並且將其餘的slave的配置檔案自動修改,這樣就切換出一套新的主從服務,不需要人工干預,且不會影響服務的使用。

一篇文章帶你讀懂Redis的哨兵模式一篇文章帶你讀懂Redis的哨兵模式

背景

在生產環境中,為了保證redis服務的高可用,通常都會搭建主從。我們知道主從的原理是從伺服器獲取rdb檔案的全量複製+寫操作的增量複製來共同保證資料的一致性,所以在配置從伺服器的時候,一個很重要的配置項就是標明主伺服器的ip和埠號,總得知道哪一臺伺服器是我的主子不是,像下圖中的replicaof配置。
一篇文章帶你讀懂Redis的哨兵模式一篇文章帶你讀懂Redis的哨兵模式
通俗易懂講解redis的哨兵模式

對於圖中的部署方案,如果主伺服器當機了,我們只能進行手動干預,選擇一臺從伺服器重新作為主伺服器,然後將另外的兩臺從伺服器的配置檔案修改一下,將replicaof的配置重新改成新的主伺服器地址。人工干預費時費力不說,更重要的是,這樣會造成一段時間內服務是不可用的。在這種場景下,哨兵模式應運而生了。

什麼是哨兵模式Sentinel

redis的哨兵模式,就是用於在一主多從的叢集環境下,如果主伺服器當機了,它會自動的將從伺服器中的一臺設為新的master,並且將其餘的slave的配置檔案自動修改,這樣就切換出一套新的主從服務,不需要人工干預,且不會影響服務的使用。

那麼它具體是怎麼工作的呢?首先看下面這張圖:
一篇文章帶你讀懂Redis的哨兵模式一篇文章帶你讀懂Redis的哨兵模式
通俗易懂講解redis的哨兵模式
一篇文章帶你讀懂Redis的哨兵模式一篇文章帶你讀懂Redis的哨兵模式
哨兵模式結構圖

首先哨兵是一個獨立於主從服務之外的服務,它也是一個叢集服務。哨兵例項會不斷給主伺服器傳送Ping ,主伺服器在收到 後,返回一個有效回覆,這樣哨兵例項認為伺服器是正常的。

主觀下線

假設主伺服器當機,哨兵1在指定時間內(可配置)沒有收到主伺服器的有效回覆,那麼這個哨兵會把伺服器標記為下線,叫做主觀下線SDOWN。

注意此時只有一個哨兵標記為下線,實際上哨兵沒有收到回覆原因可能有很多,可能是伺服器確實掛了,也有可能是伺服器並沒有掛,由於網路原因沒有收到回覆,總之,一個哨兵沒有收到回覆並不能證明主伺服器當機。

客觀下線

哨兵2也傳送了Ping命令,同樣也沒有收到回覆,哨兵2也會將主伺服器標記為SDOWN。這個時候,3個哨兵中有2個哨兵上報了SDOWN,哨兵們在彼此交流之後,認為已經有足夠數量的例項證明該服務已經不可用,因此,哨兵例項會將該伺服器標記為客觀下線ODOWN。

這裡的足夠數量是可配置的,一般是哨兵個數的一半加1,比如3個哨兵則就設定為2。

投票選舉,故障轉移

當哨兵例項將服務標記為客觀下線時,會進行一次選舉。在剩下的從伺服器例項中,選出一個作為主節點,並同時修改其餘從伺服器的配置檔案,將新的主節點作為資料同步的來源,然後重新啟動服務,完成切換。

至此,一個完整的哨兵自動進行故障轉移的過程就完成了。

springboot配置一主多從+哨兵

如果我們的環境由主從換成了主從+哨兵,修改配置也比較簡單,先註釋掉原來的host和port的配置,替換成哨兵的配置,如下圖:

通俗易懂講解redis的哨兵模式
一篇文章帶你讀懂Redis的哨兵模式一篇文章帶你讀懂Redis的哨兵模式
需要注意的是,這裡nodes裡配置的是哨兵叢集的IP+埠,而不是主從節點,一定不要配錯了。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2906618/,如需轉載,請註明出處,否則將追究法律責任。

相關文章