首頁 > 資料庫 > Redis > 一起來分析Redis哨兵模式

一起來分析Redis哨兵模式

WBOY
發布: 2022-03-16 18:09:01
轉載
2267 人瀏覽過

這篇文章為大家帶來了關於Redis的相關知識,其中主要介紹了哨兵模式的相關問題,包括了哨兵概念、哨兵作用、啟用哨兵、哨兵原理等等,希望對大家有幫助。

一起來分析Redis哨兵模式

推薦學習:Redis教學

#哨兵模式

1. 哨兵概念

  • 在一主多從結構中,如果master宕機了,就需要從多個slave中選出一個作為新的master,要想完成這樣的功能,就需要使用Redis的哨兵機制

  • 哨兵 (sentinel) 是一個分散式系統,用於對主從結構中的每台伺服器進行監控,當發生故障時透過投票機制選擇新的master並將所有slave連接到新的master,如下圖所示:

    一起來分析Redis哨兵模式

2. 哨兵作用

  • 監控:監控master和slave
    • 不斷的檢查master和slave是否正常運作
    • master存活偵測、master與slave運作偵測
  • 通知(提醒):當被監控的伺服器出現問題時,向其他哨兵、Redis伺服器發送通知

  • #故障轉移:斷開宕機的master與slave的連接,選取一個slave作為master,將其他slave連接新的master,並告知客戶端新的伺服器位址

注意:哨兵也是redis伺服器,僅提供監控服務,不提供資料管理服務;通常哨兵的數量配置為單數(方便投票)

#3. 啟用哨兵

  • 修改哨兵的設定檔sentinel.conf ,設定檔位於Redis目錄下,如下圖所示:

    一起來分析Redis哨兵模式一起來分析Redis哨兵模式
  • ##部分配置的意義如下圖所顯示:

    一起來分析Redis哨兵模式
  • 啟動哨兵

    redis-sentinel filename 
    #filename指的是配置文件名
    #每个哨兵都要配置自己的配置文件
    登入後複製
  • #設定並啟動哨兵之後,主伺服器當機之後,會

    自動的執行投票、主從切換等過程

4. 哨兵原則

哨兵在進行主從切換過程中經歷三個階段:

    監控
  • 通知

##4.1 監控

用來同步各個節點的狀態訊息,這些節點包含master、slave、哨兵,也就是整個系統所有伺服器的資訊。

主要完成的功能:

一起來分析Redis哨兵模式

  • # 取得各個sentinel的狀態(是否在線):新添加的哨兵要與系統中已經存在的哨兵進行資訊的交互

  • 取得master的狀態(透過info指令)

    • 所取得的內容如下

      1. master属性
      	 runid
      	 role:master
      2. 各个slave在master中保存的基本信息
      登入後複製
  • 取得所有slave的狀態(根據master中slave的資訊向所有的slave發送info指令)

    • 取得的內容如下

      slave属性
      	runid
      	role:slave
      	master_host、master_port
      	offset
      登入後複製

具體的內部運作原理如下所述:

一起來分析Redis哨兵模式

  • 哨兵1向master發送info指令之後,會建立一個cmd連接,創建的連接是用來發送命令的
  • 創建好cmd連接之後,會在哨兵1這一端保存目前他所獲得的所有信息,另一端master也會保存自己持有的信息
  • 然後哨兵1根據從master獲取的關於salve的信息,向slave發送info指令,得到salve的信息,豐富這一端所保存的資訊
  • 當新增一個新的哨兵2時,哨兵2向master發送info指令,建立cmd連接,根據master中的信息可以得到之前已經存在的哨兵1,在自己這一端保存已經獲得的資訊。然後判斷哨兵1是否在線,與哨兵1建立連接,二者互相交換各自的信息,並且雙方會持續的ping,保證他們之間是暢通的
  • 哨兵2根據從master獲得的slave信息,再從slave獲取信息,豐富自己所保存的信息
  • 再新增一個哨兵3時,與之前的過程類似,最終三個哨兵建立起了關係網
  • 關係網中三者會互相交換、發送訊息,關係網中的這種工作模式稱為發布訂閱模式

4.2 通知

哨兵在通知階段要不斷的去獲取master與slave的信息,然後將獲得的信息在各個哨兵之間進行共享。

具體的流程如下:

哨兵透過建立的cmd連接,向master、slave發送hello 指令,得到他們的訊息,然後在關係網中共用:

一起來分析Redis哨兵模式

4.3 故障轉移

##斷開宕機的master與slave的連接,選取一個slave身為master,將其他slave連接新的master,並告知客戶端新的伺服器位址。

具體的流程如下所述:

  • 哨兵1總是無法得到master的回應,主觀判斷master宕機,標記

    sdown(只有一個哨兵認為master宕機)

  • 哨兵1在關係網中傳遞訊息,向其他哨兵發送圖中左上角的訊息

  • 其他哨兵得到訊息之後,全部向master發送訊息,確定master是否宕機,他們也會將自己得到的結果發送給關係網中的其他哨兵,確定master宕機後,將標記改為

    odown(所有哨兵偵測之後,超過一半的哨兵認為master宕機)

    一起來分析Redis哨兵模式
  • 當認定master宕機之後,此時需要選舉新的master,由哪個哨兵完成這件事要通過哨兵之間的選舉決定,具體過程如下所述:

      在選舉的時候每個哨兵手裡都有一票,每個哨兵都會發出一個指令,在內網裡邊告訴其他哨兵自己當選舉人,比如說sentinel1和sentinel2發出這個選舉指令,那麼sentinel3接收到他們的申請之後,sentinel3就會把自己的一票投給其中一方,根據
    • 到達的先後順序投票,獲得票的那一方就會多一張選舉票,按照這樣的一種形式,最終會有一個選舉結果,獲得票數最多的哨兵會被獲選
    • 在這個過程中有可能會存在失敗的現象,例如第一輪沒有選舉成功,那就會接著進行第二輪第三輪直到完成選舉
  • 當完成哨兵之間的選舉之後,接下來就要由選舉勝出的哨兵去slave中挑選一個,將其變成新的master,具體的流程如下所述:

      哨兵在伺服器清單中挑選備選master的原則:
    • 先排除,後選擇
        不在線的OUT
      • 回應慢的OUT
      • 與原始master斷開時間久的OUT
      • #排除結束,開始進行選擇
      • 優先順序高的獲選
      • offset較大的獲選(比較大說明同步原來master的資料最多)
      • 若還沒選出,則最後根據runid選出
  • 選出新的master之後,哨兵傳送指令給伺服器:

    • 向新的master傳送

      slaveof no one 指令

    • 向其他slave傳送

      slaveof 新masterIP埠 指令

  • #同時也要告訴其他的哨兵新master是誰

#5.總結

監控階段:同步訊息

通知階段:保持聯通

故障轉移階段:

    哨兵發現問題,依序標記主觀下線與客觀下線
  1. 競選負責哨兵
  2. 優選新master
  3. 新master上任,其他slave連接新的master,
  4. 原master恢復之後作為slave連接到新master
推薦學習:

Redis影片教學

以上是一起來分析Redis哨兵模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板