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
參考“https://www.cnblogs.com/knowledgesea/p/6567718.html”中的說法
那麼哨兵節點直接是如何自動發現的呢,或者說從哪裡可以體現出來哨兵節點之間的自動發現呢?
既然會自動識別,因此就懷疑,哨兵節點啟動之後,會將自動將這些信息記錄到配置文件中去,試了一把,果不其然。
如下是在Redis主從複製的基礎上,依次啟用三個哨兵節點的後,sentinel.cnf的變化情況
可以發現,當啟用了三個哨兵節點之後,sentinel.cnf配置文件會被自動重寫,主要有一下幾點,如截圖從#Generated by CONFIG REWRITE開始
1,增加了一個sentinel myid (標識哨兵節點的唯一性)
2,自動追加哨兵節點本身的信息(這樣哨兵節點之間就會相互自動發現),以及redis數據服務的slave的信息
3,自動移除主節點的密碼
4,dir 的相對路徑被修改為絕對路徑
可見,Redis的哨兵不僅是Redis自動故障轉義,而且實現了哨兵節點自己的高可用。同時對於密碼之類的信息,也是在哨兵節點初始化之後自動移除。
主節點自動故障轉移的效果。