06:redis-sentinel(哨兵)

redis-sentinel(哨兵) redis

Redis-SentinelRedis官方推薦的高可用性(HA)解決方案,當用RedisMaster-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

32號從庫(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 意見的狀況下, 強制開始一次自動故障遷移。

相關文章
相關標籤/搜索