iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
Software Development

Redis還在學系列 第 24

Day24 Redis架構實戰-Sentinel叢集架構

  • 分享至 

  • xImage
  •  

sentinel.conf

# 高可用配置搭配Sentinel機制
                           --->   Redis (Replica)
client ---> Redis (Master)
                           --->   Redis (Replica)
-------------------------------------------------
                sentinel
  • 依照以上的配置,Master與Replica間會自動同步資料,Sentinel則為持續的監控Master是否正常,當Master掛掉時,會把Replica依照優先權與健康程度選取合適的切換為Master提供用戶端服務.但是目前Sentinel只有一台,代表如果Sentinel掛掉的時候又會發生單點異常造成整個Redis 服務不會自動切換Master,而造成服務因此中斷的問題,故在正式環境中建議sentinel也是要有叢集的配置.
# 高可用配置搭配Sentinel叢集架構
                           --->   Redis (Replica)
client ---> Redis (Master)
                           --->   Redis (Replica)
-------------------------------------------------
       sentinel    sentinel    sentinel

# 複製三份設定檔,結尾用Port命名
cp sentinel_26379.conf sentinel_26380.conf 
cp sentinel_26379.conf sentinel_26381.conf 

# 修改各個設定檔中的port與monitor需要設定成2,搭配目前redis server (Master) 127.0.0.1 6380
# sentinel_26379.conf
vi sentinel_26379.conf
port 26379
daemonize yes
logfile "/tmp/redis-sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

# sentinel_26380.conf
vi sentinel_26380.conf
port 26380
daemonize yes
logfile "/tmp/redis-sentinel_26380.log"
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

# sentinel_26381.conf
vi sentinel_26381.conf
port 26381
daemonize yes
logfile "/tmp/redis-sentinel_26381.log"
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

# 啟動三個sentinel
./redis-sentinel sentinel_26379.conf
./redis-sentinel sentinel_26380.conf
./redis-sentinel sentinel_26381.conf

# 確認是否正常運作
ps -ef|grep redis-se

https://ithelp.ithome.com.tw/upload/images/20211009/2011165897duG4ZZXw.png

  • 實際Sentinel Monitor 運作機制
    • 每10秒,每個Sentinel 會對Redis Server的Master與Replica連接並送出info取得目前狀態
    • 每2秒,每個Sentinel 會對Redis Server的Master連接並通過channel做pub/sub來測試是否服務正常
    • 每1秒,每個Sentinel 會對Redis Server的Master與Replica,還有自身以外的Sentinel進行ping的動作

https://ithelp.ithome.com.tw/upload/images/20211009/201116587Cw44my32H.png

  • 為什麼sentinel monitor 組態需要特別設定2個以上(多數) 的sentinel才可以決定選出新的Redis Server 的Master,因為有可能因爲網路的延遲造成某個sentinel監控Redis Server Master時發生誤判,進而直接就切換到了別台Redis Master.

  • Master離線機制

    • 主觀離線
      • 由某個Sentinel偵測到Master離線,並會要求其他Sentinel偵測是否Master已經離線.
    • 客觀離線
      • 當多個Sentinel偵測Master離線的數量達到Sentinel Monitor設定的quorun數量時,則會進行選舉Replice切換Master的機制.
      • 首先多個Sentinel之間會先選出Sentinel Leader的角色來進行後續的動作,某個Sentinel偵測到Master離線時,會向其他Sentinel發起投票要求選自己成為Sentinel Leader,需要達到設定的quorun數量才會完成此次選舉,當結果選出多個Leader時,則會重新選舉直到選出唯一的Sentinel Leader.

上一篇
Day23 Redis架構實戰-Sentinel組態檔設定
下一篇
Day25 Redis架構實戰-Sentinel選取Replica機制
系列文
Redis還在學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言