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自動故障轉義,而且實現了哨兵節點自己的高可用。同時對於密碼之類的信息,也是在哨兵節點初始化之后自動移除。

 

其實這個哨兵機制的拓撲圖(來自於redis開發與運維),個人感覺如下,各個哨兵節點之間應該是一個“圖”的關系,任何兩個哨兵節點都是互通的。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM