Redis Sentinel(哨兵集群)是一種高可用的redis部署方案。在集群中的redis-master服務掛掉時,無需人為干預,即可通過哨兵集群的自我調整,實現redis服務的持續可用。
哨兵集群的功能:
- 監控:持續監測集群中的master和slave是否可用。
- 通知:通知系統管理員,集群中的部分服務不可用。
- 故障切換:若master掛掉,哨兵集群會啟動故障切換,選出其中一個slave作為新的master。使用redis的應用程序也會被告知使用新的master。
- 提供配置信息:哨兵集群為redis客戶提供服務發現功能,客戶端訪問哨兵集群,會被告知當前的master地址。
哨兵集群的分布式特性:多個哨兵進程協同工作。
多個哨兵進程的好處:
- 故障需要多個進程同時確認,降低了發現故障時出錯的概率。
- 部分哨兵進程掛掉后,集群同樣可以維持工作,從而使系統更加健壯。
運行哨兵的命令
redis-sentinel /path/to/sentinel.conf
或者
redis-server /path/to/sentinel.conf --sentinel
哨兵集群的配置文件必須存在,且是可寫的。
哨兵集群中的各個redis間默認使用26379端口來通信。
部署哨兵集群之前之前必須明確:
- 至少有三台redis才能保證系統的健壯
- 三台或三台以上redis必須部署在不同的計算機或者虛擬機中,從而降低各個redis同時掛掉的概率
- 哨兵+ redis分布式系統不保證承認寫過程中保留故障,由於Redis使用異步復制。然而,有一些方法來部署哨兵,使窗口失去寫入限制到某些時刻,而有其他不太安全的方法來部署它。
- redis客戶端需要支持哨兵集群
哨兵集群的配置
案例1:
port 5000
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
案例2
sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
第一行配置的詳解:
sentinel monitor <master-group-name> <ip> <port> <quorum>
案例1中,port5000是指sentinel工作的端口是5000
監控名為mymaster的哨兵集群,地址為 127.0.0.1 端口為6379 ,2表示兩個哨兵發現master不可用才發起故障切換.
案例2中,監控名為resque的哨兵集群,地址為192.168.1.3 端口為6380,4個哨兵發現master不可用才能發起故障切換。
注意:故障切換的兩個條件:
1.quorum個哨兵發現master不可用
2.半數以上的哨兵可用
關於sentinel的一些常用命令:
1.首先通過redis-cli 登錄
redis-cli -p 5000
2.查看master信息,其中mymaster是哨兵集群的名稱
sentinel master mymaster
3.查看slaves信息
SENTINEL slaves mymaster
4.查看其它哨兵信息
SENTINEL sentinels mymaster
5.查看master的地址
SENTINEL get-master-addr-by-name mymaster
6.其它
1.PING //測試sentinel是夠正常,正常的話返回PONG
2.sentinel masters //返回哨兵集群監控的master列表和狀態
3.SENTINEL MONITOR<name>
<ip>
<port>
<quorum>
//運行時增加監控對象
4.SENTINEL REMOVE<name>
//刪除所監控的master
5.SENTINEL SET<name>
<option>
<value> //修改配置
增加哨兵
1.配置sentinel文件
2.執行啟動命令
sentinel sentinel.conf
刪除哨兵
1.殺死哨兵進程
2.所有其他的哨兵執行
sentinel reset mastername
3.查看各個哨兵監測的master
sentinel master mastername
刪除master的slave,更改master的配置文件后對各個哨兵執行
sentinel reset mastername
工作原理:
首先來了解哨兵集群中兩個重要的基本概念:
SDOWN(主觀宕機):哨兵實例的PING命令沒有返回+PONG,-LOADING error,-MASTERDOWN error。
ODOWN(客觀宕機):足夠數量(大於等於sentinel.conf文件中的配置)的哨兵實例判斷出發生了SDOWN。
發生客觀宕機后開始故障切換。
哨兵集群可以自動發現各個哨兵實例以及redis master的slave