天天看點

Redis哨兵(sentinel)模式搭建

一、Sentinel介紹

之前騷了一波Redis的簡介及應用場景,今天試了下他的哨兵模式;

Sentinel是Redis的高可用性(HA)解決方案,由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,

并在被監視的主伺服器進行下線狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器,然後由新的主伺服器代替已下線的主伺服器繼續處理指令請求。

Redis提供的sentinel(哨兵)機制,通過sentinel模式啟動redis後,自動監控master/slave的運作狀态,基本原理是:心跳機制+投票裁決

監控(Monitoring): Sentinel 會不斷地檢查你的主伺服器和從伺服器是否運作正常。

提醒(Notification): 當被監控的某個 Redis 伺服器出現問題時, Sentinel 可以通過 API 向管理者或者其他應用程式發送通知。

自動故障遷移(Automatic failover): 當一個主伺服器不能正常工作時, Sentinel 會開始一次自動故障遷移操作, 它會将失效主伺服器的其中一個從伺服器更新為新的主伺服器,

并讓失效主伺服器的其他從伺服器改為複制新的主伺服器; 當用戶端試圖連接配接失效的主伺服器時, 叢集也會向用戶端傳回新主伺服器的位址, 使得叢集可以使用新主伺服器代替失效伺服器。

Redis哨兵(sentinel)模式搭建

二、Redis Sentinel搭建

測試采用2個哨兵,1個主redis,2個從redis。

複制5份redis.windows.conf檔案并重命名如下(開發者可根據自己的開發習慣進行重命名):

master.6379.conf 配置:

port 6379

#設定連接配接密碼

requirepass grs

#連接配接密碼

masterauth grs

slave.6380.conf 配置:

port 6380

dbfilename dump6380.rdb

#配置master

slaveof 127.0.0.1 6379

slave.6381.conf 配置:

port 6381

dbfilename dump6381.rdb

sentinel.63791.conf 配置(将原配置檔案清空後添加如下内容)(另一個一樣,隻需要修改下端口):

port 63791

#主master,2個sentinel選舉成功後才有效,這裡的master-1是名稱,在整合的時候需要一緻,這裡可以随便更改

sentinel monitor master-1 127.0.0.1 6379 2

#判斷主master的挂機時間(毫秒),逾時未傳回正确資訊後标記為sdown狀态

sentinel down-after-milliseconds master-1 5000

#若sentinel在該配置值内未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。

sentinel failover-timeout master-1 18000

#身份認證

sentinel auth-pass master-1 grs

#選項指定了在執行故障轉移時, 最多可以有多少個從伺服器同時對新的主伺服器進行同步,這個數字越小,完成故障轉移所需的時間就越長

sentinel parallel-syncs master-1 1

這裡有三個問題需要注意

第一,若通過redis-cli -h 127.0.0.1 -p 6379連接配接,無需改變配置檔案,配置檔案預設配置為bind 127.0.0.1(隻允許127.0.0.1連接配接通路)

若通過redis-cli -h 192.168.180.78 -p 6379連接配接,需改變配置檔案,配置資訊為bind 127.0.0.1 192.168.180.78(隻允許127.0.0.1和192.168.180.78通路)或者将bind 127.0.0.1注釋掉(允許所有遠端通路)

第二,masterauth為所要連接配接的master伺服器的requirepass,如果一個redis叢集中有一個master伺服器,兩個slave伺服器,當master伺服器挂掉時,sentinel哨兵會随機選擇一個slave伺服器充當master伺服器,鑒于這種機制,解決辦法是将所有的主從伺服器的requirepass和masterauth都設定為一樣。

第三,sentinel monitor master-1 127.0.0.1 6379 2 行尾最後的一個2代表什麼意思呢?我們知道,網絡是不可靠的,有時候一個sentinel會因為網絡堵塞而誤以為一個master redis已經死掉了,當sentinel叢集式,解決這個問題的方法就變得很簡單,隻需要多個sentinel互相溝通來确認某個master是否真的死了,這個2代表,當叢集中有2個sentinel認為master死了時,才能真正認為該master已經不可用了。(sentinel叢集中各個sentinel也有互相通信,通過gossip協定)。

按如下循序依次啟動服務

1、redis-server master.6379.conf

Redis哨兵(sentinel)模式搭建

2、redis-server slave.6380.conf

Redis哨兵(sentinel)模式搭建

3、redis-server slave.6381.conf

Redis哨兵(sentinel)模式搭建

4、redis-server sentinel.63791.conf --sentinel(linux:redis-sentinel sentinel.63791.conf)

Redis哨兵(sentinel)模式搭建

5、redis-server sentinel.63792.conf --sentinel(linux:redis-sentinel sentinel.63792.conf)

Redis哨兵(sentinel)模式搭建

檢視master狀态:

Redis哨兵(sentinel)模式搭建

檢視slave狀态:

Redis哨兵(sentinel)模式搭建

檢視sentinel狀态:

Redis哨兵(sentinel)模式搭建

繼續閱讀