Warning:MongoDB Replica Sets配置注意事項(xiàng)
sharding(1).png (10.49 KB, 下載次數(shù): 137)
下載附件
2012-02-22 19:22 上傳
我們知道,MongoDB不提供單機(jī)的數(shù)據(jù)安全性,取而代之的是提供了Replica Sets的高可用方案。官方文檔中提到的案例是三個(gè)節(jié)點(diǎn)組成的Replica Sets,這樣在其中任何一個(gè)節(jié)點(diǎn)宕機(jī)后都會(huì)自動(dòng)選舉出新的Primary提供寫(xiě)操作。而下面要提到的是一個(gè)大家可能忽略的問(wèn)題。
配置方法
兩個(gè)節(jié)點(diǎn)的Replica Sets,啟動(dòng)后一個(gè)選舉成為Primary,一個(gè)成為Secondary。
問(wèn)題
這時(shí)候如果Secondary宕機(jī),那么Primary會(huì)怎么樣呢?Primary會(huì)立刻變成Secondary!這時(shí)候集群里沒(méi)有Primary了!為什么會(huì)出現(xiàn)這樣的情況呢。
原因
這是和MongoDB的Primary選舉策略有關(guān)的,試想如果情況不是Secondary宕機(jī),而是網(wǎng)絡(luò)斷開(kāi),那么兩個(gè)節(jié)點(diǎn)都會(huì)選取自己為Primary,因?yàn)樗麄兡苓B接上的只有自己這一個(gè)節(jié)點(diǎn)。而這樣的情況在網(wǎng)絡(luò)恢復(fù)后就需要處理復(fù)雜的一致性問(wèn)題。而且斷開(kāi)的時(shí)間越長(zhǎng),時(shí)間越復(fù)雜。所以MongoDB選擇的策略是如果集群中只有自己一個(gè)節(jié)點(diǎn),那么不選取自己為Primary。
解決方法
所以正確的做法應(yīng)該是添加兩個(gè)以上的節(jié)點(diǎn),或者添加arbiter,當(dāng)然最好也最方便的做法是添加arbiter,aribiter節(jié)點(diǎn)只參與選舉,幾乎不會(huì)有壓力,所以你可以在各種閑置機(jī)器上啟動(dòng)arbiter節(jié)點(diǎn),這不僅會(huì)避免上面說(shuō)到的無(wú)法選舉Primary的情況,更會(huì)讓選取更快速的進(jìn)行。(因?yàn)槿绻侨_(tái)數(shù)據(jù)節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)宕機(jī),另外兩個(gè)節(jié)點(diǎn)很可能會(huì)各自選舉自己為Primary,從而導(dǎo)致很長(zhǎng)時(shí)間才能得出選舉結(jié)果)
相關(guān)鏈接:tebros.com
|