redis哨兵

哨兵的作用就是監控主數據庫和從數據庫是否宕機,當主數據庫出現故障的時候,會先將從數據庫轉換成主數據庫,將其故障恢復後,成爲新主數據庫的從數據庫

redis-sentinel /etc/redis-sentinel.conf

當主數據庫出現故障後,哨兵對主數據庫進行判斷,判斷其是否客觀下線,如果客觀下線,則開始進行領頭哨兵的選擇

領頭哨兵的選擇:

哨兵A發現主數據庫發生故障,這時他認爲主數據庫主觀下線,他會詢問其他的從數據庫,如果有超過半數以上的哨兵認爲主數據庫主觀下線,則A會認爲主數據庫客觀下線。

當他發現主數據庫客觀下線之後,會向每個哨兵發送命令,要求對方選自己成爲領頭哨兵,如果目標哨兵沒有選擇其他哨兵,則會選擇A爲領頭哨兵,如果有超過半數的哨兵選擇A爲領頭哨兵,則A會成爲領頭哨兵。

當有多個哨兵同事選擇成爲領頭哨兵的時候,可能會出現沒選擇出領頭哨兵 的可能,這時會需要判斷:

1.slave-priority(每個從數據庫可以有他自己的配置文件)優先級高的成爲領頭哨兵

2.如果優先級相同,則會選擇偏移量比較大的,也就是複製的比較全的

3.再不行,就選擇哨兵ID小的


每個哨兵會和所有的數據庫建立兩條連接,會和其他的所有哨兵建立一條連接

這時,他會執行三步:

1.每隔10秒,會向主數據庫和從數據庫發送INFO命令。作用是獲得數據庫的信息,監控是否有新的從數據庫進來

2.每隔2秒,會向__sentinel__:hello發送自己的信息。作用是當其他的哨兵接收到消息之後,會判斷這個哨兵是否是新的哨兵,如果是,加入哨兵列表,並建立連接

3.每隔1秒,會想主數據庫和從數據庫發送一條ping命令,監控這個數據庫。sentinel down-after-millseconds mymaster 毫秒數

這個命令的作用是,每隔多長時間向數據庫發送ping命令,如果這個毫秒數超過一秒,按照一秒算。

當有數據庫超過時間沒有回覆,則哨兵認爲該數據庫主觀下線,如果是主數據庫,則會考慮是否對其進行故障恢復,哨兵發送SENTINEL is-master-down-by-addr命令詢問其他的哨兵,如果有超過半數的哨兵認爲其是主觀下線,則該哨兵會認爲該主數據庫是客觀下線,這時就需要對其執行故障恢復,接下來就是選擇領頭哨兵

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