国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Redis主從集群切換數(shù)據(jù)丟失問題如何應(yīng)對?

2022-04-24 16:41 作者:指南針畢業(yè)設(shè)計  | 我要投稿


  • 異步復(fù)制同步丟失




  • 集群產(chǎn)生腦裂數(shù)據(jù)丟失


1.異步復(fù)制丟失

對于Redis主節(jié)點與從節(jié)點之間的數(shù)據(jù)復(fù)制,是異步復(fù)制的,當(dāng)客戶端發(fā)送寫請求給master節(jié)點的時候,客戶端會返回OK,然后同步到各個slave節(jié)點中。

如果此時master還沒來得及同步給slave節(jié)點時發(fā)生宕機(jī),那么master內(nèi)存中的數(shù)據(jù)會丟失;

要是master中開啟持久化設(shè)置數(shù)據(jù)可不可以保證不丟失呢?答案是否定的。在master 發(fā)生宕機(jī)后,sentinel集群檢測到master發(fā)生故障,重新選舉新的master,如果舊的master在故障恢復(fù)后重啟,那么此時它需要同步新master的數(shù)據(jù),此時新的master的數(shù)據(jù)是空的(假設(shè)這段時間中沒有數(shù)據(jù)寫入)。那么舊master中的數(shù)據(jù)就會被刷新掉,此時數(shù)據(jù)還是會丟失。

2.集群產(chǎn)生腦裂

首先我們需要理解集群的腦裂現(xiàn)象,這就好比一個人有兩個大腦,那么到底受誰來控制呢?在分布式集群中,分布式協(xié)作框架zookeeper很好的解決了這個問題,通過控制半數(shù)以上的機(jī)器來解決。

那么在Redis中,集群腦裂產(chǎn)生數(shù)據(jù)丟失的現(xiàn)象是怎么樣的呢?

假設(shè)我們有一個redis集群,正常情況下client會向master發(fā)送請求,然后同步到salve,sentinel集群監(jiān)控著集群,在集群發(fā)生故障時進(jìn)行自動故障轉(zhuǎn)移。

此時,由于某種原因,比如網(wǎng)絡(luò)原因,集群出現(xiàn)了分區(qū),master與slave節(jié)點之間斷開了聯(lián)系,sentinel監(jiān)控到一段時間沒有聯(lián)系認(rèn)為master故障,然后重新選舉,將slave切換為新的master。

但是master可能并沒有發(fā)生故障,只是網(wǎng)絡(luò)產(chǎn)生分區(qū),此時client任然在舊的master上寫數(shù)據(jù),而新的master中沒有數(shù)據(jù),如果不及時發(fā)現(xiàn)問題進(jìn)行處理可能舊的master中堆積大量數(shù)據(jù)。在發(fā)現(xiàn)問題之后,舊的master降為slave同步新的master數(shù)據(jù),那么之前的數(shù)據(jù)被刷新掉,大量數(shù)據(jù)丟失。

在了解了上面的兩種數(shù)據(jù)丟失場景后,我們?nèi)绾伪WC數(shù)據(jù)可以不丟失呢?在分布式系統(tǒng)中,衡量一個系統(tǒng)的可用性,我們一般情況下會說4個9,5個9的系統(tǒng)達(dá)到了高可用(99.99%,99.999%,據(jù)說淘寶是5個9)。對于redis集群,我們不可能保證數(shù)據(jù)完全不丟失,只能做到使得盡量少的數(shù)據(jù)丟失。

二、如何保證盡量少的數(shù)據(jù)丟失?

在redis的配置文件中有兩個參數(shù)我們可以設(shè)置:

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

min-slaves-to-write默認(rèn)情況下是0,min-slaves-max-lag默認(rèn)情況下是10。

以上面配置為例,這兩個參數(shù)表示至少有1個salve的與master的同步復(fù)制延遲不能超過10s,一旦所有的slave復(fù)制和同步的延遲達(dá)到了10s,那么此時master就不會接受任何請求。

我們可以減小min-slaves-max-lag參數(shù)的值,這樣就可以避免在發(fā)生故障時大量的數(shù)據(jù)丟失,一旦發(fā)現(xiàn)延遲超過了該值就不會往master中寫入數(shù)據(jù)。

那么對于client,我們可以采取降級措施,將數(shù)據(jù)暫時寫入本地緩存和磁盤中,在一段時間后重新寫入master來保證數(shù)據(jù)不丟失;也可以將數(shù)據(jù)寫入kafka消息隊列,隔一段時間去消費kafka中的數(shù)據(jù)。

通過上面兩個參數(shù)的設(shè)置我們盡可能的減少數(shù)據(jù)的丟失,具體的值還需要在特定的環(huán)境下進(jìn)行測試設(shè)置。


Redis主從集群切換數(shù)據(jù)丟失問題如何應(yīng)對?的評論 (共 條)

分享到微博請遵守國家法律
宜宾市| 渭源县| 明溪县| 海南省| 榆中县| 调兵山市| 芷江| 建昌县| 江都市| 绥化市| 中宁县| 晋宁县| 读书| 阿坝| 花莲市| 乌什县| 固阳县| 鄂伦春自治旗| 东宁县| 庄浪县| 墨脱县| 江口县| 蓬溪县| 郸城县| 张家港市| 锡林郭勒盟| 延长县| 布尔津县| 芜湖市| 栾城县| 大姚县| 荆州市| 嘉兴市| 禄丰县| 辰溪县| 喀什市| 龙州县| 尚义县| 泸西县| 巴林左旗| 察雅县|