成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零單排學(xué)Redis【鉑金二】

荊兆峰 / 551人閱讀

摘要:可以通過(guò)以下兩個(gè)配置盡量減少數(shù)據(jù)丟失的可能從零單排學(xué)鉑金三,敬請(qǐng)期待參考資料設(shè)計(jì)與實(shí)現(xiàn)實(shí)戰(zhàn)如果你覺(jué)得我寫得還不錯(cuò),了解一下堅(jiān)持原創(chuàng)的技術(shù)公眾號(hào)。

前言
只有光頭才能變強(qiáng)

好的,今天我們要上【鉑金二】了,如果還沒(méi)有上鉑金的,趕緊先去蹭蹭經(jīng)驗(yàn)再回來(lái)(不然不帶你上分了):

從零單排學(xué)Redis【青銅】

從零單排學(xué)Redis【白銀】

從零單排學(xué)Redis【黃金】

從零單排學(xué)Redis【鉑金一】

在上篇中拋出了一個(gè)問(wèn)題:

拋個(gè)問(wèn)題:如果從服務(wù)器掛了,沒(méi)關(guān)系,我們一般會(huì)有多個(gè)從服務(wù)器,其他的請(qǐng)求可以交由沒(méi)有掛的從服務(wù)器繼續(xù)處理。如果主服務(wù)器掛了,怎么辦?因?yàn)槲覀兊膶懻?qǐng)求由主服務(wù)器處理,只有一臺(tái)主服務(wù)器,那就無(wú)法處理寫請(qǐng)求了?

Redis提供了哨兵(Sentinal)機(jī)制供我們解決上面的情況。如果主服務(wù)器掛了,我們可以將從服務(wù)器升級(jí)為主服務(wù)器,等到舊的主服務(wù)器(掛掉的那個(gè))重連上來(lái),會(huì)將它(掛掉的主服務(wù)器)變成從服務(wù)器。

這個(gè)過(guò)程叫做主備切換(故障轉(zhuǎn)移)

在正常的情況下,主從加哨兵(Sentinal)機(jī)制是這樣子的:

主服務(wù)器掛了,主從復(fù)制操作就中止了,并且哨兵系統(tǒng)是可以察覺(jué)出主服務(wù)掛了。:

Redis提供哨兵機(jī)制可以將選舉一臺(tái)從服務(wù)器變成主服務(wù)器

然后舊的主服務(wù)器如果重連了,會(huì)變成從服務(wù)器:

這篇文章主要講講Redis的哨兵(Sentinal)機(jī)制的一些細(xì)節(jié)。希望看完對(duì)大家有所幫助~

一、哨兵(Sentinal)機(jī)制
High Availability: Redis Sentinel is the official high availability solution for Redis.

哨兵(Sentinal)機(jī)制主要用于實(shí)現(xiàn)Redis的高可用性,主要的功能如下:

Monitoring. Sentinel constantly checks if your master and slave instances are working as expected.

Sentinel不停地監(jiān)控Redis主從服務(wù)器是否正常工作

Notification. Sentinel can notify the system administrator, another computer programs, via an API, that something is wrong with one of the monitored Redis instances.

如果某個(gè)Redis實(shí)例有故障,那么哨兵負(fù)責(zé)發(fā)送消息通知管理員

Automatic failover. If a master is not working as expected, Sentinel can start a failover process where a slave is promoted to master, the other additional slaves are reconfigured to use the new master, and the applications using the Redis server informed about the new address to use when connecting.

如果主服務(wù)器掛掉了,會(huì)自動(dòng)將從服務(wù)器提升為主服務(wù)器(包括配置都會(huì)修改)。

Configuration provider. Sentinel acts as a source of authority for clients service discovery: clients connect to Sentinels in order to ask for the address of the current Redis master responsible for a given service. If a failover occurs, Sentinels will report the new address.

Sentinel可以作為配置中心,能夠提供當(dāng)前主服務(wù)器的信息。

下面來(lái)具體講講Sentinel是如何將從服務(wù)器提升為主服務(wù)器的。

tips:Sentinel可以讓我們的Redis實(shí)現(xiàn)高可用,Sentinel作為這么一個(gè)組件,自身也必然是高可用的(不可能是單點(diǎn)的)
1.1啟動(dòng)和初始化Sentinel

首先我們要知道的是:Sentinel本質(zhì)上只是一個(gè)運(yùn)行在特殊模式下的Redis服務(wù)器。因?yàn)镾entinel做的事情和Redis服務(wù)器是不一樣的,所以它們的初始化是有所區(qū)別的(比如,Sentinel在初始化的時(shí)候并不會(huì)載入AOF/RDB文件,因?yàn)镾entinel根本就不用數(shù)據(jù)庫(kù))。

