為什麼需要 Redis 哨兵?

2022-07-31 04:27:16 字數 1914 閱讀 2976

在說哨兵之前,我們先說下主從複製,redis 的主從複製模式,一旦主節點出現故障無法提供服務,需要人工介入手工將從節點調整為主節點,同時應用端還需要修改新的主節點位址,這種故障轉移的方式對於很多應用場景是不能容忍的。正式由於這個問題,redis 提供了 sentinel(哨兵) 架構來解決這個問題。

redis sentinel 是乙個分布式的架構,它本身也是乙個獨立的 redis 節點,只不過它不儲存資料,只支援部分命令,它能夠自動完成故障發現和故障轉移,並通知應用方,從而實現高可用。redis sentinel 包含若干個 sentinel 節點和 redis 資料節點,每個 sentinel 節點會對資料節點和其他 sentinel 節點進行監控,當發現節點異常時,會對節點做下線標識,如果被標識的是主節點,此時會與其他sentinel 節點進行協商,當大多數sentinel 節點都人為主節點不可達時候,會發起選舉,選出乙個 sentinel 節點來完成自動故障轉移的工作,同時會將這個變化通知給 redis 的應用方。這個過程是完全自動化的,無需人工干預。sentinel 主要提供以下幾個功能:

多個 sentinel 節點來共同判斷故障,可以有效防止誤判,同時如果個別 sentinel 節點不可用,整個 sentinel 節點集合依然是高可用的。

部署說明3 個 sentinel 節點 、1 個主節點 、2 個從節點。部署資料節點

部署 sentinel 節點sentinel 預設 的埠是 26379,這裡我們建立三個 sentinel 節點,埠分別是 26379、26380、26381。

部署 sentinel 節點sentinel 預設 的埠是 26379,這裡我們建立三個 sentinel 節點,埠分別是 26379、26380、26381。

配置說明:

sentinel monitor

當所有節點啟動時候,配置檔案會發生變化,包括:

sentinel down-after-milliseconds配置

每個 sentinel 節點都要定期傳送 ping 命令來判斷 redis 資料節點和其他 sentinel 節點是否可達,如果超過了down-after-milliseconds 配置的時間且沒有有效回覆,則判斷節點不可達。times 單位是毫秒。down-after-milliseconds雖然以為引數,但實際上對 sentinel節點、主節點、從節點的失敗判定同時有效。sentinel parallel-syncs配置:

當sentinel節點集合對主節點故障判定達成一致時,sentinel領導者節點會做故障轉移操作,選出新的主節點,原來的從節點會向新的主節點發起複製操作,parallel-syncs 就是用來限制在一次故障轉移之後,每次向新的主節點發起複製操作的從節點個數。如果這個引數配置的比較大,那麼多個從節 點會向新的主節點同時發起複製操作,儘管複製操作通常不會阻塞主節點, 但是同時向主節點發起複製,必然會對主節點所在的機器造成一定的網路和 磁碟io開銷。

sentinel failover-timeout配置:

failover-timeout通常被解釋成故障轉移超時時間,但實際上它作用於故障轉移的各個階段:

failover-timeout的作用具體體現在四個方面:

部署注意事項

為什麼redis哨兵集群只有2個節點無法正常工作?

哨兵集群必須部署2個以上節點 如果哨兵集群僅僅部署了個2個哨兵例項,quorum 1 m1 r1 s1 s2 configuration quorum 1 master宕機,s1和s2中只要有1個哨兵認為master宕機就可以還行切換,同時s1和s2中會選舉出乙個哨兵來執行故障轉移 同時這個時候,需...

Redis 配置哨兵

關閉兩端 linux 的防火牆 service iptables stop關閉兩端 redis.conf 的受保護機制 protected mode no在從redis 中配置 replicaof 主 redis ip 埠拷貝解壓目錄下的配置檔案 sentinel.conf root admin r...

Redis 配置哨兵

關閉兩端 linux 的防火牆 service iptables stop關閉兩端 redis.conf 的受保護機制 protected mode no在從redis 中配置 replicaof 主 redis ip 埠拷貝解壓目錄下的配置檔案 sentinel.conf root admin r...