Redis哨兵 部署和配置


一.哨兵簡介

哨兵介紹

Sentinel(哨兵)是用於監控redis集群中Master狀態的工具,其已經被集成在redis2.4+的版本中Sentinel可以自動對主從進行檢測,當一個有問題后,將會自動切換從節點為主。

哨兵適合使用單點的redis,並有高可用需求的。因為始終是單台的redis,性能是有限度的,有更高需求可以選擇集群。

在代碼中,用jedis之類工具讀取 Sentinel 的信息,獲取當前沒問題的主節點,進行寫入操作即可。當主掛掉,Sentinel會自動切換,只要對最新的主節點進行讀寫即可。

如果將主從做高可用,需要監控Sentinel的信息輸出,將所有從節點做一個資源池,讀將從資源池里找從節點進行。

哨兵原理

Sentinel系統時刻監控着主和從,當主掛掉后選擇其中一個從來升任成主,可以啟動多個Sentinel來避免監控掛掉,但多個Sentinel它們要投票。
file

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


免責聲明!

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



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