然后,在啟動(dòng)的時(shí)候會(huì)將普通Redis服務(wù)器的代碼替換成Sentinel專用代碼。(所以Sentinel雖然作為Redis服務(wù)器,但是它不能執(zhí)行SET、DBSIZE等等命令,因?yàn)槊畋淼拇a被替換了)

接著,初始化Sentinel的狀態(tài),并根據(jù)給定的配置文件初始化Sentinel監(jiān)視的主服務(wù)器列表。

最后,Sentinel會(huì)創(chuàng)建兩個(gè)連向主服務(wù)器的網(wǎng)絡(luò)連接

命令連接(發(fā)送和接收命令)

訂閱連接(訂閱主服務(wù)器的_sentinel_:hello頻道)

1.2獲取和更新信息

Sentinel通過(guò)主服務(wù)器發(fā)送INFO命令來(lái)獲得主服務(wù)器屬下所有從服務(wù)器的地址信息,并為這些從服務(wù)器創(chuàng)建相應(yīng)的實(shí)例結(jié)構(gòu)。

當(dāng)發(fā)現(xiàn)有新的從服務(wù)器出現(xiàn)時(shí),除了創(chuàng)建對(duì)應(yīng)的從服務(wù)器實(shí)例結(jié)構(gòu),Sentinel還會(huì)創(chuàng)建命令連接和訂閱連接。

在Sentinel運(yùn)行的過(guò)程中,通過(guò)命令連接會(huì)以每?jī)擅胍淮蔚念l率向監(jiān)視的主從服務(wù)器_sentinel_:hello頻道發(fā)送命令(主要發(fā)送Sentinel本身的信息,監(jiān)聽(tīng)主從服務(wù)器的信息),并通過(guò)訂閱連接接收_sentinel_:hello頻道的信息。

這樣一來(lái)一回,我們就可以更新每個(gè)Sentinel實(shí)例結(jié)構(gòu)的信息。

1.3判斷主服務(wù)器是否下線了

判斷主服務(wù)器是否下線有兩種情況:

主觀下線

Sentinel會(huì)以每秒一次的頻率向與它創(chuàng)建命令連接的實(shí)例(包括主從服務(wù)器和其他的Sentinel)發(fā)送PING命令,通過(guò)PING命令返回的信息判斷實(shí)例是否在線

如果一個(gè)主服務(wù)器down-after-milliseconds毫秒內(nèi)連續(xù)向Sentinel發(fā)送無(wú)效回復(fù),那么當(dāng)前Sentinel就會(huì)主觀認(rèn)為該主服務(wù)器已經(jīng)下線了。

客觀下線

當(dāng)Sentinel將一個(gè)主服務(wù)器判斷為主觀下線以后,為了確認(rèn)該主服務(wù)器是否真的下線,它會(huì)向同樣監(jiān)視該主服務(wù)器的Sentinel詢問(wèn),看它們是否也認(rèn)為該主服務(wù)器是否下線。

如果足夠多的Sentinel認(rèn)為該主服務(wù)器是下線的,那么就判定該主服務(wù)為客觀下線,并對(duì)主服務(wù)器執(zhí)行故障轉(zhuǎn)移操作。

在多少毫秒內(nèi)無(wú)效回復(fù)才認(rèn)定主服務(wù)器是主觀下線的,以及有多少個(gè)Sentinel認(rèn)為主服務(wù)器是下線才認(rèn)定為客觀下線。這都是可以配置
1.4選舉領(lǐng)頭Sentinel和故障轉(zhuǎn)移

當(dāng)一個(gè)主服務(wù)器認(rèn)為為客觀下線以后,監(jiān)視這個(gè)下線的主服務(wù)器的各種Sentinel會(huì)進(jìn)行協(xié)商,選舉出一個(gè)領(lǐng)頭的Sentinel,領(lǐng)頭的Sentinel會(huì)對(duì)下線的主服務(wù)器執(zhí)行故障轉(zhuǎn)移操作。

選舉領(lǐng)頭Sentinel的規(guī)則也比較多,總的來(lái)說(shuō)就是先到先得(哪個(gè)快,就選哪個(gè))

選舉出領(lǐng)頭的Sentinel之后,領(lǐng)頭的Sentinel會(huì)對(duì)已下線的主服務(wù)器執(zhí)行故障轉(zhuǎn)移操作,包括三個(gè)步驟:

在已下線主服務(wù)器屬下的從服務(wù)器中,挑選一個(gè)轉(zhuǎn)換為主服務(wù)器

讓已下線主服務(wù)器屬下的所有從服務(wù)器改為復(fù)制新的主服務(wù)器

