欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制

 更新時(shí)間:2023年07月07日 08:52:58   作者:勤天  
這篇文章主要介紹了Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制, Sentinel 是一款面向分布式服務(wù)架構(gòu)的輕量級(jí)流量控制組件,主要以流量為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)自適應(yīng)保護(hù)等多個(gè)維度來(lái)保障服務(wù)的穩(wěn)定性,需要的朋友可以參考下

一、sentinel介紹

        Redis-Sentinel(sentinel [?sent?nl])是Redis官方推薦的高可用性(HA)解決方案,當(dāng)用Redis做Master-slave的高可用方案時(shí),假如master宕機(jī)了,Redis本身(包括它的很多客戶端)都沒(méi)有實(shí)現(xiàn)自動(dòng)進(jìn)行主備切換,而Redis-sentinel本身也是一個(gè)獨(dú)立運(yùn)行的進(jìn)程,它能監(jiān)控多個(gè)master-slave集群,發(fā)現(xiàn)master宕機(jī)后能進(jìn)行自動(dòng)切換。

它的主要功能有以下幾點(diǎn)

不時(shí)地監(jiān)控redis是否按照預(yù)期良好地運(yùn)行;如果發(fā)現(xiàn)某個(gè)redis節(jié)點(diǎn)運(yùn)行出現(xiàn)狀況,能夠通知另外一個(gè)進(jìn)程(例如它的客戶端);能夠進(jìn)行自動(dòng)切換。當(dāng)一個(gè)master節(jié)點(diǎn)不可用時(shí),能夠選舉出master的多個(gè)slave(如果有超過(guò)一個(gè)slave的話)中的一個(gè)來(lái)作為新的master,其它的slave節(jié)點(diǎn)會(huì)將它所追隨的master的地址改為被提升為master的slave的新地址。

二、Sentinel支持集群

很顯然,只使用單個(gè)sentinel進(jìn)程來(lái)監(jiān)控redis集群是不可靠的,當(dāng)sentinel進(jìn)程宕掉后(sentinel本身也有單點(diǎn)問(wèn)題,single-point-of-failure)整個(gè)集群系統(tǒng)將無(wú)法按照預(yù)期的方式運(yùn)行。所以有必要將sentinel集群,這樣有幾個(gè)好處:

即使有一些sentinel進(jìn)程宕掉了,依然可以進(jìn)行redis集群的主備切換;如果只有一個(gè)sentinel進(jìn)程,如果這個(gè)進(jìn)程運(yùn)行出錯(cuò),或者是網(wǎng)絡(luò)堵塞,那么將無(wú)法實(shí)現(xiàn)redis集群的主備切換(單點(diǎn)問(wèn)題);如果有多個(gè)sentinel,redis的客戶端可以隨意地連接任意一個(gè)sentinel來(lái)獲得關(guān)于redis集群中的信息。

三、關(guān)于Sentinel版本

Sentinel當(dāng)前最新的穩(wěn)定版本稱為Sentinel 2(與之前的Sentinel 1區(qū)分開(kāi)來(lái))。隨著redis2.8的安裝包一起發(fā)行。安裝完Redis2.8后,可以在redis2.8/src/里面找到Redis-sentinel的啟動(dòng)程序。在sentinel 1版本中有很多Bug,不過(guò)現(xiàn)在已經(jīng)到了redis6+版本了

四、運(yùn)行Sentinel

運(yùn)行sentinel有兩種方式:

第一種

redis-sentinel /path/to/sentinel.conf

第二種

redis-server /path/to/sentinel.conf --sentinel

以上兩種方式,都必須指定一個(gè)sentinel的配置文件sentinel.conf,如果不指定,將無(wú)法啟動(dòng)sentinel。sentinel默認(rèn)監(jiān)聽(tīng)26379端口,所以運(yùn)行前必須確定該端口沒(méi)有被別的進(jìn)程占用。

五、Sentinel的配置

Redis源碼包中包含了一個(gè)sentinel.conf文件作為sentinel的配置文件,配置文件自帶了關(guān)于各個(gè)配置項(xiàng)的解釋。

典型的配置項(xiàng)如下所示:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

上面的配置項(xiàng)配置了兩個(gè)名字分別為mymaster和resque的master,配置文件只需要配置master的信息就好啦,不用配置slave的信息,因?yàn)閟lave能夠被自動(dòng)檢測(cè)到(master節(jié)點(diǎn)會(huì)有關(guān)于slave的消息)。

