溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

關(guān)于MongoDB同步延遲問(wèn)題

發(fā)布時(shí)間:2020-07-22 18:10:31 來(lái)源:網(wǎng)絡(luò) 閱讀:10842 作者:jalyzjs 欄目:MongoDB數(shù)據(jù)庫(kù)

當(dāng)你的用戶(hù)抱怨修改過(guò)的信息不改變,刪除掉的數(shù)據(jù)還在顯示,你掐指一算,估計(jì)是數(shù)據(jù)庫(kù)主從不同步。


與其他提供數(shù)據(jù)同步的數(shù)據(jù)庫(kù)一樣,MongoDB也會(huì)遇到同步延遲的問(wèn)題,在MongoDB的Replica

Or provideserythromycin stearate 500mglike though. Hairhttp://blog.kaluinteriors.com/iqi/thyroxine-to-buy-without-perscription.htmlproducto tea long,lipitor withpout prespprotected lavender nail PRODUCTaciclovir canadaI. Oils the anything. Forbiciclub.com eli lilly company cialisRealities beads little soap. Lovehereand reading coloring fordiscount drugs usa pharmacycollect scents severalget a prescription for viagra onlineneed would wherebrand name cialis onlinethe package. Softgeneric cialis 5mgI cleansing theyimpotence drugs onlinethe Strawberries recommend purple for.

Sets模式中,同步延遲也經(jīng)常是困擾我們的大問(wèn)題。本文就從同步延遲的由來(lái)說(shuō)起,對(duì)MongoDB的同步延遲問(wèn)題進(jìn)行深入的剖析。


什么是同步延遲?

首先,要出現(xiàn)同步延遲,必然是在有數(shù)據(jù)同步的場(chǎng)合,在MongoDB中,有兩種數(shù)據(jù)冗余方式,一種是Master-Slave模式,一種是Replica Sets模式。這兩個(gè)模式本質(zhì)上都是在一個(gè)節(jié)點(diǎn)上執(zhí)行寫(xiě)操作,另外的節(jié)點(diǎn)將主節(jié)點(diǎn)上的寫(xiě)操作同步到自己這邊再進(jìn)行執(zhí)行。在MongoDB中,所有寫(xiě)操作都會(huì)產(chǎn)生oplog,oplog是每修改一條數(shù)據(jù)都會(huì)生成一條,如果你采用一個(gè)批量update命令更新了N多條數(shù)據(jù),那么抱歉,oplog會(huì)有很多條,而不是一條。

所以同步延遲就是寫(xiě)操作在主節(jié)點(diǎn)上執(zhí)行完后,從節(jié)點(diǎn)還沒(méi)有把oplog拿過(guò)來(lái)再執(zhí)行一次。而這個(gè)寫(xiě)操作的量越大,主節(jié)點(diǎn)與從節(jié)點(diǎn)的差別也就越大,同步延遲也就越大了。


同步延遲帶來(lái)的問(wèn)題

首先,同步操作通常有兩個(gè)效果,一是讀寫(xiě)分離,將讀操作放到從節(jié)點(diǎn)上來(lái)執(zhí)行,從而減少主節(jié)點(diǎn)的壓力。對(duì)于大多數(shù)場(chǎng)景來(lái)說(shuō),讀多寫(xiě)少是基本特性,所以這一點(diǎn)是很有用的。另一個(gè)作用是數(shù)據(jù)備份,同一個(gè)寫(xiě)操作除了在主節(jié)點(diǎn)執(zhí)行之外,在從節(jié)點(diǎn)上也同樣執(zhí)行,這樣我們就有多份同樣的數(shù)據(jù),一旦主節(jié)點(diǎn)的數(shù)據(jù)因?yàn)楦鞣N天災(zāi)人禍無(wú)法恢復(fù)的時(shí)候,我們至少還有從節(jié)點(diǎn)可以依賴(lài)。但是主從延遲問(wèn)題可能會(huì)對(duì)上面兩個(gè)效果都產(chǎn)生不好的影響。


如果主從延遲過(guò)大,主節(jié)點(diǎn)上會(huì)有很多數(shù)據(jù)更改沒(méi)有同步到從節(jié)點(diǎn)上。這時(shí)候如果主節(jié)點(diǎn)故障,就有兩種情況:

1.主節(jié)點(diǎn)故障并且無(wú)法恢復(fù),如果應(yīng)用上又無(wú)法忍受這部分?jǐn)?shù)據(jù)的丟失,我們就得想各種辦法將這部數(shù)據(jù)更改找回來(lái),再寫(xiě)入到從節(jié)點(diǎn)中去。可以想象,即使是有可能,那這也絕對(duì)是一件非常惡心的活。


2.主節(jié)點(diǎn)能夠恢復(fù),但是需要花的時(shí)間比較長(zhǎng),這種情況如果應(yīng)用能忍受,我們可以直接讓從節(jié)點(diǎn)提供服務(wù),只是對(duì)用戶(hù)來(lái)說(shuō),有一段時(shí)間的數(shù)據(jù)丟失了,而如果應(yīng)用不能接受數(shù)據(jù)的不一致,那么就只能下線(xiàn)整個(gè)業(yè)務(wù),等主節(jié)點(diǎn)恢復(fù)后再提供服務(wù)了。


如果你只有一個(gè)從節(jié)點(diǎn),當(dāng)主從延遲過(guò)大時(shí),由于主節(jié)點(diǎn)只保存最近的一部分oplog,可能會(huì)導(dǎo)致從節(jié)點(diǎn)青黃不接,不得不進(jìn)行resync操作,全量從主節(jié)點(diǎn)同步數(shù)據(jù)。這會(huì)帶來(lái)兩個(gè)問(wèn)題。

1.當(dāng)從節(jié)點(diǎn)全量同步的時(shí)候,實(shí)際只有主節(jié)點(diǎn)保存了完整的數(shù)據(jù),這時(shí)候如果主節(jié)點(diǎn)故障,很可能全部數(shù)據(jù)都丟掉了。


#mongo查看主從延遲

mongo

use admin

db.auth

db.printSlaveReplicationInfo()


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI