Intro Redis Sentinel

Intro Redis Sentinel

這篇介紹Redis Sentinel.

基本原理和概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1.定時任務:每個Sentinel Node都有3個定時任務,通過這些任務可以發現增刪的 Node和狀態。其任務如下:
a.通過向Master-Slave Node發送 info 命令獲取最新的Master-Slave結構
b.通過發布訂閱功能獲取其它Sentinel Node的資訊
c.通過向其它 Node發送ping命令進行心跳檢測,判斷 Node是否下線

2.主觀下線和客觀下線
主觀下線:在心跳檢測的定時任務中,如果其他 Node超過一定時間沒有回覆,
當前的Sentinel Node就會主觀地將其認定為主觀下線(該 Node不可用)
客觀下線:Sentinel Node對Master Node進行Master觀下線後,會通過 sentinel is-master-down-by-addr
命令詢問其它Sentinel Node該Master Node的狀態;如果判斷Master Node下線的Sentinel數量達到一定數值,
則對該Master Node認定為客觀下線(該 Node不可用)

3.Sentinel領導者選舉:
當Master Node被判斷客觀下線以後,各個Sentinel Node會選出一個Sentinel Node領導者,並由該領導者 Node進行Failover操作

4.Failover:
a. 在Slave Node中選擇新的Master Node:先過濾掉不健康的Slave Node,接著選擇的原則(順序)是
i. 選擇 slave-priority 優先級最高的Slave Node
ii. 選擇複製偏移量最大的Slave Node
iii. 選擇 runid 最小(最早啟動)的Slave Node

b. 更新Master-Slave狀態:
新的Master Node選出後,會將其餘的 Node更新為此新Master Node的Slave Node;另外若原先的Master Node重新上線後,會成為此新Master Node的Slave Node

c. 通知客戶端:
Node狀態更新後, sentinel 會通知客戶端 Node變更訊息,客戶端也會重新連結到新的Master Node

經由上述幾個的概念,我們可以大致上了解工作原理。