需要注意的是,配置文件在sentinel運(yùn)行期間是會(huì)被動(dòng)態(tài)修改的,例如當(dāng)發(fā)生主備切換時(shí)候,配置文件中的master會(huì)被修改為另外一個(gè)slave。這樣,之后sentinel如果重啟時(shí),就可以根據(jù)這個(gè)配置來(lái)恢復(fù)其之前所監(jiān)控的redis集群的狀態(tài)。

主要參數(shù)解釋如下:

sentinel monitor mymaster 127.0.0.1 6379 2

這一行代表sentinel監(jiān)控的master的名字叫做mymaster,地址為127.0.0.1:6379,行尾最后的一個(gè)2代表什么意思呢?

我們知道,網(wǎng)絡(luò)是不可靠的,有時(shí)候一個(gè)sentinel會(huì)因?yàn)榫W(wǎng)絡(luò)堵塞而誤以為一個(gè)master redis已經(jīng)死掉了,當(dāng)sentinel集群式,解決這個(gè)問(wèn)題的方法就變得很簡(jiǎn)單,只需要多個(gè)sentinel互相溝通來(lái)確認(rèn)某個(gè)master是否真的死了,這個(gè)2代表,當(dāng)集群中有2個(gè)sentinel認(rèn)為master死了時(shí),才能真正認(rèn)為該master已經(jīng)不可用了。(sentinel集群中各個(gè)sentinel也有互相通信,通過(guò)gossip協(xié)議)。

除了第一行配置,我們發(fā)現(xiàn)剩下的配置都有一個(gè)統(tǒng)一的格式:

sentinel <option_name> <master_name> <option_value>

  • down-after-milliseconds

sentinel會(huì)向master發(fā)送心跳PING來(lái)確認(rèn)master是否存活,如果master在“一定時(shí)間范圍”內(nèi)不回應(yīng)PONG 或者是回復(fù)了一個(gè)錯(cuò)誤消息,那么這個(gè)sentinel會(huì)主觀地(單方面地)認(rèn)為這個(gè)master已經(jīng)不可用了(subjectively down, 也簡(jiǎn)稱為SDOWN)。而這個(gè)down-after-milliseconds就是用來(lái)指定這個(gè)“一定時(shí)間范圍”的,單位是毫秒。

不過(guò)需要注意的是,這個(gè)時(shí)候sentinel并不會(huì)馬上進(jìn)行failover主備切換,這個(gè)sentinel還需要參考sentinel集群中其他sentinel的意見(jiàn),如果超過(guò)某個(gè)數(shù)量的sentinel也主觀地認(rèn)為該master死了,那么這個(gè)master就會(huì)被客觀地(注意哦,這次不是主觀,是客觀,與剛才的subjectively down相對(duì),這次是objectively down,簡(jiǎn)稱為ODOWN)認(rèn)為已經(jīng)死了。需要一起做出決定的sentinel數(shù)量在上一條配置中進(jìn)行配置。

  • parallel-syncs

在發(fā)生failover主備切換時(shí),這個(gè)選項(xiàng)指定了最多可以有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步,這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長(zhǎng),但是如果這個(gè)數(shù)字越大,就意味著越多的slave因?yàn)閞eplication而不可用??梢酝ㄟ^(guò)將這個(gè)值設(shè)為 1 來(lái)保證每次只有一個(gè)slave處于不能處理命令請(qǐng)求的狀態(tài)。

所有的配置都可以在運(yùn)行時(shí)用命令SENTINEL SET command動(dòng)態(tài)修改。

六、Sentinel的“仲裁會(huì)”

前面我們談到,當(dāng)一個(gè)master被sentinel集群監(jiān)控時(shí),需要為它指定一個(gè)參數(shù),這個(gè)參數(shù)指定了當(dāng)需要判決master為不可用,并且進(jìn)行failover時(shí),所需要的sentinel數(shù)量,本文中我們暫時(shí)稱這個(gè)參數(shù)為票數(shù)

不過(guò),當(dāng)failover主備切換真正被觸發(fā)后,failover并不會(huì)馬上進(jìn)行,還需要sentinel中的大多數(shù)sentinel授權(quán)后才可以進(jìn)行failover。

當(dāng)ODOWN時(shí),failover被觸發(fā)。failover一旦被觸發(fā),嘗試去進(jìn)行failover的sentinel會(huì)去獲得“大多數(shù)”sentinel的授權(quán)(如果票數(shù)比大多數(shù)還要大的時(shí)候,則詢問(wèn)更多的sentinel)

這個(gè)區(qū)別看起來(lái)很微妙,但是很容易理解和使用。例如,集群中有5個(gè)sentinel,票數(shù)被設(shè)置為2,當(dāng)2個(gè)sentinel認(rèn)為一個(gè)master已經(jīng)不可用了以后,將會(huì)觸發(fā)failover,但是,進(jìn)行failover的那個(gè)sentinel必須先獲得至少3個(gè)sentinel的授權(quán)才可以實(shí)行failover。

如果票數(shù)被設(shè)置為5,要達(dá)到ODOWN狀態(tài),必須所有5個(gè)sentinel都主觀認(rèn)為master為不可用,要進(jìn)行failover,那么得獲得所有5個(gè)sentinel的授權(quán)。

七、配置版本號(hào)

為什么要先獲得大多數(shù)sentinel的認(rèn)可時(shí)才能真正去執(zhí)行failover呢?

當(dāng)一個(gè)sentinel被授權(quán)后,它將會(huì)獲得宕掉的master的一份最新配置版本號(hào),當(dāng)failover執(zhí)行結(jié)束以后,這個(gè)版本號(hào)將會(huì)被用于最新的配置。因?yàn)榇蠖鄶?shù)sentinel都已經(jīng)知道該版本號(hào)已經(jīng)被要執(zhí)行failover的sentinel拿走了,所以其他的sentinel都不能再去使用這個(gè)版本號(hào)。這意味著,每次failover都會(huì)附帶有一個(gè)獨(dú)一無(wú)二的版本號(hào)。我們將會(huì)看到這樣做的重要性。

而且,sentinel集群都遵守一個(gè)規(guī)則:如果sentinel A推薦sentinel B去執(zhí)行failover,A會(huì)等待一段時(shí)間后,自行再次去對(duì)同一個(gè)master執(zhí)行failover,這個(gè)等待的時(shí)間是通過(guò)failover-timeout配置項(xiàng)去配置的。從這個(gè)規(guī)則可以看出,sentinel集群中的sentinel不會(huì)再同一時(shí)刻并發(fā)去failover同一個(gè)master,第一個(gè)進(jìn)行failover的sentinel如果失敗了,另外一個(gè)將會(huì)在一定時(shí)間內(nèi)進(jìn)行重新進(jìn)行failover,以此類推。

redis sentinel保證了活躍性:如果大多數(shù)sentinel能夠互相通信,最終將會(huì)有一個(gè)被授權(quán)去進(jìn)行failover.

redis sentinel也保證了安全性:每個(gè)試圖去failover同一個(gè)master的sentinel都會(huì)得到一個(gè)獨(dú)一無(wú)二的版本號(hào)。

八、配置傳播

一旦一個(gè)sentinel成功地對(duì)一個(gè)master進(jìn)行了failover,它將會(huì)把關(guān)于master的最新配置通過(guò)廣播形式通知其它sentinel,其它的sentinel則更新對(duì)應(yīng)master的配置。

一個(gè)failover要想被成功實(shí)行,sentinel必須能夠向選為master的slave發(fā)送SLAVE OF NO ONE命令,然后能夠通過(guò)INFO命令看到新master的配置信息。

當(dāng)將一個(gè)slave選舉為master并發(fā)送SLAVE OF NO ONE后,即使其它的slave還沒(méi)針對(duì)新master重新配置自己,failover也被認(rèn)為是成功了的,然后所有sentinels將會(huì)發(fā)布新的配置信息。

新配在集群中相互傳播的方式,就是為什么我們需要當(dāng)一個(gè)sentinel進(jìn)行failover時(shí)必須被授權(quán)一個(gè)版本號(hào)的原因。

每個(gè)sentinel使用##發(fā)布/訂閱##的方式持續(xù)地傳播master的配置版本信息,配置傳播的發(fā)布/訂閱管道是:sentinel:hello。

因?yàn)槊恳粋€(gè)配置都有一個(gè)版本號(hào),所以以版本號(hào)最大的那個(gè)為標(biāo)準(zhǔn)。

