redis - 哨兵(高可用)

參考官網
redis - 主從(高性能)中,提供了高性能,可是沒辦法提供高可用。好比master掛了,雖然slave能夠提供查詢,可是不能提供寫入服務,相對於不可用了。雖然能夠把slave經過slaveof no one命令變成master,可是手動仍是不太方便。
redis能夠使用sentinel自動完成故障發現和轉移,並提供瞭如下功能:redis

  1. 監控:監控master和slave是否正常工做。
  2. 通知:當發現某個redis異常時,能夠通知應用程序或者系統管理員。
  3. 故障轉移:當master出現異常時,sentinel會選舉一個新的master,並讓其餘slave指向新的master地址,同時通知應用程序使用新的master地址。
  4. 配置中心:發生故障轉移時,通知新master地址。

爲了sentinel的健壯性,sentinel也是分佈式的,多個sentinel協同工做的優點以下:segmentfault

  • master是否正常工做,由大部分的sentinel決定的,減小誤判的機率。
  • 部分sentinel的異常,並不妨礙總體的功能。

部署案例

在部署以前,咱們須要瞭解一下基本信息:服務器

  • 爲了保證Sentinel服務的健壯性,至少須要三個Sentinel實例。
  • 三個示例應該放在不一樣的虛擬機或物理機上。
  • 因爲redis的異步複製,因此Sentinel不保證數據的零丟失。

兩個實例

+----+         +----+
| M1 |---------| R1 |
| S1 |         | S2 |
+----+         +----+

配置: quorum = 1

這個示例中,一個服務器部署了Mater和Sentinel,一個服務器部署了slave和Sentinel。此時,若是M1掛了,S1和S2只要有一個認爲M1掛了,就會選舉一個Sentinel讓slave升級爲master,可是若是M1所在的服務器異常了,則只剩下S2,此時1小於majority(2)是沒法作故障轉移的。異步

三個實例

+----+
       | M1 |
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+

配置:  quorum = 2

這個示例中,若是M1所在服務器掛了,此時S2和S3只要有一個認爲M1掛了,就就會選舉一個Sentinel作故障轉移,此時2個Sentinel大於等於majority(2)是能夠作故障轉移的。
以上兩個是比較典型的案例,固然官網還有跟客戶端一個服務器的。至於爲何要一塊兒部署,是由於咱們服務器的資源是寶貴(要錢)的,一塊兒部署既達到了服務的健壯性,也節約了資源。分佈式

簡單示例

首先是主從,在redis - 主從(高性能)中也說了如何配置,sentinel的配置也比較簡單,以下:性能

port 26379
sentinel monitor mymaster ip port 2

有三個配置就啓動三個sentinel,總體流程圖以下:
image.png
若是監聽多組集羣,能夠設置多個monitor,好比spa

port 26379
sentinel monitor mymaster ip port 2
sentinel monitor resque ip port 2

image.png
原理部分後面章節講解3d

相關文章
相關標籤/搜索