1. 程式人生 > >Redis 哨兵節點之間相互自動發現機制(自動重寫哨兵節點的配置檔案)

Redis 哨兵節點之間相互自動發現機制(自動重寫哨兵節點的配置檔案)

Redis的哨兵機制中,如果是多哨兵模式,哨兵節點之間也是可以相互感知的,各種搜尋之後出來的是千篇一律的一個基礎配置檔案,
在配置當前哨兵節點的配置檔案中,並沒有配置其他哨兵節點的任何資訊。

如下是一個哨兵節點的配置資訊,可以看到,哨兵與哨兵之間沒有任何配置,死活想不明白,哨兵之間是如何自動識別的。

#sentinel埠
port 26379
#工作路徑,注意路徑不要和主重複
dir "./"
# 守護程序模式
daemonize yes
#關閉保護模式
protected-mode no
# 指明日誌檔名
logfile "./sentinel.log"
#哨兵監控的master,主從配置一樣,這裡只用輸入redis主節點的ip/port和法定人數。
sentinel monitor mymaster 127.0.0.1 6379 2
# master或slave多長時間(預設30秒)不能使用後標記為s_down狀態。
sentinel down-after-milliseconds mymaster 5000
#若sentinel在該配置值內未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。
sentinel failover-timeout mymaster 18000
#設定master和slaves驗證密碼
sentinel auth-pass mymaster root

那麼哨兵節點直接是如何自動發現的呢,或者說從哪裡可以體現出來哨兵節點之間的自動發現呢?
既然會自動識別,因此就懷疑,哨兵節點啟動之後,會將自動將這些資訊記錄到配置檔案中去,試了一把,果不其然。

如下是在Redis主從複製的基礎上,依次啟用三個哨兵節點的後,sentinel.cnf的變化情況
可以發現,當啟用了三個哨兵節點之後,sentinel.cnf配置檔案會被自動重寫,主要有一下幾點,如截圖從#Generated by CONFIG REWRITE開始
1,增加了一個sentinel myid (標識哨兵節點的唯一性)
2,自動追加哨兵節點本身的資訊(這樣哨兵節點之間就會相互自動發現),以及redis資料服務的slave的資訊
3,自動移除主節點的密碼
4,dir 的相對路徑被修改為絕對路徑

可見,Redis的哨兵不僅是Redis自動故障轉義,而且實現了哨兵節點自己的高可用。同時對於密碼之類的資訊,也是在哨兵節點初始化之後自動移除。

主節點自動故障轉移的效果。