舉個(gè)栗子:假設(shè)有一個(gè)名為mymaster的地址為192.168.1.50:6379。一開(kāi)始,集群中所有的sentinel都知道這個(gè)地址,于是為mymaster的配置打上版本號(hào)1。一段時(shí)候后mymaster死了,有一個(gè)sentinel被授權(quán)用版本號(hào)2對(duì)其進(jìn)行failover。如果failover成功了,假設(shè)地址改為了192.168.1.50:9000,此時(shí)配置的版本號(hào)為2,進(jìn)行failover的sentinel會(huì)將新配置廣播給其他的sentinel,由于其他sentinel維護(hù)的版本號(hào)為1,發(fā)現(xiàn)新配置的版本號(hào)為2時(shí),版本號(hào)變大了,說(shuō)明配置更新了,于是就會(huì)采用最新的版本號(hào)為2的配置。

這意味著sentinel集群保證了第二種活躍性:一個(gè)能夠互相通信的sentinel集群最終會(huì)采用版本號(hào)最高且相同的配置。

九、SDOWN和ODOWN的更多細(xì)節(jié)

sentinel對(duì)于不可用有兩種不同的看法,一個(gè)叫主觀不可用(SDOWN),另外一個(gè)叫客觀不可用(ODOWN)。SDOWN是sentinel自己主觀上檢測(cè)到的關(guān)于master的狀態(tài),ODOWN需要一定數(shù)量的sentinel達(dá)成一致意見(jiàn)才能認(rèn)為一個(gè)master客觀上已經(jīng)宕掉,各個(gè)sentinel之間通過(guò)命令SENTINEL is_master_down_by_addr來(lái)獲得其它sentinel對(duì)master的檢測(cè)結(jié)果。

從sentinel的角度來(lái)看,如果發(fā)送了PING心跳后,在一定時(shí)間內(nèi)沒(méi)有收到合法的回復(fù),就達(dá)到了SDOWN的條件。這個(gè)時(shí)間在配置中通過(guò)is-master-down-after-milliseconds參數(shù)配置。

當(dāng)sentinel發(fā)送PING后,以下回復(fù)之一都被認(rèn)為是合法的:

PING replied with +PONG.
PING replied with -LOADING error.
PING replied with -MASTERDOWN error.

其它任何回復(fù)(或者根本沒(méi)有回復(fù))都是不合法的。

從SDOWN切換到ODOWN不需要任何一致性算法,只需要一個(gè)gossip協(xié)議:如果一個(gè)sentinel收到了足夠多的sentinel發(fā)來(lái)消息告訴它某個(gè)master已經(jīng)down掉了,SDOWN狀態(tài)就會(huì)變成ODOWN狀態(tài)。如果之后master可用了,這個(gè)狀態(tài)就會(huì)相應(yīng)地被清理掉。

正如之前已經(jīng)解釋過(guò)了,真正進(jìn)行failover需要一個(gè)授權(quán)的過(guò)程,但是所有的failover都開(kāi)始于一個(gè)ODOWN狀態(tài)。

ODOWN狀態(tài)只適用于master,對(duì)于不是master的redis節(jié)點(diǎn)sentinel之間不需要任何協(xié)商,slaves和sentinel不會(huì)有ODOWN狀態(tài)。

十、Sentinel之間和Slaves之間的自動(dòng)發(fā)現(xiàn)機(jī)制

雖然sentinel集群中各個(gè)sentinel都互相連接彼此來(lái)檢查對(duì)方的可用性以及互相發(fā)送消息。但是你不用在任何一個(gè)sentinel配置任何其它的sentinel的節(jié)點(diǎn)。因?yàn)閟entinel利用了master的發(fā)布/訂閱機(jī)制去自動(dòng)發(fā)現(xiàn)其它也監(jiān)控了統(tǒng)一master的sentinel節(jié)點(diǎn)。

通過(guò)向名為_(kāi)_sentinel__:hello的管道中發(fā)送消息來(lái)實(shí)現(xiàn)。

同樣,你也不需要在sentinel中配置某個(gè)master的所有slave的地址,sentinel會(huì)通過(guò)詢問(wèn)master來(lái)得到這些slave的地址的。

每個(gè)sentinel通過(guò)向每個(gè)master和slave的發(fā)布/訂閱頻道__sentinel__:hello每秒發(fā)送一次消息,來(lái)宣布它的存在。 每個(gè)sentinel也訂閱了每個(gè)master和slave的頻道__sentinel__:hello的內(nèi)容,來(lái)發(fā)現(xiàn)未知的sentinel,當(dāng)檢測(cè)到了新的sentinel,則將其加入到自身維護(hù)的master監(jiān)控列表中。 每個(gè)sentinel發(fā)送的消息中也包含了其當(dāng)前維護(hù)的最新的master配置。如果某個(gè)sentinel發(fā)現(xiàn) 自己的配置版本低于接收到的配置版本,則會(huì)用新的配置更新自己的master配置。

