Foursquare:使用MongoDB Replica Sets的三種架構(gòu)
MongoDB 的replication機制除了最普通的Master/Slave模式之外,更強大的就是其支持自動故障轉(zhuǎn)移的Replica Sets模式了。相對于其問題多多的auto-sharding機制,Replica Sets還是相對比較穩(wěn)定。
作為MongoDB使用大戶,F(xiàn)oursquare(簡稱4sq) 在MongoDB使用上有相當豐富的經(jīng)驗,下面是4sq的一篇文章,描述了Replica Sets機制在4sq 中的幾種架構(gòu)方式。
原文鏈接:Fun with MongoDB replica sets
1.在原有的Master/Slave 機制上添加一臺arbiter
4sq 在早期有一些Master/Slave的MongoDB架構(gòu),但這種模式不能實現(xiàn)自動的故障轉(zhuǎn)移,需要在發(fā)生故障時手動進行切換。在Replica Sets出現(xiàn)后,這種結(jié)構(gòu)被遷移成為三臺機器的Replica Sets:一臺Primary,一臺Secondary,一臺Arbiter。
遷移過程:
修改Master和slave的配置,添加如下幾項,并重啟MongoDB。
replSet = auxdb
fastsync = true
rest = true
fastsync 使得重啟動可以使用到原來的數(shù)據(jù)文件,重啟會非?。然后再在Primary上用rs.add 和 rs.addArb 將Secondary和Arbiter添加上。就算完成了。
2.一個 Primary用于寫,多個Secondary用于讀和一個Secondary用于備份
在寫多讀少的應(yīng)用中,4sq主要使用了Replica Sets來實現(xiàn)讀寫分離。通過在連接時指定slaveOk,將讀操作放到Secondary上,Primary只承擔寫操作。同時指定一臺priority為0,hidden為true的Secondary來進行備份(這樣設(shè)置后此機器在讀寫中都不可見,并且不會被選舉為Primary)
3.MongoDB經(jīng)典配置,上層是Auto-Sharding,每個Sharding結(jié)點又是一個Replica Sets
雖然4sq在這上面吃過虧,但很明顯他們已經(jīng)吸取了教訓(xùn)并且在更合理更小心的使用Auto-Sharding這一誘人的功能。
|