Redis之sentinel

sentinel是redis 高可用的一種架構,主要是由多個sentinel組成監視系統,可以監視多個主從服務器,在他們下線的時候 進行自動切換升級。

sentinel啓動的時候和啓動主從並無特別大的區別

sentinel 每隔10秒向主服務器發送心跳,通過命令監視返回主服務器的INFO信息,主要由兩個作用:

1、監控master是否存活

2、解析返回的INFO信息,並且把其中有關slave的信息存到sentinel的字典中。

當sentinel發現主服務器中有新的從服務器的時候,會爲這個從服務器創建對應的實例結構並且創建對從的連接。

主觀下線:

所謂的主觀下線:就是發起ping的sentinel在down-after-milliseonds之後仍沒有收到響應的請求就認爲該服務下線了。down-after-milliseconds 對master、slave、其他的sentinel都有效。

客觀下線:

當一個sentinel將主服務器判定爲主觀下線後,他會向同時監控這個主服務器的其他sentinel發一條命令詢問他們的意思,看是不是也判定爲下線,主要夠一定數量就被標記爲客觀下線,數量主要是由sentinel monitor master 127.0.0.1 6379 5 其中這個5代表5個sentinel返回下線。

要講終點了。

當某個master被標記爲客觀下線,總要要充當該角色的服務器,此時,這幫sentinel會重新協商,選出一個sentinel牽頭完成新master的選舉工作。

那麼就有了選舉sentinel的規則:

當認爲主服務器已經下線,這時

1、每個sentinel都會向其他的sentinel發送一個is-master-down-by-addr,在這個命令裏面包含了自己的run_id.

2、每個收到請求命令的sentinel只會檢測自己是否已經把寶貴的一票投給了其他sentinel,如果沒有則投給該sentinel,並且把自己的配置紀元(就是個計數器)加1,每次選舉只能投1票。

3、在給定的時間內,投票完畢後,每個sentinel各自統計得票,得票一半以上的將勝出成爲牽頭人。如果沒有的話。就再次選舉,直到選舉出來爲止。

在選舉出來sentinel後,下一步要從下線的主服務器的從節點中找出來一臺升級爲主,開始故障轉移。

選主的條件:

1、刪除sentinel自己的字典中已經下線的從服務器

2、刪除上時間沒有跟自己互動的從服務器(機器的世界也講跟領導的關係)

3、刪除所有跟下線主服務器斷開連接超過down-after-milliseconds * 10 的從服務器

4、選擇跟主服務器斷開時間最短的從服務器或者偏移量最大的升級爲主服務器

選出來新主後,把角色改爲主,並且通知所有的從修改其配置,從新的主節點同步數據。

此外還要監控剛剛被客觀下線的主服務器,等他上線後,修改他的配置爲從。讓他向新的主服務器稱臣並且同步。

所以說,江湖險惡,遠離是非是不可能的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章