1. 程式人生 > >Redis--哨兵

Redis--哨兵

Sentinel 哨兵 —— 高可用 (high availability)

   監視叢集,主伺服器的選舉。

主伺服器的下線判斷:

  1、在down-after-milliseconds選項設定的時間內,連續向Sentinel返回無效回覆。

  2、詢問其它監視主伺服器的Sentinel也得到主伺服器下線的迴應。

  注意點:如何正確的判斷主伺服器是否下線。

領頭Sentinel的選舉:(當主伺服器被判斷為下線時,監視該叢集的Sentinel就進行領頭的選舉)

  1、所有線上的Sentinel都有被選舉為領頭的資格。

  2、每次選舉後,Sentinel的配置紀元自增1。(configuration epoch,類似計數器的作用)

  3、同一個批次的配置紀元內,選票唯一,確定後,就不再修改。

  4、首先發現主伺服器下線的Sentinel優先設定為領頭哨兵。

  5、先到先得規則,如果有兩個Sentinel同時要求目標Sentinel將自己設定為領頭Sentinel,則哪個訊息先到達,執行哪個。拋棄後面到達的訊息。

  6、半數規則。領頭Sentinel需要得到超過半數以上的投票,公式為 n/2+1 (n/2向下取整,且一般情況下,n為奇數)

  7、在同一個配置紀元下,領頭Sentinel選舉失敗,則迴圈上述的規則。

  注意點:如何才能確保領頭唯一,且選舉的時候不進入死迴圈。上述的規則,就是答案。

主伺服器的選舉:

  1、從伺服器正常。

  2、根據從伺服器的優先順序進行排序。

  3、根據從伺服器的複製偏移量進行排序。

  4、根據從伺服器的執行ID進行排序。

  5、根據這三個組合排序,獲取第一個從伺服器做為主伺服器。 

  注意點:選取資料最新的從伺服器作為主伺服器。

選好主伺服器後,進行故障轉移:

  1、讓從伺服器複製新的主伺服器。

  2、如果已經下線的主伺服器再次上線,則該伺服器作為新主伺服器的從伺服器。