如何在 CentOS 8 中使用 Sentinel 为高可用性设置 Redis – 第 2 部分

Redis 透過 Redis Sentinel 分散式系統提供高可用性。 Sentinel 有助於監控 Redis 實例,檢測故障並將角色自動切換,從而使 Redis 部署能夠抵抗任何類型的故障。

它具有監控 Redis 實例(主和副本)的功能,支持通過腳本通知其他服務/進程或系統管理員,當主機故障時自動故障轉移以將副本提升為主機,並為客戶端提供配置以發現提供特定服務的當前主機。

本文演示了如何在 CentOS 8 中使用 Redis Sentinel 設置高可用性的 Redis,包括配置 sentinel、檢查設置狀態和測試 Sentinel 故障轉移。

先決條件:

  1. 如何在 CentOS 8 中設置 Redis 複製(關閉集群模式)- 第 1 部分

測試環境設置

Master Server and Sentinel1: 10.42.0.247
Redis Replica1 and Sentinel2: 10.42.0.21
Redis Replica2 and Sentinel3: 10.42.0.34
Redis Sentinel Setup Logical Diagram

根據Redis Sentinel的文件,至少需要三個Sentinel實例才能進行穩健部署。考慮到我們上面的設置,如果主節點失敗,Sentinels2Sentinel3將會同意該故障並能夠授權故障轉移,使客戶端操作能夠繼續。

步驟1:啟動並啟用Redis Sentinel服務

1.CentOS 8上,Redis Sentinel服務是與Redis服務器一起安裝的(我們已經在Redis複製設置中完成了這一點)。

要啟動Redis哨兵服務並使其在系統啟動時自動啟動,請使用以下systemctl命令。同時,通過檢查其狀態來確認它是否正在運行(在所有節點上執行此操作):

# systemctl start redis-sentinel
# systemctl enable redis-sentinel
# systemctl status redis-sentinel
Start Redis Sentinel Service

步驟2:在所有Redis節點上配置Redis Sentinel

2.在本節中,我們將解釋如何在所有節點上配置SentinelSentinel服務的配置格式與Redis服務器類似。要配置它,請使用/etc/redis-sentinel.conf自記錄配置文件。

首先,創建原始文件的備份並打開它進行編輯。

# cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig
# vi /etc/redis-sentinel.conf

3. 預設情況下,Sentinel 監聽 26379 端口,在所有實例上驗證這一點。請注意,您必須將 bind 參數保留為注釋狀態(或設置為 0.0.0.0)。

port 26379
Set Sentinel Listen Interface and Port

4. 接下來,告訴 Sentinel 監控我們的 master,並且只有至少有2個法定人數的sentinel同意時,才考慮它處於“客觀下線”狀態。您可以用自定義名稱替換“mymaster”。

#On Master Server and Sentinel1
sentinel monitor mymaster 127.0.0.1 6379 2

#On Replica1 and Sentinel2
sentinel monitor mymaster 10.42.0.247 6379 2

#On Replica1 and Sentinel3
sentinel monitor mymaster 10.42.0.247 6379 2
Set Redis Master to Monitor

重要:sentinel 監控語句必須放在 sentinel auth-pass 語句之前,以避免在重啟 sentinel 服務時出現“沒有指定名稱的 master。”錯誤。

5. 如果要監控的 Redis master 設置了密碼(在我們的案例中,master 設置了),請提供密碼,以便 Sentinel 實例可以與受保護的實例進行身份驗證。

 
sentinel auth-pass mymaster Securep@55Here
Set Master Auth Password

6. 然後設置 master(或任何附加的副本或sentinel)應該不可達的毫秒數,以考慮它處於“主觀下線”狀態。

以下配置意味著,只要我們在5秒內沒有收到任何來自我們ping的回复,就會認為 master 出現故障(1秒相當於1000毫秒)。

sentinel down-after-milliseconds mymaster 5000
Set Down Time for Master

7. 接下來,設置故障轉移超時的毫秒數,這定義了很多事情(閱讀配置文件中該參數的文檔)。

sentinel failover-timeout mymaster 180000
Set Fail Over Timeout

8. 然後設定在同一時間內可以重新配置以使用新主節點的副本數量。由於我們有兩個副本,我們將設定一個副本,因為另一個將被提升為新的主節點。

sentinel parallel-syncs mymaster 1
Set Number of Parallel Sync Replicas

請注意,Redis 副本1哨兵2,以及Redis 副本1哨兵2的配置文件應該是相同的。

9. 接下來,重新啟動所有節點上的哨兵服務以應用最近的更改。

# systemctl restart redis-sentinel

10. 接下來,在所有節點上的防火牆中開放26379端口,以便哨兵實例開始通話,使用 firewall-cmd 從其他哨兵實例接收連接。

# firewall-cmd --zone=public --permanent --add-port=26379/tcp
# firewall-cmd --reload

11. 所有副本將自動被發現。重要的是,哨兵將自動更新配置,添加有關副本的額外信息。您可以通過打開每個實例的哨兵配置文件並查看它來確認這一點。

例如,當您查看主節點配置文件的末尾時,您應該會看到已知哨兵已知副本語句,如下圖所示。

Auto Generated Config in Master

副本1副本2上也應該是同樣的情況。

Auto Generated Config in Replica1
Auto Generated Config in Replica2

請注意,每次副本在故障轉移期間被提升為主節點狀態以及每次在設置中發現新的哨兵時,哨兵配置也會被重寫/更新。

第三步:檢查 Redis Sentinel 設定狀態

12. 現在檢查主機上的 Sentinel 狀態/資訊,使用以下的 info sentinel 指令。

# redis-cli -p 26379 info sentinel

從以下截圖中看到的指令輸出,我們有兩個副本/從屬者和三個 Sentinel。

Check Sentinel Info on Master

13. 要顯示有關主機(名為 mymaster)的詳細信息,使用 sentinel master 指令。

# redis-cli -p 26379 sentinel master mymaster
Show Detailed Info About Sentinel Master

14. 要顯示有關從屬者和 Sentinel 的詳細信息,分別使用 sentinel slaves 指令和 sentinel sentinels 指令。

# redis-cli -p 26379 sentinel slaves mymaster
# redis-cli -p 26379 sentinel sentinels mymaster

15. 接下來,使用 sentinel get-master-addr-by-name 指令從從屬者實例中按名稱查詢主機的地址。

輸出應該是當前主機實例的 IP 地址和端口:

# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
Get the Address of Master by Name on Slaves

第四步:測試 Sentinel 故障切換

16. 最後,讓我們在 Sentinel 設定中測試自動故障切換。在 Redis/Sentinel 主機上,讓 Redis 主機(運行在端口 6379)休眠 60 秒。然後按以下方式查詢副本/從屬者上當前主機的地址。

# redis-cli -p 6379
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379>  debug sleep 60
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

從查詢的輸出中,新主機現在是副本/從屬者2,IP 地址為 10.42.0.34,如以下截圖所示。

Test Redis Sentinel Failover

您可以從Redis Sentinel文件中獲取更多信息。如果您有任何想法要分享或查詢,下面的反饋表是您與我們聯繫的途徑。

在本系列的下一篇也是最後一篇文章中,我們將探討如何在CentOS 8中設置Redis集群。它將是一篇獨立於前兩篇的文章。

Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/