Redis哨兵機制配置
1.哨兵機制
1.什麼是redis哨兵?
在redis主從複製架構中,假如master-redis宕機,整個redis系統就會癱瘓。
要解決這個問題,只有人工在slave-redis執行slaveof no one選爲新的master-redis。
然後配置其他slave-redis複製新的master-redis。最後告知客戶端,新的主節點地址,從節點地址。
redis哨兵,就是把上面的操作自動化完成,不需要人工執行。目的就是保證redis主從複製系統的高可用。
2.哨兵集羣是怎樣的?
在一個redis主從複製架構中,部署多臺sentinel。
每臺sentinel會監控redis主從架構中的所有數據節點以及其他所有sentinel節點。當某個sentinel發現主節點不可用時,
其他sentinel會對主節點進行監控。當確認主節點不可用的sentinel數量大於或等於配置數量的時候,表示redis主節點確實不可用。
接下來所有sentinel會投票選舉其中一臺sentinel來進行故障轉移。同時更新redis配置文件,通知redis客戶端。
3.哨兵集羣工作流程?
1,master-redis宕機,從節點連接不到主節點,並且一直嘗試連接
2,所有sentinel對redis節點進行監控,某臺sentinel發現redis-master宕機後,其他sentinel會來再次確認,確認數大於配置要求數量,則表示master-redis客觀下線。
3,sentinel之間會選舉出一個sentinel。來執行故障轉移。
4,故障轉移後,redis出從架構選出了新的主節點,其他從節點複製新的主節點。
這個過程sentinel直接自動化完成,不需要人工干預。
4.官方給出的哨兵功能?
1.監控 sentinel監控所有其他sentinel節點以及所有redis數據節點。
2.通知 sentinel會把故障轉移的結果通知給客戶端(sentinel模式下客戶端通過命令獲取主從地址)
3.主節點故障轉移,從節點升級爲主節點。其他從節點複製新的主節點。
4.配置提供者,客戶端可以直接從sentinel模式下獲取主從的所有信息,相當於redis主從地址的配置文件
5.哨兵集羣怎麼啓動?
redis安裝後在bin目錄下,會有redis-sentinel的軟連接到redis-server的可執行文件。redis-sentinel直接按照sentinel配置文件
啓動即可。啓動方式有兩種
1.redis-server sentinel.conf --sentinel
2.redis-sentinel sentinel.conf
另外sentinel部署的時候最好部署奇數臺,因爲涉及投票。
注意:sentinel.conf 就是默認的redis.conf再加幾行配置。詳情下面有羅列
2.配置
1.配置文件sentinel.conf核心配置項
複製初始的redis.conf,改名爲sentinel.conf。比redis.conf再多加幾行sentinel特有的配置即可。下面是sentinel特有配置描述
sentinel monitor master1 x.x.x.x 6379 2
--表示sentinel要監控的主節點信息。master1是主節點別名,因爲有可能一臺sentinel監控多個主節點。x.x.x.x表示主節點host,6379表示主節點port,2表示有2臺哨兵確認主節點下線則主節點客觀下線。注意2這個地方不能大於哨兵總數,要不然永遠都不會故障轉移
sentinel down-after-milliseconds master1 30000
--表示數據節點ping不通超時時間。單位微秒,默認30000,即30s。也就是說哨兵監控某個數據節點30s未收到回覆表示當前sentinel認定爲主觀下線。
sentinel parallel-syncs master1 1
--故障轉移之後,從節點向新的主節點發起復制操作的從節點個數。默認爲1表示一次只能一臺進行復制。如果設置爲大於1的話,多臺從節點一起復制會增加主節點的壓力。建議沒有特殊必要設置爲1
sentinel failover-timeout master1 180000
--故障轉移超時時間,超過180000也就是3min沒有完成則表示故障轉移失敗
sentinel auth-pass xxxxxx...
--表示監控主節點的密碼,主節點沒設密碼無需配置
上面說了這麼多,也就是給sentinel.conf加一下配置即可。另外要修改bind 0.0.0.0 以及後臺模式運行。
2.核心配置列表
//sentinel就是不存數據的redis節點,所以也要按照redis的配置爲可遠程連接,後臺運行
#bind 0.0.0.0
protected-mode no
daemonize no
port 26379 //最好不要跟redis節點的端口重複
//sentinel核心配置
sentinel monitor mymaster 8.8.8.5 6379 2
sentinel parallel-syncs master1 1
sentinel down-after-milliseconds mymaster 1000
sentinel failover-timeout master1 180000
#sentinel auth-pass xxxxxx...
3.啓動
redis-server sentinel.conf --sentinel
redis-sentinel sentinel.conf
注意:真實情況下,可執行文件以及配置文件的路徑要正確
啓動之後sentinel就開始監控redis主從節點以及其他sentinel。也就是說哨兵部署完成
4.主從監控
sentinel配置了主節點監控信息且啓動的時候,會自從根據主節點獲取到從節點信息以及同時監控當前主節點的其他sentinel信息。然後對所有的節點進行監控。
不需要另外配置監控從節點以及其他sentinel
5.配置文件
sentinel啓動的時候,會自動更新sentinel.conf,故障轉移後sentinel會自動更新redis.conf的replicaof項
1,再sentinel.conf追加一下配置
sentinel config-epoch mymaster 9
sentinel leader-epoch mymaster 10
sentinel known-replica mymaster 8.8.8.2 6379
sentinel known-replica mymaster 8.8.8.3 6379
sentinel known-replica mymaster 8.8.8.4 6379
sentinel known-sentinel mymaster 8.8.8.11 26379 4c65f3fd882466efc8c363fa8f111ddfefeca624
sentinel known-sentinel mymaster 8.8.8.12 26379 5c9ff5f776653263e9ee1fefeb3e957dda21fdae
sentinel current-epoch 10
2,在從節點redis.conf修改replicaof項,更新爲新的主節點host,port
3,常用命令
sentinel masters --獲取所有監控的主節點信息
sentinel master masterName --獲取監控的當前名稱的主節點信息
sentinel slaves masterName --獲取監控的當前名稱的主節點下的從節點信息
sentinel failover masterName --強制當前名稱的主節點進行故障轉移
sentinel get-master-addr-by-name masterName --獲取當前名稱的主節點的ip以及port