已下線的主服務(wù)器重新連接時(shí),讓他成為新的主服務(wù)器的從服務(wù)器

(這三步實(shí)際上就是文章開(kāi)頭的圖片)

挑選某一個(gè)從服務(wù)器作為主服務(wù)器也是有策略的,大概如下:

(1)跟master斷開(kāi)連接的時(shí)長(zhǎng)

(2)slave優(yōu)先級(jí)

(3)復(fù)制offset

(4)run id

最后

這篇文章主要講解了Sentinel的作用和工作的基本過(guò)程(我覺(jué)得已經(jīng)基本OK了),其中也涉及到了很多的細(xì)節(jié),這里我就沒(méi)有一一整理出來(lái)了。想要深入學(xué)習(xí)的同學(xué)最好自己看看書或者文檔~~

tips:目前為止的主從+哨兵架構(gòu)可以說(shuō)Redis是高可用的,但要清楚的是:Redis還是會(huì)丟失數(shù)據(jù)

丟失數(shù)據(jù)有兩種情況:

異步復(fù)制導(dǎo)致的數(shù)據(jù)丟失

有部分?jǐn)?shù)據(jù)還沒(méi)復(fù)制到從服務(wù)器,主服務(wù)器就宕機(jī)了,此時(shí)這些部分?jǐn)?shù)據(jù)就丟失了

腦裂導(dǎo)致的數(shù)據(jù)丟失

有時(shí)候主服務(wù)器脫離了正常網(wǎng)絡(luò),跟其他從服務(wù)器不能連接。此時(shí)哨兵可能就會(huì)認(rèn)為主服務(wù)器下線了(然后開(kāi)啟選舉,將某個(gè)從服務(wù)器切換成了主服務(wù)器),但是實(shí)際上主服務(wù)器還運(yùn)行著。這個(gè)時(shí)候,集群里就會(huì)有兩個(gè)服務(wù)器(也就是所謂的腦裂)。

雖然某個(gè)從服務(wù)器被切換成了主服務(wù)器,但是可能客戶端還沒(méi)來(lái)得及切換到新的主服務(wù)器,客戶端還繼續(xù)寫向舊主服務(wù)器寫數(shù)據(jù)。舊的服務(wù)器重新連接時(shí),會(huì)作為從服務(wù)器復(fù)制新的主服務(wù)器(這意味著舊數(shù)據(jù)丟失)。

可以通過(guò)以下兩個(gè)配置盡量減少數(shù)據(jù)丟失的可能:

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

從零單排學(xué)Redis【鉑金三】,敬請(qǐng)期待~

參考資料:

《Redis設(shè)計(jì)與實(shí)現(xiàn)》

《Redis實(shí)戰(zhàn)》

如果你覺(jué)得我寫得還不錯(cuò),了解一下:

堅(jiān)持原創(chuàng)的技術(shù)公眾號(hào):Java3y?;貜?fù) 1 加入Java交流群

文章的目錄導(dǎo)航(精美腦圖+海量視頻資源):https://github.com/ZhongFuCheng3y/3y

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72552.html

相關(guān)文章

  • 從零單排學(xué)Redis鉑金一】

    摘要:前言只有光頭才能變強(qiáng)好的,今天我們要上鉑金段位了,如果還沒(méi)經(jīng)歷過(guò)青銅和白銀和黃金階段的,可以先去蹭蹭經(jīng)驗(yàn)再回來(lái)從零單排學(xué)青銅從零單排學(xué)白銀從零單排學(xué)黃金這篇文章主要講的是主從復(fù)制。 前言 只有光頭才能變強(qiáng) 好的,今天我們要上鉑金段位了,如果還沒(méi)經(jīng)歷過(guò)青銅和白銀和黃金階段的,可以先去蹭蹭經(jīng)驗(yàn)再回來(lái): 從零單排學(xué)Redis【青銅】 從零單排學(xué)Redis【白銀】 從零單排學(xué)Redis【黃金...

    wizChen 評(píng)論0 收藏0
  • 緩存雪崩、緩存穿透、緩存更新了解多少?

    摘要:緩存穿透是指查詢一個(gè)一定不存在的數(shù)據(jù)。這就是緩存穿透請(qǐng)求的數(shù)據(jù)在緩存大量不命中,導(dǎo)致請(qǐng)求走數(shù)據(jù)庫(kù)。并發(fā)下解決數(shù)據(jù)庫(kù)與緩存不一致的思路將刪除緩存修改數(shù)據(jù)庫(kù)讀取緩存等的操作積壓到隊(duì)列里邊,實(shí)現(xiàn)串行化。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面: 從零單排學(xué)Redis【青銅...

    CNZPH 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<