非原創(chuàng),記錄。
Sentinel(哨兵)是用于監(jiān)控redis集群中Master狀態(tài)的工具,其已經(jīng)被集成在redis2.4+的版本中
Sentinel作用:
1):Master狀態(tài)檢測
2):如果Master異常,則會進(jìn)行Master-Slave切換,將其中一個Slave作為Master,將之前的Master作為Slave
3):Master-Slave切換后,master_redis.conf、slave_redis.conf和sentinel.conf的內(nèi)容都會發(fā)生改變,即master_redis.conf中會多一行slaveof的配置,sentinel.conf的監(jiān)控目標(biāo)會隨之調(diào)換
Sentinel工作方式:
1):每個Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實(shí)例發(fā)送一個 PING 命令
2):如果一個實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時間超過 down-after-milliseconds 選項(xiàng)所指定的值, 則這個實(shí)例會被 Sentinel 標(biāo)記為主觀下線。
3):如果一個Master被標(biāo)記為主觀下線,則正在監(jiān)視這個Master的所有 Sentinel 要以每秒一次的頻率確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài)。
4):當(dāng)有足夠數(shù)量的 Sentinel(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài), 則Master會被標(biāo)記為客觀下線
5):在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率向它已知的所有Master,Slave發(fā)送 INFO 命令
6):當(dāng)Master被 Sentinel 標(biāo)記為客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發(fā)送 INFO 命令的頻率會從 10 秒一次改為每秒一次
7):若沒有足夠數(shù)量的 Sentinel 同意 Master 已經(jīng)下線, Master 的客觀下線狀態(tài)就會被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回復(fù), Master 的主觀下線狀態(tài)就會被移除。
主觀下線和客觀下線
主觀下線:Subjectively Down,簡稱 SDOWN,指的是當(dāng)前 Sentinel 實(shí)例對某個redis服務(wù)器做出的下線判斷。
客觀下線:Objectively Down, 簡稱 ODOWN,指的是多個 Sentinel 實(shí)例在對Master Server做出 SDOWN 判斷,并且通過 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下線判斷,然后開啟failover.
通俗來講就是:
redis的sentinel系統(tǒng)用來管理多個redis服務(wù)器,可以實(shí)現(xiàn)一個功能上實(shí)現(xiàn)HA的集群。該系統(tǒng)主要執(zhí)行三個任務(wù):
①監(jiān)控( Monitoring ): Redis Sentinel實(shí)時監(jiān)控主服務(wù)器和從服務(wù)器運(yùn)行狀態(tài)。
②提醒(notification): 當(dāng)被監(jiān)控的某個 Redis 服務(wù)器出現(xiàn)問題時, Redis Sentinel 可以向系統(tǒng)管理員發(fā)送通知, 也可以通過 API 向其他程序發(fā)送通知
一個簡單的主從結(jié)構(gòu)加sentinel集群的圖
上圖是一主一從節(jié)點(diǎn),加上兩個部署了sentinel的集群,sentinel集群之間會互相通信,溝通交流redis節(jié)點(diǎn)的狀態(tài),做出相應(yīng)的判斷并進(jìn)行處理,這里的主觀下線狀態(tài)和客觀下線狀態(tài)是比較重要的狀態(tài),它們決定了是否進(jìn)行故障轉(zhuǎn)移
可以 通過訂閱指定的頻道信息,當(dāng)服務(wù)器出現(xiàn)故障得時候通知管理員
客戶端可以將 Sentinel 看作是一個只提供了訂閱功能的 Redis 服務(wù)器,你不可以使用 PUBLISH 命令向這個服務(wù)器發(fā)送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通過訂閱給定的頻道來獲取相應(yīng)的事件提醒。
一個頻道能夠接收和這個頻道的名字相同的事件。 比如說, 名為 +sdown 的頻道就可以接收所有實(shí)例進(jìn)入主觀下線(SDOWN)狀態(tài)的事件。