redis sentinel(哨兵)
- Sentinel原理
- Sentinel 監視流程
- sentinel檢查下線
- 主觀下線:
- 客觀下線:
- 故障轉移:
- 選舉領頭sentinel:
- 故障轉移
Sentinel是redis高可用的方案,通過設立一個或多個Sentinel監視服務器,可以在主服務器下線的時候及時選舉切換到從服務器,保證可用性。
Sentinel本身也是服務器,只是運行在特殊模式下,監聽其他服務器而已。
Sentinel原理
sentinel 是通過定時檢查主服務器和從服務器的在線狀態,如果主服務器不在線,則選舉一個從服務器做主。
Sentinel 監視流程
sentinel檢查下線
主觀下線:
sentinel默認每秒一次,向它監視的實例(主服務器,從服務器,sentinel)發送ping命令,如果實例沒有在down_after_period時間內返回響應,或者返回了PONG、LOADING、MASTERDOWN這三個響應之外的響應,則認定該實例主觀下線。實例對應flags打開SRI_S_DOWN標識.需要注意的是:幾個sentinel的down_after_period時間設置的也許不同,這時,幾個sentinel監視的服務器主觀下線的狀態可能也會不同。down_after_period屬性只對一個sentinel下監聽的所有主服務器,從服務器和其他sentinel有效。
客觀下線:
一個sentinel認為服務器下線了,是主觀下線,需要多個服務器投票,超過quorum個,才會認為這個服務器真的下線了,這是客觀下線。
當sentinel發現主服務器主觀下線后,將向其他sentinel發送SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>命令。如果回應也認同下線,并且回應數量超過quorum,則認為主服務器客觀下線,flags打開標識SRI_O_DOWN。需要注意的是,多個sentinel之間,判斷客觀下線的quorum可能不同,加上它們判斷主觀下線的時間也不同。最后sentinel判斷下線,可能并不那么簡單。
故障轉移:
為了將下線的主服務器換下,將從服務器換上,故障轉移需要完成:選舉領頭sentinel、選舉新的主服務器,修改從服務器復制的目標到新的主服務器,將舊的主服務器變為從服務器幾步操作。
選舉領頭sentinel:
領頭sentinel將會主導后續流程。sentinel選舉的規則即為Raft領頭選舉算法:
1. 每個認定主服務器客觀下線的sentinel都有機會稱為領頭,它們都將發送向其他sentinel發送SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>命令。
其中如果runid不為*,而是源sentinel的runid的話,說明源sentinel要求接收方將自己設為領頭sentinel。接收sentinel將會返回一條命令回復,其中leader_runid和leader_epoch記錄了接收sentinel認為的領頭sentinel的runid和紀元
2. 領頭sentinel選舉是先到先得的,最先發起命令的被接受,其后的將拒絕
3. 如果一個sentinel被半數以上的sentinel設為了領頭sentinel(通過命令回復的leader_runid統計),則這個sentinel稱為這一輪的領頭sentinel。
4. 如果一輪選舉后未有超過半數認可的sentinel,則epoch計數加1,進行下一輪選舉,直至選出
故障轉移
總結
以上是生活随笔為你收集整理的redis sentinel(哨兵)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连续被爆押金退款难 共享汽车会否走向和
- 下一篇: 怎么关闭计算机139端口,如何关闭135