這篇文章主要介紹Redis高可用架構 Redis Sentinel,分别從它是什麼,為什麼使用,自動化過程以及部署等幾個方面說明。
Redis Sentinel 是什麼?
Redis Sentinel是Redis的高可用實作方案,是一個分布式架構,包含了若幹個Sentinel節點和Redis資料節點,每個Sentinel節點會對資料節點和其他Sentinel節點進行監控,當發現節點不可用時,程式會進行自動化處理,不需要人工介入,進而高效解決了Redis的高可用問題。
為什麼要使用?
傳統的主從複制模式将主節點資料改變同步給從節點,這樣作用有兩個:
- 作為主節點出現故障的備份
- 降低主節點的「讀」壓力
在主從複制模式下,一旦主節點出現故障,這個過程中需要人工幹預進行故障轉移,由于人工幹預實時性無法得到保證,并且操作過程也容易出現錯誤,增加了整個過程的不便。是以需要引入一個高可用的架構來自動化轉移的整個過程。
自動化過程
轉移過程同主從複制人工幹預邏輯一樣,這裡面我們先看人工幹預過程:
- 主節點(M)故障,從節點(S1,S2)複制中斷。
- 執行
選一個S1從節點作為新節點。slaveof no one
- 更新用戶端redis連結到新的主節點S1,重新開機
- 從節點S2開始複制主節點S1資料,等待曾經的主節點M恢複,去複制新的主節點S1資料。
Redis sentinel和主從模式差別隻是增加Sentinel節點進行Redis節點監控。
- 如圖每個Sentinel節點通過定時監控發現主節點出現故障(主關下線)
- 多個Sentinel節點對主節點故障達成一緻,選出一個上司者負責故障轉移
- 轉移資料過程同上面「人工幹預」邏輯一緻,隻是是自動化的。
- 轉移完成後,節點slave-1(或者slave-2)變為主節點,原來的master 變為從節點
從上面看出Redis Sentinel具有監控通知,主節點故障轉移,提供配置(用戶端連接配接Sentinel節點)等功能。
部署上線
這裡我們部署架構使用3個Sentinel節點,1個主節點,2個從節點,組成Redis Sentinel架構。
- 首先我們正常啟動master,slave節點
- 配置sentinel conf 檔案
配置檔案redis_sentinel.conf如下:
port 26379
bind 10.xx.xx.xx
sentinel monitor mymaster 10.xx.xx.xx 6379 2
# 表示配置需要監控10.xx.xx.xx:6379
# 2表示至少需要2個Sentinel節點統一,
# mymaster是主節點别名,防止挂了也可以找到主節點
sentinel auth-pass mymaster password # 需要的密碼
sentinel config-epoch mymaster 0 #确認mymater SDOWN時長
sentinel down-after-milliseconds mymaster 5000
# mymaster多久不響應認為SDOWN
sentinel failover-timeout mymaster 60000
# 2次failover切換時間
dir "/etc/redis" # 定義目錄存放
daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
- 做service啟動腳本redis-sentinel.sh放在
/etc/init.d/
- 并且該腳本可執行
sudo service redis-sentinel start
一些建議
- Redis Sentinel的所有節點應該分布在不同的實體機上。