Redis從入門到放棄系列(九) Sentinel

Redis從入門到放棄系列(九) Sentinel

本文例子基於:5.0.4redis

Redis Sentinel做爲Redis高可用方案,具備監聽,通知,自動故障轉移等功能.這一切都是依賴主備同步的大前提(參考上一節:Redis從入門到放棄系列(八) 主備同步).服務器

  • 監聽: Sentinel會不斷檢查master節點跟replica節點是否正常工做
  • 通知: 當某個節點運行出現問題的時候,可以通知其餘的進程(eg:客戶端)
  • 自動故障轉移: 當master節點down了,Sentinel會啓用故障轉移進程,將replica節點提高爲master節點,其餘的replica節點從新配置新的master節點,而且告知客戶端須要從新鏈接的是哪一個master地址.

在互聯網應用中,程序若是隻是單臺部署的話,都會存在單點問題,那麼做爲Redis高可用方案的Sentinel是如何解決這一問題呢?微信

歡迎關注微信公衆號黑搜丶D(black-search)spa

啓動方式

  • redis-server sentinel配置文件 --sentinel
  • redis-sentinel sentinel配置文件

Sentinel配置

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
複製代碼

以上配置爲Sentinel最少配置。日誌

  • sentinel monitor <master-group-name> <ip> <port> <quorm> 監聽127.0.0.1地址的6379端口,爲其命名爲mymaster,當集羣有2個Sentinel節點認爲mymaster節點down了才客觀的下線。

其餘Sentinel配置

sentinel <option_name> <master_name> <option_value>
複製代碼
  • down-after-milliseconds 以毫秒爲單位,當超過該時間沒有心跳,Sentinel則主觀認爲該節點已經關閉,只有絕大部分Sentinel斷定該節點已經關閉,纔會啓動故障轉移(即客觀下線)
  • parallel-syncs 指定了在執行故障轉移時,最多能夠有多少個從服務器同時對新的主服務器進行同步,這個數字越小,完成故障轉移所需的時間就越長(當故障轉移的時候,每次只容許該值數量的replica節點同步到新節點,那麼若是集羣中有比較多的replica節點,就須要耗時長一些,可是設置比較多的replica又會由於RDB形成replica節點短期不可用)
  • failover-timeout 故障轉移超時時間
    • 在先前的故障轉移已經由一個給定的Sentinel對同一個主機進行了嘗試以後,從新啓動故障轉移所需的時間是故障轉移超時的兩倍
    • 使用新的replicate節點做爲master節點,而且強制使用新master的數據備份做爲其餘replica節點的數據的超時時間
    • 取消已在進行中但未產生任何配置更改的故障轉移所需的時間(新master節點尚未同步到其餘的replica節點)
    • 正在進行的故障轉移等待全部replica從新配置爲新master服務器副本的最長時間

主觀下線 && 客觀下線

  • 主觀下線: 單個sentinel程序對服務器作出的下線判斷
  • 客觀下線: 指多於quorm個sentinel程序對服務器作出的下線判斷.

sentinel程序會對redis節點發送PING命令,若是redis節點沒有正確回覆sentinel的請求的話 or 指定時間內沒有回覆,那麼sentinel程序會認爲該redis主觀下線.code

有效回覆:orm

  • +PONG
  • -LOADING
  • -MASTERDOWN

客觀下線條件只適用於master節點,對於其餘的replica節點,sentinel在將他們判斷爲主觀下線的話即下線. 只有參與了判斷客觀下線的sentinel程序纔有可能參與故障轉移操做.cdn

咱們在設置sentinel集羣程序的時候,不須要在對應的配置文件中設置不一樣節點的sentinel的配置信息,那麼sentinel是如何知道彼此且發送消息的呢?server

自動發現sentinel和replica節點

sentinel經過發佈/訂閱功能來發現其餘的sentinel程序,這一功能是經過向頻道__sentinel__:hello發送信息來實現的。 發現replica節點是經過詢問master節點來獲取全部從服務器的信息.進程

  • 每一個sentinel按照2秒一次的頻率向被它監聽的master跟replica節點的__sentinel__:hello頻道發送一條包含sentinel的信息的消息.
  • 每一個sentinel都訂閱了被它監聽的頻道,查找沒有出現的sentinel,將其加入sentinel列表

搭建sentinel集羣

首先要確保已經搭建了master-replica主備

1.copy一份sentinel.conf配置文件,分別修改成sentinel_26379.conf sentinel_26380.conf sentinel_26381.conf.修改以下內容:

//指定端口
port 26379
//設置後臺啓動
daemonize yes
//設置pidfile
pidfile "/var/run/redis-sentinel_26379.pid"
//設置日誌存放地點,方便查看問題
logfile "/var/log/redis-sentinel_26379.log"
//設置監聽的master節點
sentinel monitor mymaster 127.0.0.1 6379 2
複製代碼

2.分別執行 redis-sentinel sentinel_26379.conf配置文件啓動。 啓動sentinel以前須要先準備好redis master-replica主備已經啓動~

相關文章
相關標籤/搜索