一.哨兵簡介
哨兵介紹
Sentinel(哨兵)是用於監控redis集群中Master狀態的工具,其已經被集成在redis2.4+的版本中Sentinel可以自動對主從進行檢測,當一個有問題后,將會自動切換從節點為主。
哨兵適合使用單點的redis,並有高可用需求的。因為始終是單台的redis,性能是有限度的,有更高需求可以選擇集群。
在代碼中,用jedis之類工具讀取 Sentinel 的信息,獲取當前沒問題的主節點,進行寫入操作即可。當主掛掉,Sentinel會自動切換,只要對最新的主節點進行讀寫即可。
如果將主從做高可用,需要監控Sentinel的信息輸出,將所有從節點做一個資源池,讀將從資源池里找從節點進行。
哨兵原理
Sentinel系統時刻監控着主和從,當主掛掉后選擇其中一個從來升任成主,可以啟動多個Sentinel來避免監控掛掉,但多個Sentinel它們要投票。
Sentinel作用
1.Master狀態檢測
2.如果Master異常,則會進行Master-Slave切換,將其中一個Slave作為Master,將之前的Master作為Slave
3.Master-Slave切換后,master_redis.conf、slave_redis.conf和sentinel.conf的內容都會發生改變,即master_redis.conf中會多一行slaveof的配置,sentinel.conf的監控目標會隨之調換
Sentinel工作方式
1.在一般情況下,每個 Sentinel 會以每 10 秒一次的頻率向它已知的所有Master,Slave發送 INFO 命令來獲得redis主從的節點信息
2.當Master被 Sentinel 標記為客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發送 INFO 命令的頻率會從 10 秒一次改為每秒一次
3.每2秒,會訂閱獲取一下主節點的哨兵信息,來了解哨兵們的信息,有新的哨兵加入,將會記錄新哨兵信息,並與他建立連接
4.每秒鍾一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個 PING 命令
5.如果一個 實例 距離最后一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel 標記為主觀下線
6.當主觀下線的節點是 Master 時,則詢問其他哨兵,超過一定個數則判斷主節點掛掉,進行客觀下線
7.當需要對一個 Master 進行客觀下線,就需要在 Sentinel 們中選舉一個領導者來執行這個操作,對 Master 進行下線,選舉才用Raft算法
8.若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被移除
9.若 Master 重新向 Sentinel 的 PING 命令返回有效回復, Master 的主觀下線狀態就會被移除
10 當對一個 Master 進行客觀下線后,會從其它從中選擇出一個執行slaveof no one
命令,使其升級為主節點
11.向其它從節點發送命令,指定新主,並對新主進行數據復制
12.當原壞掉的主恢復后,將會作為新主的從節點
13.如果原壞掉的主刪除不恢復,Sentinel依然會定期檢測,會造成一定資源浪費
主觀下線和客觀下線
主觀下線:
Subjectively Down,簡稱SDOWN,指的是當前 Sentinel 實例對某個redis服務器做出的下線判斷,這個判斷只是認為,但並不做任何動作
客觀下線:
Objectively Down, 簡稱ODOWN,指的是多個 Sentinel 實例在對Master Server做出 SDOWN 判斷,並且通過 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下線判斷,然后開啟failover
二.哨兵部署
環境介紹
[Redis-Server-1]
主機名 = host-1
系統 = centos-7.3
地址 = 1.1.1.1
軟件 = redis-3.2.9 6379 26379
[Redis-Server-2]
主機名 = host-2
系統 = centos-7.3
地址 = 1.1.1.2
軟件 = redis-3.2.9 6379 26379
哨兵配置
1.參照Redis主從 部署和配置,先搭建一個主從結構
2.每個節點都填寫主redis的ip和端口,最后的1代表只要有一個哨兵節點認為主有問題,就切換主從,有3個節點可以寫2
vim sentinel.conf
protected-mode yes
bind 1.1.1.1 #監聽地址修改
daemonize yes
port 26380
sentinel monitor mymaster 1.1.1.1 6379 1 #這里修改成主的信息
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 1800
3.啟動
sentinel 啟動之后,就會從主redis獲取它的信息還有從redis的地址,當前可以看到哨兵的日志
src/redis-sentinel sentinel.conf
4.關閉master
我們手動關閉Master 之后,sentinel 在監聽master 確實是斷線了之后,將會開始計算權值,然后重新分配主服務器
三.使用驗證
連接哨兵,查看信息狀態
src/redis-cli -p 26379
INFO