Redis的七個核心機制底層原理

一、S_DOWN和O_DOWN

? S_DOWN和O_DOWN兩種宕機狀態(tài)

(1)、S_DOWN是主觀宕機,就一個哨兵如果自己覺得一個master宕機了,那么就是主觀宕機<br> sdown達成的條件很簡單,如果一個哨兵ping一個master,超過了is-master-down-after-milliseconds指定的毫秒數(shù)之后,就主觀認為master宕機<br>

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、柳北網(wǎng)站維護、網(wǎng)站推廣。

# 語法:sentinel down-after-milliseconds <master-name> <milliseconds>
# Number of milliseconds the master (or any attached replica or sentinel) should
# be unreachable (as in, not acceptable reply to PING, continuously, for the
# specified period) in order to consider it in S_DOWN state (Subjectively Down).
# 意思是任何從節(jié)點或者哨兵在指定的時間內(nèi),不能ping通主機就被認為成S_DOWN

(2)、O_DOWN是客觀宕機,如果quorum數(shù)量的哨兵都覺得一個master宕機了,那么就是客觀宕機

?注意:S_DOWN到O_DOWN轉(zhuǎn)換的條件很簡單,如果一個哨兵在指定時間內(nèi),收到了quorum指定數(shù)量的其他哨兵也認為那個master是S_DOWN了,那么就認為是O_DOWN了
# 語法:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# Tells Sentinel to monitor this master, and to consider it in O_DOWN
# (Objectively Down) state only if at least <quorum> sentinels agree.
# 意思是:告訴Sentinel監(jiān)視這個master,如果至少quorum 數(shù)量的哨兵同意的話就變成了
# 客觀宕機

二、哨兵集群的自動發(fā)現(xiàn)機制

1、哨兵互相之間的發(fā)現(xiàn),是通過redis的pub/sub系統(tǒng)實現(xiàn)的,每個哨兵都會往sentinel:hello這個channel里發(fā)送一個消息,這時候所有其他哨兵都可以消費到這個消息,并感知到其他的哨兵的存在。
2、每隔兩秒鐘,每個哨兵都會往自己監(jiān)控的某個master+slaves對應(yīng)的sentinel:hello channel里發(fā)送一個消息,內(nèi)容是自己的host、ip和runid還有對這個master的監(jiān)控配置,每個哨兵也會去監(jiān)聽自己監(jiān)控的每個master+slaves對應(yīng)的sentinel:hello channel,然后去感知到同樣在監(jiān)聽這個master+slaves的其他哨兵的存在。?
3、每個哨兵還會跟其他哨兵交換對master的監(jiān)控配置,互相進行監(jiān)控配置的同步。

三、slave配置的自動糾正

??哨兵會負責(zé)自動糾正slave的一些配置,比如slave如果要成為潛在的master候選人,哨兵會確保slave在復(fù)制現(xiàn)有master的數(shù)據(jù); 如果slave連接到了一個錯誤的master上,比如故障轉(zhuǎn)移之后,那么哨兵會確保它們連接到正確的master上

四、從機變主機的選舉算法

如果一個master被認為O_DOWN了,而且majority哨兵都允許了主備切換,那么某個哨兵就會執(zhí)行主備切換操作,此時首先要選舉一個slave來會考慮slave的一些信息: ?
(1)跟master斷開連接的時長
(2)slave優(yōu)先級
(3)復(fù)制offset
(4)run id

如果一個slave跟master斷開連接已經(jīng)超過了down-after-milliseconds的10倍,外加master宕機的時長,那么slave就被認為不適合選舉為master

(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

接下來會對slave進行排序

(1)按照slave優(yōu)先級進行排序,replica-priority越低,優(yōu)先級就越高,下面的英文就是這個的解釋:

# The replica priority is an integer number published by Redis in the INFO output.
# It is used by Redis Sentinel in order to select a replica to promote into a
# master if the master is no longer working correctly.
#
# A replica with a low priority number is considered better for promotion, so
# for instance if there are three replicas with priority 10, 100, 25 Sentinel will
# pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the replica as not able to perform the
# role of master, so a replica with priority of 0 will never be selected by
# Redis Sentinel for promotion.
#
# By default the priority is 100.
replica-priority 100

(2)如果slave priority相同,那么看replica offset,哪個slave復(fù)制了越多的數(shù)據(jù),offset越靠后,優(yōu)先級就越高
(3)如果上面兩個條件都相同,那么選擇一個run id比較小的那個slave

五、quorum和majority

1、每次一個哨兵要做主備切換,首先需要quorum數(shù)量的哨兵認為O_DOWN,然后選舉出一個哨兵來做切換,這個哨兵還得得到majority哨兵的授權(quán),才能正式執(zhí)行切換?
2、如果quorum < majority,比如5個哨兵,majority就是3,quorum設(shè)置為2,那么就3個哨兵授權(quán)就可以執(zhí)行切換,但是如果quorum >= majority,那么必須quorum數(shù)量的哨兵都授權(quán),比如5個哨兵,quorum是5,那么必須5個哨兵都同意授權(quán),才能執(zhí)行切換

六、configuration epoch

??哨兵會對一套redis master+slave進行監(jiān)控,有相應(yīng)的監(jiān)控的配置

1、執(zhí)行切換的那個哨兵,會從要切換到的新master(salve->master)那里得到一個configuration epoch,這就是一個version號,每次切換的version號都必須是唯一的。
2、如果第一個選舉出的哨兵切換失敗了,那么其他哨兵,會等待failover-timeout時間,然后接替繼續(xù)執(zhí)行切換,此時會重新獲取一個新的configuration epoch,作為新的version號。

7、configuraiton傳播

1、哨兵完成切換之后,會在自己本地更新生成最新的master配置,然后同步給其他的哨兵,就是通過之前說的pub/sub消息機制??
2、version號就很重要了,因為各種消息都是通過一個channel去發(fā)布和監(jiān)聽的,所以一個哨兵完成一次新的切換之后,新的master配置是跟著新的version號的
3、其他的哨兵都是根據(jù)版本號的大小來更新自己的master配置的

本文名稱:Redis的七個核心機制底層原理
網(wǎng)頁路徑:http://bm7419.com/article36/igscsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、商城網(wǎng)站、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、小程序開發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)