在為一個(gè)master添加一個(gè)新的sentinel前,sentinel總是檢查是否已經(jīng)有sentinel與新的sentinel的進(jìn)程號(hào)或者是地址是一樣的。如果是那樣,這個(gè)sentinel將會(huì)被刪除,而把新的sentinel添加上去。

十一、網(wǎng)絡(luò)隔離時(shí)的一致性

redis sentinel集群的配置的一致性模型為最終一致性,集群中每個(gè)sentinel最終都會(huì)采用最高版本的配置。然而,在實(shí)際的應(yīng)用環(huán)境中,有三個(gè)不同的角色會(huì)與sentinel打交道:

  • Redis實(shí)例.
  • Sentinel實(shí)例.
  • 客戶端. 為了考察整個(gè)系統(tǒng)的行為我們必須同時(shí)考慮到這三個(gè)角色。

下面有個(gè)簡(jiǎn)單的例子,有三個(gè)主機(jī),每個(gè)主機(jī)分別運(yùn)行一個(gè)redis和一個(gè)sentinel:

 
             +-------------+
             | Sentinel 1  | <--- Client A
             | Redis 1 (M) |
             +-------------+
                     |
                     |
 +-------------+     |                     +------------+
 | Sentinel 2  |-----+-- / partition / ----| Sentinel 3 | <--- Client B
 | Redis 2 (S) |                           | Redis 3 (M)|
 +-------------+                           +------------+

在這個(gè)系統(tǒng)中,初始狀態(tài)下redis3是master, redis1和redis2是slave。之后redis3所在的主機(jī)網(wǎng)絡(luò)不可用了,sentinel1和sentinel2啟動(dòng)了failover并把redis1選舉為master。

Sentinel集群的特性保證了sentinel1和sentinel2得到了關(guān)于master的最新配置。但是sentinel3依然持著的是就的配置,因?yàn)樗c外界隔離了。

當(dāng)網(wǎng)絡(luò)恢復(fù)以后,我們知道sentinel3將會(huì)更新它的配置。但是,如果客戶端所連接的master被網(wǎng)絡(luò)隔離,會(huì)發(fā)生什么呢?

客戶端將依然可以向redis3寫(xiě)數(shù)據(jù),但是當(dāng)網(wǎng)絡(luò)恢復(fù)后,redis3就會(huì)變成redis的一個(gè)slave,那么,在網(wǎng)絡(luò)隔離期間,客戶端向redis3寫(xiě)的數(shù)據(jù)將會(huì)丟失。

也許你不會(huì)希望這個(gè)場(chǎng)景發(fā)生:

  • 如果你把redis當(dāng)做緩存來(lái)使用,那么你也許能容忍這部分?jǐn)?shù)據(jù)的丟失。
  • 但如果你把redis當(dāng)做一個(gè)存儲(chǔ)系統(tǒng)來(lái)使用,你也許就無(wú)法容忍這部分?jǐn)?shù)據(jù)的丟失了。

因?yàn)閞edis采用的是異步復(fù)制,在這樣的場(chǎng)景下,沒(méi)有辦法避免數(shù)據(jù)的丟失。然而,你可以通過(guò)以下配置來(lái)配置redis3和redis1,使得數(shù)據(jù)不會(huì)丟失。

min-slaves-to-write 1
min-slaves-max-lag 10

通過(guò)上面的配置,當(dāng)一個(gè)redis是master時(shí),如果它不能向至少一個(gè)slave寫(xiě)數(shù)據(jù)(上面的min-slaves-to-write指定了slave的數(shù)量),它將會(huì)拒絕接受客戶端的寫(xiě)請(qǐng)求。由于復(fù)制是異步的,master無(wú)法向slave寫(xiě)數(shù)據(jù)意味著slave要么斷開(kāi)連接了,要么不在指定時(shí)間內(nèi)向master發(fā)送同步數(shù)據(jù)的請(qǐng)求了(上面的min-slaves-max-lag指定了這個(gè)時(shí)間)。

