文章目錄
- 簡介
- 搭建框架
- 具體步驟
- 主要文件參數
- 開始配置
- 案例分析
- 原有的master掛了
- 哨兵運行流程和選舉原理
- 主觀下線
- 客觀下線(Objectively Down)
- 選舉出領導者哨兵(哨兵中選出兵王)
- 選新的master
- 使用建議
簡介
將某一個從庫轉換為新主庫,繼續對外服務將某一個從庫轉換為新主庫,繼續對外服務
官網理論:https://redis.io/docs/manual/sentinel/
搭建框架
具體步驟
主要文件參數
sentinel.conf文件 是哨兵的主要文件
先介紹一下具體的參數
bin:服務監聽地址,用于客戶端連接,默認本機地址
daemonize:是否以后臺daemon方式運行
protected-mode:安全保護模式
port:端口
logfile:日志文件路徑
pidfile:pid文件路徑
dir:工作目錄
sentinel monitor <master-name> <ip> <redis-port> <quorum> :設置要監控的master服務器,quorum表示最少有幾個哨兵認可客觀下線,同意故障遷移的法定票數。
sentinel auth-pass <master-name> <password>:master設置了密碼,連接master服務的密碼sentinel down-after-milliseconds <master-name> <milliseconds>:
指定多少毫秒之后,主節點沒有應答哨兵,此時哨兵主觀上認為主節點下線sentinel parallel-syncs <master-name> <nums>:表示允許并行同步的slave個數,當Master掛了后,哨兵會選出新的Master,此時,剩余的slave會向新的master發起同步數據sentinel failover-timeout <master-name> <milliseconds>:故障轉移的超時時間,進行故障轉移時,如果超過設置的毫秒,表示故障轉移失敗sentinel notification-script <master-name> <script-path> :配置當某一事件發生時所需要執行的腳本sentinel client-reconfig-script <master-name> <script-path>:客戶端重新配置主節點參數腳本
開始配置
可以 在redis根路徑下配置 一個sentinel文件裝接下來的配置文件
我們的3個哨兵都同時配置進192.168.111.169同一臺機器
注意:myredis文件要在根目錄存在
運行接下來的命令:
cd ~
mkdir myredis
vim 建立3個文件:
sentinel26379.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.111.169 6379 2
sentinel auth-pass mymaster 111111
sentinel26380.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir "/myredis"
sentinel monitor mymaster 192.168.111.169 6379 2
sentinel auth-pass mymaster 111111
sentinel26381.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir "/myredis"
sentinel monitor mymaster 192.168.111.169 6379 2
sentinel auth-pass mymaster 111111
首先要滿足主從設置(要正常啟動)
- 169機器上新建redis6379.conf配置文件,由于要配合本次案例,請設置masterauth項訪問密碼為111111,不然后續可能報錯master_link_status:down
- 172機器上新建redis6380.conf配置文件,設置好replicaof
- 173機器上新建redis6381.conf配置文件,設置好replicaof
啟動sentinel
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel
案例分析
原有的master掛了
我們自己手動關閉6379服務器,模擬master掛了
問題思考:
1.兩臺從機數據是否OK ok
2.是否會從剩下的2臺機器上選出新的master 會的
并且自己回修改相關的配置文件 填寫
執行slaveof no one命令讓選出來的從節點成為新的主節點,并通過slaveof命令讓其他節點成為其從節點 等等命令
3.之前down機的master機器重啟回來,誰將會是新老大?會不會雙master沖突? 不會沖突 ,它會變成從機
哨兵運行流程和選舉原理
當一個主從配置中的master失效之后,sentinel可以選舉出一個新的master用于自動接替原master的工作,主從配置中的其他redis服務器自動指向新的master同步數據。一般建議sentinel采取奇數臺,防止某一臺sentinel無法連接到master導致誤切換
1.判斷是否下線
2.多個哨兵判斷master是否下線
3.選出兵王
4.兵王去處理master問題,選擇slave當master
主觀下線
所謂主觀下線(Subjectively Down, 簡稱 SDOWN)指的是單個Sentinel實例對服務器做出的下線判斷,即單個sentinel認為某個服務下線(有可能是接收不到訂閱,之間的網絡不通等等原因)。主觀下線就是說如果服務器在[sentinel down-after-milliseconds]給定的毫秒數之內沒有回應PING命令或者返回一個錯誤消息, 那么這個Sentinel會主觀的(單方面的)認為這個master不可以用了.
客觀下線(Objectively Down)
ODOWN需要一定數量的sentinel,多個哨兵達成一致意見才能認為一個master客觀上已經宕掉
選舉出領導者哨兵(哨兵中選出兵王)
當主節點被判斷客觀下線以后,各個哨兵節點會進行協商,先選舉出一個領導者哨兵節點(兵王)并由該領導者節點,也即被選舉出的兵王進行failover(故障遷移)
哨兵領導者,兵王如何選出來的?
Raft算法:
選新的master
選出新master的規則,剩余slave節點健康前提下:
1.redis.conf文件中,優先級slave-priority或者replica-priority最高的從節點(數字越小優先級越高 )
2.復制偏移位置offset最大的從節點
3.最小Run ID的從節點
使用建議
- 哨兵節點的數量應為多個,哨兵本身應該集群,保證高可用
- 哨兵節點的數量應該是奇數
- 各個哨兵節點的配置應一致
- 如果哨兵節點部署在Docker等容器里面,尤其要注意端口的正確映射
- 哨兵集群+主從復制,并不能保證數據零丟失