在這此前提是你如今當前的集羣已經實現了redis的主從複製,要不沒法實現如下的功能,若是尚未配置的能夠找找我以前寫的文章redis
mymaster是我所監控的主節點的名字服務器
port ${port}
daemonize yes
dir "XXX"
#工做的目錄
logfile "${port}.log"
#由於有多個sentinel因此習慣性用端口來命令,容易區分日誌
sentinel monitor mymaster 127.0.0.1 7000 2
#表示有2臺sentinel認爲這個主節點有問題了,就會開始對它進行下限
sentinel down-after-milliseconds mymaster 30000
#sentinel用於檢測主節點是否還能連通,能夠想象就是ping了以後30000毫秒不通就認爲是斷開
sentinel parallel-syncs mymaster 1
#當主節點發生變化的時候,其他的從節點是如何複製主節點的數據,1是一個個來複制,0是同時進行復制,一個個來會減小主庫的壓力
sentinel failover-timeout mymaster 1800000
#故障轉移的時間
在咱們的redis(我使用的是redis-4)中會已經有sentinel的模版,能夠在經過這個模版進行一些修改配置架構
cat sentinel.conf |grep -v '#'|grep -v '^$'
#能夠去除空格和註釋,這樣便於修改
修改完成以後能夠啓動學習
./redis-sentinel ../config/redis-sentinel-26382.cnf(配置文件目錄)
#和啓動redis-server是同樣的
啓動完以後,由於sentinel是特殊的redis,能夠經過正常的方式啓動,例如測試
redis-cli -p 26382
以後在執行info命令能夠看出,sentinel已經知道這個集羣的架構,有多少個從庫spa
這是咱們回過頭去看,會發現配置已經發生了變化日誌
而後咱們能夠按照本身的需求配置多個sentinel,並啓動code
在我配置的過程當中,由於我是在一臺服務器上進行,因此只是端口的差別,這樣咱們能夠用一些命令去偷懶,哈哈server
sed 's/26382/26384/g' redis-sentinel-26382.cnf > redis-sentinel-26384.cnf
#這樣就能夠把redis-sentinel-26382.cnf的26382所有改成26384
具體的命令詳情,本身去查詢如下哈,由於不是我學習的重點,因此就沒寫了ip
我本身在測試的時候,我是啓動了三個sentinel,把他們都配置完成並啓動以後,執行info
命令會發現
他們也互相得感知到了,檢測到了當前集羣有3個sentinel在管理中
是爲了讓每一個sentinel和redis節點保持鏈接,出現問題後能夠準確地快速切換
1.每10秒每一個sentinel對master和slave執行info
2.每2秒每一個sentinel經過master節點的channel交換信息(pub/sub,即發佈訂閱)
3.每1秒每一個sentinel對其餘的sentinel和redis執行ping
當監控正在master的sentinel發現master出現問題了,就採起下線操做。
面前咱們有提到兩個配置
sentinel monitor mymaster 127.0.0.1 7000 2(quorum)
sentinel down-after-milliseconds mymaster 30000
主觀下線:是單個sentinel節點對redis節點失敗的「偏見」
客觀下線:全部的sentinel節點對redis節點失敗「達成共識」(quorum,能夠自行根據須要配置)
如何認爲master失敗呢?
sentinel節點ping超過了第二條配置中設置的時間以後沒有迴應就認爲是失敗
當一個sentinel發現了問題,就會向其餘的sentinel節點內部會發送sentinel is_master_down_by_addr
去「諮詢」其餘sentinel的意見
在集羣中,雖然有多個sentinel進行監控,可是隻有一個sentinel節點完成故障轉移
sentinel is_master_down_by_addr
「諮詢」其餘sentinel的意見,同時也「發表」了要求將它設置爲領導者slave no one
命令讓其成爲master節點parallvel_syncs
參數有關;sentinel parallel-syncs mymaster 1
#當主節點發生變化的時候,其他的從節點是如何複製主節點的數據,1是一個個來複制,0是同時進行復制,一個個來會減小主庫的壓力`slave_priority
(slave節點的優先級)最高的slave節點,若是存在即返回,不存在則繼續