Sentinel狀態(tài)持久化 snetinel的狀態(tài)會(huì)被持久化地寫(xiě)入sentinel的配置文件中。每次當(dāng)收到一個(gè)新的配置時(shí),或者新創(chuàng)建一個(gè)配置時(shí),配置會(huì)被持久化到硬盤(pán)中,并帶上配置的版本戳。這意味著,可以安全的停止和重啟sentinel進(jìn)程。

十二、Sentinel狀態(tài)持久化

snetinel的狀態(tài)會(huì)被持久化地寫(xiě)入sentinel的配置文件中。每次當(dāng)收到一個(gè)新的配置時(shí),或者新創(chuàng)建一個(gè)配置時(shí),配置會(huì)被持久化到硬盤(pán)中,并帶上配置的版本戳。這意味著,可以安全的停止和重啟sentinel進(jìn)程。

十三、無(wú)failover時(shí)的配置糾正

即使當(dāng)前沒(méi)有failover正在進(jìn)行,sentinel依然會(huì)使用當(dāng)前配置去設(shè)置監(jiān)控的master。特別是:

  • 根據(jù)最新配置確認(rèn)為slaves的節(jié)點(diǎn)卻聲稱自己是master(參考上文例子中被網(wǎng)絡(luò)隔離后的的redis3),這時(shí)它們會(huì)被重新配置為當(dāng)前master的slave。
  • 如果slaves連接了一個(gè)錯(cuò)誤的master,將會(huì)被改正過(guò)來(lái),連接到正確的master。

十四、Slave選舉與優(yōu)先級(jí)

當(dāng)一個(gè)sentinel準(zhǔn)備好了要進(jìn)行failover,并且收到了其他sentinel的授權(quán),那么就需要選舉出一個(gè)合適的slave來(lái)做為新的master。

slave的選舉主要會(huì)評(píng)估slave的以下幾個(gè)方面:

  • 與master斷開(kāi)連接的次數(shù)
  • Slave的優(yōu)先級(jí)
  • 數(shù)據(jù)復(fù)制的下標(biāo)(用來(lái)評(píng)估slave當(dāng)前擁有多少master的數(shù)據(jù))
  • 進(jìn)程ID

如果一個(gè)slave與master失去聯(lián)系超過(guò)10次,并且每次都超過(guò)了配置的最大失聯(lián)時(shí)間(down-after-milliseconds option),并且,如果sentinel在進(jìn)行failover時(shí)發(fā)現(xiàn)slave失聯(lián),那么這個(gè)slave就會(huì)被sentinel認(rèn)為不適合用來(lái)做新master的。

更嚴(yán)格的定義是,如果一個(gè)slave持續(xù)斷開(kāi)連接的時(shí)間超過(guò)

