redis-sentinel(哨兵) redis
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis作Master-slave的高可用方案時,假如master宕機了,Redis自己(包括它的不少客戶端)都沒有實現自動進行主備切換,而Redis-sentinel自己也是一個獨立運行的進程,它能監控多個master-slave集羣,發現master宕機後能進行自動切換。sql
Sentinel 的構造:vim
Sentinel 是一個監視器,它能夠根據被監視實例的身份和狀態來判斷應該執行何種動做。服務器
功能:nosql
監控(Monitoring): 測試
Sentinel 會不斷地檢查你的主服務器和從服務器是否運做正常。spa
提醒(Notification):blog
當被監控的某個 Redis 服務器出現問題時, Sentinel 能夠經過 API 向管理員或者其餘應用程序發送通知。進程
自動故障遷移(Automatic failover):get
當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣可使用新主服務器代替失效服務器。
Sentinel 經過用戶給定的配置文件來發現主服務器。
Sentinel 經過向主服務器發送 INFO 命令來自動得到全部從服務器的地址。
Sentinel 會經過命令鏈接向被監視的主從服務器發送 「HELLO」 信息,該消息包含 Sentinel 的 IP、端口號、ID 等內容,以此來向其餘 Sentinel 宣告本身的存在。與此同時Sentinel 會經過訂閱鏈接接收其餘 Sentinel 的「HELLO」 信息,以此來發現監視同一個主服務器的其餘 Sentinel 。
sentinel1 經過發送HELLO 信息來讓sentinel2 和 sentinel3發現本身,其餘兩個sentinel 也會進行相似的操做。
Sentinel 之間只會互相建立命令鏈接,用於進行通訊。由於已經有主從服務器做爲發送和接收 HELLO 信息的中介,因此 Sentinel之間不會建立訂閱鏈接。
故障轉移FAILOVER:
一次故障轉移操做由如下步驟組成:
發現主服務器已經進入客觀下線狀態。
基於Raft leader election 協議 , 進行投票選舉
若是當選失敗,那麼在設定的故障遷移超時時間的兩倍以後,從新嘗試當選。 若是當選成功, 那麼執行如下步驟。
選出一個從服務器,並將它升級爲主服務器。
向被選中的從服務器發送 SLAVEOF NO ONE 命令,讓它轉變爲主服務器。
經過發佈與訂閱功能, 將更新後的配置傳播給全部其餘 Sentinel ,其餘 Sentinel 對它們本身的配置進行更新。
向已下線主服務器的從服務器發送 SLAVEOF 命令,讓它們去複製新的主服務器。
當全部從服務器都已經開始複製新的主服務器時, leader Sentinel 終止此次故障遷移操做。
sentinel搭建過程:
這裏只是演示,因此只搭建一個sentinel , 多個sentinel 安裝步驟同樣。
1、監控
2、自動選主,切換(6381 slaveof no one)
3、2號從庫(6382)指向新主庫(6381)
步驟:
mkdir /nosql/26380
cd /nosql/26380
vim sentinel.conf
port 26380
dir "/nosql/26380"
sentinel monitor mymaster 192.168.6.182 6382 1
sentinel down-after-milliseconds mymaster 5000
啓動:
redis-sentinel /nosql/26380/sentinel.conf &
停主庫測試:
[root@db01 ~]# redis-cli -p 6380
shutdown
[root@db01 ~]# redis-cli -p 6381
info replication
啓動源主庫(6380),看狀態。
Sentinel管理命令:
redis-cli -p 26380
PING :返回 PONG 。
SENTINEL masters :列出全部被監視的主服務器
SENTINEL slaves <master name>
SENTINEL get-master-addr-by-name <master name> : 返回給定名字的主服務器的 IP 地址和端口號。
SENTINEL reset <pattern> : 重置全部名字和給定模式 pattern 相匹配的主服務器。
SENTINEL failover <master name> : 當主服務器失效時, 在不詢問其餘 Sentinel 意見的狀況下, 強制開始一次自動故障遷移。