Redis主備自動切換


    Sentinel(哨兵)是用於監控redis集群中Master狀態的工具.

一、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以每秒鍾一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個 PING 命令
  2、如果一個實例(instance)距離最后一次有效回復 PING 命令的時間超過 down-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 的主觀下線狀態就會被移除。

主觀下線和客觀下線
   主觀下線:Subjectively Down,簡稱 SDOWN,指的是當前 Sentinel 實例對某個redis服務器做出的下線判斷;
   客觀下線:Objectively Down, 簡稱 ODOWN,指的是多個 Sentinel 實例在對Master Server做出 SDOWN 判斷,並且通過 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下線判斷,然后開啟failover.
   SDOWN適合於Master和Slave,只要一個 Sentinel 發現Master進入了ODOWN, 這個 Sentinel 就可能會被其他 Sentinel 推選出, 並對下線的主服務器執行自動故障遷移操作。
  ODOWN只適用於Master,對於Slave的 Redis 實例,Sentinel 在將它們判斷為下線前不需要進行協商, 所以Slave的 Sentinel 永遠不會達到ODOWN。

三、Sentinel配置實現主備自動切換

    Sentinel中只需要在各節點(包括Master節點)中配置sentinel monitor為master的信息即可,不需要再配置slave的信息。在每一個redis節點中的Sentinel.conf文件中。

slave的sentinel.conf配置:

port 26379

#master2

sentinel monitor master2 192.168.15.129 6379 1  ---master地址 名字為哨名的名字,不同服務器上可以取得不一樣

sentinel down-after-milliseconds master2 5000

sentinel failover-timeout master2 900000

#sentinel can-failover master2 yes

sentinel parallel-syncs master2 2

Master機器上sentinel.conf配置

屬性

描述

port

16379

監視哨端口

daemonize

yes

啟動的進程為后台進程

logfile

“/opt/oracle/redis-2.8.19/logs/sentinel.log”  

日志文件

sentinel monitor <master-name>   <ip> <redis-port> <quorum>

sentinel monitor mymaster 127.0.0.1   6379 1

IP和端口為Master的IP地址和端口,mymaster為集群名稱,可以修改為想要的名稱,客戶端訪問時需要這個名稱

sentinel down-after-milliseconds   <master-name> 30000

sentinel down-after-milliseconds mymaster 30000

master-name為一個統一的集群名稱

sentinel failover-timeout   <master-name> 180000

sentinel failover-timeout mymaster 180000

 

sentinel parallel-syncs   <master-name> <numslaves>

sentinel parallel-syncs mymaster 1

 

 Slave機器上sentinel配置

 slave上的sentinel配置與Master上的配置相同,只需要將master-name修改即可

 啟動順序如下:

  1、redis-server redis.conf 啟動Master主機;

  2、redis-server redis.conf 啟動Slave主機 ;

  3、redis-sentinel sentinel.conf 啟動Master主機上的監視哨;

  4、redis-sentinel sentinel.conf 啟動Slave主機上的監視哨

注意:首次啟動時,必須先啟動Master
        若Master已經被判定為下線,Sentinel已經選擇了新的Master,也已經將old Master改成Slave,但是還沒有將其改成new Master。若此時重啟old Master,則Redis集群將處於無Master狀態,此時只能手動修改配置文件,然后重新啟動集群

四、示例如下:
master:192.168.15.129,

slave  :192.168.15.128

master的配置文件正常,slave的配置文件添加一行:
slaveof 192.168.15.129 6379
 
master的sentinel.conf配置(此處我的文件名稱為sentinel-test.conf):
port 26379
#master1
sentinel monitor master1 192.168.15.129 6379 1
sentinel down-after-milliseconds master1 5000
sentinel failover-timeout master1 900000
#sentinel can-failover master1 yes
sentinel parallel-syncs master1 2
 
slave的sentinel.conf配置(此處我的文件名稱為sentinel-test.conf):
port 26379
#master2
sentinel monitor master2 192.168.15.129 6379 1
sentinel down-after-milliseconds master2 5000
sentinel failover-timeout master2 900000
#sentinel can-failover master2 yes
sentinel parallel-syncs master2 2

 

分別啟動master和slave的redis服務和sentinel服務

[root@localhostsrc]#./redis-server../redis.conf

[root@localhostsrc]#./redis-sentinel../sentinel-test.conf

然后根據以下場景切換主備,切換成功,當測試都通過時,才算是配置完成

測試主備切換場景:

主:129,備:128,sen:128,129

 關閉129的redis和sen,看是否能夠切換到128上面,在128上面刪除數據,啟動129的redis和sen,看是否數據會同步,再關閉128的redis和sen,看是否會切換為129

運行如下命令,連接客戶端查看Slave狀態:./redis-cli -h IP -p Port


免責聲明!

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



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