為什么需要超過7個(gè)結(jié)點(diǎn)的Replica Sets?
本文是一篇譯文,原文見到boxedice公司的官方博客,他們?cè)趹?yīng)用中使用了MongoDB 的 replica sets機(jī)制,但不僅是為了數(shù)據(jù)的安全性,因此replica sets 7個(gè)節(jié)點(diǎn)的限制在這里顯得尤為有用。下面我們來看一下他們的使用經(jīng)驗(yàn)吧。
原文鏈接:When would ever need more than 7 replica set members?
MongoDB 的Replica sets是一個(gè)升級(jí)版的主從機(jī)制,不同的是,它提供了一個(gè)機(jī)制,使得在主結(jié)點(diǎn)出現(xiàn)故障后其中一個(gè)從結(jié)點(diǎn)可以自動(dòng)轉(zhuǎn)移為主結(jié)點(diǎn)。在我們的應(yīng)用中,我們我們的每一個(gè)sharding結(jié)點(diǎn)是一個(gè)由四個(gè)replica sets數(shù)據(jù)結(jié)點(diǎn)加一個(gè)replica sets arbiter組成。MongoDB 的replica sets最多可以設(shè)置7個(gè)結(jié)點(diǎn),為什么我們需要這么多的結(jié)點(diǎn)呢?為什么在我們的應(yīng)用中,我們需要有4份數(shù)據(jù)備份呢?
在MongoDB 的郵件列表里有一個(gè)討論,其中說到Google的數(shù)據(jù)也只有3到4份備份。對(duì)于數(shù)據(jù)安全性來說,3到4份確實(shí)足夠了,但是如果你想在不同地域有一份備份,那么可能3到4份就不夠了。比如我們的應(yīng)用,我們?cè)诓煌膬蓚(gè)地域分別有兩個(gè)備份。
Why?
我們的每一個(gè)replica set結(jié)點(diǎn)都存儲(chǔ)了400GB的數(shù)據(jù),當(dāng)一個(gè)結(jié)點(diǎn)出現(xiàn)故障后,它可能在未來某個(gè)時(shí)間點(diǎn)重新恢復(fù)過來,這時(shí)候他需要重新同步最新的數(shù)據(jù)。如果故障時(shí)間不長(zhǎng),那我們可以增量地通過主服務(wù)器的oplog來將故障時(shí)間內(nèi)的更新操作同步過來執(zhí)行,但是如果故障時(shí)間超過了oplog所存儲(chǔ)的更新范圍(nosqlfan:oplog的存儲(chǔ)是在capped collection中,這種collection只有一定大小,超過大小后會(huì)將舊數(shù)據(jù)進(jìn)行刪除,所以oplog中只會(huì)有最近一段時(shí)間的更新日志。),這這種情況下,我們必須要對(duì)數(shù)據(jù)進(jìn)行全量的同步。
從異地遠(yuǎn)程全量同步,對(duì)于我們的400GB數(shù)據(jù)來說,會(huì)耗費(fèi)很長(zhǎng)的時(shí)候,大概是幾天。但是由于我們?cè)谕粋(gè)機(jī)房里還存在一個(gè)節(jié)點(diǎn),如果我們從這個(gè)結(jié)點(diǎn)進(jìn)行備份,那就會(huì)很快。
也就是說,我們可以將同一機(jī)房的另一個(gè)節(jié)點(diǎn)停機(jī),然后將數(shù)據(jù)備份給出現(xiàn)故障剛剛恢復(fù)的這個(gè)節(jié)點(diǎn)。同機(jī)房的數(shù)據(jù)拷貝是很快的。也就是說我們有兩套恢復(fù)方案,耗時(shí)地從遠(yuǎn)端的master機(jī)器上備份或者快速地從同一機(jī)房的另一個(gè)節(jié)進(jìn)行備份。
如果你的數(shù)據(jù)量沒有我們這么大,那沒有什么關(guān)系,但是對(duì)我們來說,必須保證在同一機(jī)房能有超過一個(gè)結(jié)點(diǎn)。MongoDB 7個(gè)結(jié)點(diǎn)的限制讓我們可以在三個(gè)不同地域分別設(shè)置兩個(gè)結(jié)點(diǎn),還剩一個(gè)節(jié)點(diǎn)可以做arbiter。但是在Google的最多3,4個(gè)結(jié)點(diǎn)的限制下,這種任務(wù)就沒法完成了。
—————-本站觀點(diǎn)—————–
其實(shí)MongoDB提供的replica sets機(jī)制,從來都不是為了不同IDC之間的類似于CDN一樣的功能服務(wù)的,他看重的僅僅是數(shù)據(jù)的安全性,對(duì)于多IDC的內(nèi)容同步,我想我們應(yīng)該更多的通過應(yīng)用層來保證,而且鑒于天朝這種讓人發(fā)指的網(wǎng)絡(luò)狀況,在公司沒有花大價(jià)租用專用通道的前提下,這種依靠replica sets來做數(shù)據(jù)分發(fā)的想法更不切實(shí)際。
所以在這里奉勸各位,最好是按照開發(fā)者的意圖去使用特定的功能,這樣也是使你的功能能夠得開發(fā)者持續(xù)支持的好習(xí)慣。
|