哨兵模式


一、哨兵模式

1.主要功能

哨兵主要功能有兩點:
  a、監控所有節點數據庫是否在正常運行。
  b、master數據庫出現故障時,可以自動通過投票機制,從slave節點中選舉新的master,實現將從數據庫轉換為主數據庫的自動切換。
Master-Slave切換后,master_redis.conf、slave_redis.conf和sentinel.conf的內容都會發生改變,即master_redis.conf中會多一行slaveof的配置,sentinel.conf的監控目標會隨之調換。

Redis的哨兵系統用於管理多個 Redis 服務器,該系統執行以下三個任務:
  a、監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運作正常。
  b、提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 可以通過 API 向管理員或者其他應用程序發送通知。
  c、自動故障遷移(Automatic failover):當一個Master不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會將失效Master的其中一個Slave升級為新的Master, 並讓失效Master的其他Slave改為復制新的Master; 當客戶端試圖連接失效的Master時,集群也會向客戶端返回新Master的地址,使得集群可以使用Master代替失效Master。

2.工作方式

1)每個Sentinel以每秒鍾一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個PING命令。
2)如果一個實例(instance)距離最后一次有效回復PING命令的時間超過 own-after-milliseconds 選項所指定的值,則這個實例會被Sentinel標記為主觀下線。
3)如果一個Master被標記為主觀下線,則正在監視這個Master的所有 Sentinel 要以每秒一次的頻率確認Master的確進入了主觀下線狀態。
4)當有足夠數量的Sentinel(大於等於配置文件指定的值)在指定的時間范圍內確認Master的確進入了主觀下線狀態,則Master會被標記為客觀下線。
5)在一般情況下,每個Sentinel 會以每10秒一次的頻率向它已知的所有Master,Slave發送 INFO 命令。
6)當Master被Sentinel標記為客觀下線時,Sentinel 向下線的 Master 的所有Slave發送 INFO命令的頻率會從10秒一次改為每秒一次。
7)若沒有足夠數量的Sentinel同意Master已經下線,Master的客觀下線狀態就會被移除。 若 Master重新向Sentinel 的PING命令返回有效回復,Master的主觀下線狀態就會被移除。

 

主觀下線
哨兵(Sentinel)節點會每秒一次的頻率向建立了命令連接的實例發送PING命令,如果在down-after-milliseconds毫秒內沒有做出有效響應包括(PONG/LOADING/MASTERDOWN)以外的響應,哨兵就會將該實例在本結構體中的狀態標記為SRI_S_DOWN主觀下線
客觀下線
當一個哨兵節點發現主節點處於主觀下線狀態是,會向其他的哨兵節點發出詢問,該節點是不是已經主觀下線了。如果超過配置參數quorum個節點認為是主觀下線時,該哨兵節點就會將自己維護的結構體中該主節點標記為SRI_O_DOWN客觀下線

 

3.優缺點

優點:高可用,在主節點故障時能實現故障的轉移
缺點:
  1)好像沒辦法做到水平拓展,如果內容很大的情況下。
  2)主從服務器的數據要經常進行主從復制,這樣造成性能下降。
  3)當主服務器宕機后,從服務器切換成主服務器的那段時間,服務是不能用的。

二、哨兵模式的讀寫分離

哨兵模式下,客戶端一般會保持兩種連接,與哨兵的連接,以及master的連接。數據操作當然使用master連接,如果master出故障了,可以通過與哨兵的連接來獲取master的最新地址。

一般的客戶端連接流程如下:

  1.連接哨兵,根據master的名稱獲取master的ip和port。

  2.通過ip和port連接master。

另外,有一些公司自己封裝了redis客戶端,可以通過哨兵獲得master及其slaves,采用讀寫分離,讀slaves,寫master。

三、搭建哨兵模式

需要先有主從環境,前面已經搭配了1主2從的主從環境。

1.sentinel搭建過程

mkdir /data/26380
cd /data/26380
vim sentinel.conf
port 26380
dir "/data/26380"
sentinel monitor mymaster 127.0.0.1 6380 1           #1表示sentinel個數,當有超大型redis集群,有多個sentinel的時候,有1個sentinel認為某個redis master宕機了,則表示它宕機了,切換主從
sentinel down-after-milliseconds mymaster 5000      #主庫宕機5000毫秒,開始切換
sentinel auth-pass mymaster 123456 

啟動:
[root@db01 26380]# redis-sentinel /data/26380/sentinel.conf  &>/tmp/sentinel.log &

如果有問題:
1)重新准備1主2從環境
2)kill掉sentinel進程
3)刪除sentinel目錄下的所有文件
4)重新搭建sentinel
View Code

2.搭建完成后,測試

redis-cli -p 6380 -a 123456 shutdown
redis-cli -p 6381 -a 123456 info replication 

啟動源主庫(6380),看狀態。
redis-server /data/6380/redis.conf
redis-cli -p 6380 -a 123456 info replication 

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 意見的情況下, 強制開始一次自動故障遷移。
View Code

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM