Redis哨兵模式

只是甲發表於2020-11-16

哨兵是一個獨立的程式。
原理:哨兵通過傳送命令,等待Redis伺服器響應,從而監控執行的多個Redis例項。

Redis哨兵模式

哨兵的作用:

  • 通過傳送命令,讓Redis伺服器返回監控其執行狀態,包括主伺服器和從伺服器。
  • 當哨兵監測到master當機,會自動將slave切換成master,然後通過釋出訂閱模式通知其他的從伺服器,修改配置檔案,讓它們切換主機。

然而一個哨兵程式對Redis伺服器進行監控,可能會出現問題,為此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。

故障切換(failover)

假設主伺服器當機,哨兵1先檢測到這個結果,系統並不會馬上進行failover過程,僅僅是哨兵1主觀的認為主伺服器不可用,這個現象成為主觀下線。當後面的哨兵也檢測到主伺服器不可用,並且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功後,就會通過釋出訂閱模式,讓各個哨兵把自己監控的從伺服器實現切換主機,這個過程稱為客觀下線。這樣對於客戶端而言,一切都是透明的。

配置哨兵模式

配置3個哨兵和1主2從的Redis伺服器來演示這個過程。

服務型別 是否是主伺服器 IP地址
Redis 192.168.11.128 6379
Redis 192.168.11.129 6379
Redis 192.168.11.130 6379
Sentinel - 192.168.11.128 26379
Sentinel - 192.168.11.129 26379
Sentinel - 192.168.11.130 26379

Redis哨兵模式

多哨兵監控Redis

首先配置Redis的主從伺服器,修改redis.conf檔案如下

# 使得Redis伺服器可以跨網路訪問
bind 0.0.0.0
# 設定密碼
requirepass "123456"
# 指定主伺服器,注意:有關slaveof的配置只是配置從伺服器,主伺服器不需要配置
slaveof 192.168.11.128 6379
# 主伺服器密碼,注意:有關slaveof的配置只是配置從伺服器,主伺服器不需要配置
masterauth 123456

上述內容主要是配置Redis伺服器,從伺服器比主伺服器多一個slaveof的配置和密碼。

配置3個哨兵,每個哨兵的配置都是一樣的。
在Redis安裝目錄下有一個sentinel.conf檔案(複製3份)

# 禁止保護模式
protected-mode no
# 配置監聽的主伺服器,這裡sentinel monitor代表監控,mymaster代表伺服器的名稱,可以自定義,192.168.11.128代表監控的主伺服器,6379代表埠,2代表只有兩個或兩個以上的哨兵認為主伺服器不可用的時候,才會進行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
# sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis伺服器密碼
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

上述關閉了保護模式,便於測試。
有了上述的修改,我們可以進入Redis的安裝目錄的src目錄,通過下面的命令啟動伺服器和哨兵

# 啟動Redis伺服器程式
./redis-server ../redis.conf
# 啟動哨兵程式
./redis-sentinel ../sentinel.conf

注意啟動的順序。首先是主機(192.168.11.128)的Redis服務程式,然後啟動從機的服務程式,最後啟動3個哨兵的服務程式。

參考資料:www.jianshu.com/p/06ab9daf921d

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章