MongoDB單點故障分析

jx_yu發表於2015-01-16

分片叢集中存在的幾種不同的潛在的節點故障場景,以及Mongodb對這些節點故障是怎麼處理的。

1Mongos節點當機

一個Mongos程式應該執行在每一個應用程式伺服器上,這個伺服器應該獨佔這個Mongos程式,並且透過它與分片叢集來通訊。Mongos程式不是持久化的,相反,它們在啟動的時候從Config Server上收集所有必須的配置資訊。

這表明,任何一個應用程式伺服器節點故障,對作為一個整體的分片叢集來講並沒有什麼影響,所有別的應用程式伺服器將依然是繼續正常工作。

在這種情況下,恢復是一個相當簡單的事情,我們只需要去啟動一個新的應用程式伺服器和一個新的Mongos程式即可。

2、分片中的某一個Mongod節點當機

每一個分片由n個伺服器構成,這n個伺服器被配置為一個複製集(replica set)。如果在複製集中的任何一個節點當機,在這個分片上讀與寫操作任然是允許的。

更加重要的是,當機伺服器上的資料都不會丟失,因為複製機制存在一個選項,那就是強制複製寫操作到分片的其它節點上再返回,這與在Dynamo上設定write=2類似。

MongoDB v1.6以後版本中Replica sets才是可用的。

3、分片中的所有Mongod節點當機

如果一個分片中的全部節點(replicas)都當機了,在該分片內的資料將不能被訪問。然而,操作任然是繼續進行,只不過是由別的分片分擔。看文件就可以弄清楚為什麼這樣。

如果分片被配置為一個複製集(Replicas set),至少一個成員應該在另外一個資料中心,那樣的話,整個分片都當機幾乎是不可能的。為了有更大的冗餘度,推薦這樣進行配置。

4、一個Config Server當機

一個產品級的分片叢集需要有3Config Server程式,每一個程式都在一臺獨立的機器上執行。

對於Config server中的叢集後設資料的寫操作使用一個兩階段提交,去確保是一個原子的並且是被複制的事務操作。

在任何一個配置伺服器失效的時候,Mongodb叢集的後設資料都會變成為只讀了。叢集系統繼續執行,但是chunks在一個分片中將會成為不可以被拆分或者是不可以跨分片進行遷移。對於大多數使用場景,這個不會導致問題,應為改變Chunk後設資料進行的並不頻繁。

另外,使當機的Config Server在一個合理的時間週期(一天)內恢復是相當重要的,這樣可以避免分片由於缺乏遷移而變得負載不均衡(相對而言,對於大多數產品場景,這種現象也不是很嚴重的事情)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-1404402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章