(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

就會(huì)被認(rèn)為失去選舉資格。

符合上述條件的slave才會(huì)被列入master候選人列表,并根據(jù)以下順序來(lái)進(jìn)行排序:

  • sentinel首先會(huì)根據(jù)slaves的優(yōu)先級(jí)來(lái)進(jìn)行排序,優(yōu)先級(jí)越小排名越靠前(?)。
  • 如果優(yōu)先級(jí)相同,則查看復(fù)制的下標(biāo),哪個(gè)從master接收的復(fù)制數(shù)據(jù)多,哪個(gè)就靠前。
  • 如果優(yōu)先級(jí)和下標(biāo)都相同,就選擇進(jìn)程ID較小的那個(gè)。

一個(gè)redis無(wú)論是master還是slave,都必須在配置中指定一個(gè)slave優(yōu)先級(jí)。要注意到master也是有可能通過(guò)failover變成slave的。

如果一個(gè)redis的slave優(yōu)先級(jí)配置為0,那么它將永遠(yuǎn)不會(huì)被選為master。但是它依然會(huì)從master哪里復(fù)制數(shù)據(jù)。

十五、Sentinel和Redis身份驗(yàn)證

當(dāng)一個(gè)master配置為需要密碼才能連接時(shí),客戶端和slave在連接時(shí)都需要提供密碼。

master通過(guò)requirepass設(shè)置自身的密碼,不提供密碼無(wú)法連接到這個(gè)master。 slave通過(guò)masterauth來(lái)設(shè)置訪問(wèn)master時(shí)的密碼。

但是當(dāng)使用了sentinel時(shí),由于一個(gè)master可能會(huì)變成一個(gè)slave,一個(gè)slave也可能會(huì)變成master,所以需要同時(shí)設(shè)置上述兩個(gè)配置項(xiàng)。

十六、Sentinel API

Sentinel默認(rèn)運(yùn)行在26379端口上,sentinel支持redis協(xié)議,所以可以使用redis-cli客戶端或者其他可用的客戶端來(lái)與sentinel通信。

有兩種方式能夠與sentinel通信:

  • 一種是直接使用客戶端向它發(fā)消息
  • 另外一種是使用發(fā)布/訂閱模式來(lái)訂閱sentinel事件,比如說(shuō)failover,或者某個(gè)redis實(shí)例運(yùn)行出錯(cuò),等等。

十七、Sentinel命令

sentinel支持的合法命令如下:

PING sentinel回復(fù)PONG.
SENTINEL masters 顯示被監(jiān)控的所有master以及它們的狀態(tài).
SENTINEL master <master name> 顯示指定master的信息和狀態(tài);
SENTINEL slaves <master name> 顯示指定master的所有slave以及它們的狀態(tài);
SENTINEL get-master-addr-by-name <master name>
返回指定master的ip和端口,如果正在進(jìn)行failover或者failover已經(jīng)完成,將會(huì)顯示被提升為master的slave的ip和端口。
SENTINEL reset <pattern>
重置名字匹配該正則表達(dá)式的所有的master的狀態(tài)信息,清楚其之前的狀態(tài)信息,以及slaves信息。
SENTINEL failover <master name>
強(qiáng)制sentinel執(zhí)行failover,并且不需要得到其他sentinel的同意。但是failover后會(huì)將最新的配置發(fā)送給其他sentinel。

到此這篇關(guān)于Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制的文章就介紹到這了,更多相關(guān)Redis的Sentinel機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis如何在項(xiàng)目中合理使用經(jīng)驗(yàn)分享

    Redis如何在項(xiàng)目中合理使用經(jīng)驗(yàn)分享

    這篇文章主要給大家介紹了關(guān)于Redis如何在項(xiàng)目中合理使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Window server中安裝Redis的超詳細(xì)教程

    Window server中安裝Redis的超詳細(xì)教程

    這篇文章主要介紹了Window server中安裝Redis的教程,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 如何使用Redis保存用戶會(huì)話Session詳解

    如何使用Redis保存用戶會(huì)話Session詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Redis保存用戶會(huì)話Session的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • jwt+redis實(shí)現(xiàn)登錄認(rèn)證的示例代碼

    jwt+redis實(shí)現(xiàn)登錄認(rèn)證的示例代碼

    在登錄業(yè)務(wù)代碼中,當(dāng)用戶登錄成功時(shí),生成一個(gè)登錄憑證存儲(chǔ)到redis中,本文主要介紹了jwt+redis實(shí)現(xiàn)登錄認(rèn)證的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用(支持多種編程語(yǔ)言)

    通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用(支持多種編程語(yǔ)言)

    這篇文章主要介紹了通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用,支持多種編程語(yǔ)言,本文就以Ruby和Python為例,給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-09-09
  • 詳解基于redis實(shí)現(xiàn)的四種常見(jiàn)的限流策略

    詳解基于redis實(shí)現(xiàn)的四種常見(jiàn)的限流策略

    限流算法在分布式領(lǐng)域是一個(gè)經(jīng)常被提起的話題,當(dāng)系統(tǒng)的處理能力有限時(shí), 如何阻止計(jì)劃外的請(qǐng)求繼續(xù)對(duì)系統(tǒng)施壓,這是一個(gè)需要重視的問(wèn)題。除了控制流量,限流還有一個(gè)應(yīng)用目的是控制用戶行為,避免垃圾請(qǐng)求
    2021-06-06
  • 使用Ruby腳本部署Redis Cluster集群步驟講解

    使用Ruby腳本部署Redis Cluster集群步驟講解

    今天小編就為大家分享一篇關(guān)于使用Ruby腳本部署Redis Cluster集群步驟講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Redis排序命令Sort深入解析

    Redis排序命令Sort深入解析

    這篇文章主要為大家介紹了Redis排序命令Sort深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 淺談Redis安全策略

    淺談Redis安全策略

    Redis 提供了諸多安全策略,比如為了保證數(shù)據(jù)安全,提供了設(shè)置密碼的功能。本文就詳細(xì)的介紹了一下Redis安全策略,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱的代碼

    Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱的代碼

    這篇文章主要介紹了Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值需要的朋友可以參考下
    2020-04-04

最新評(píng)論