單機版
- 主要用來開發(fā)和測試,一般不用于生產(chǎn)環(huán)境
復制集
目的
- 主要為了高可用硫椰,可以failover
- 讀寫分離闸度,讀可以分擔到不同節(jié)點
- 可以跨機房,甚至異地容災
- 數(shù)據(jù)同步到另外一個區(qū)域節(jié)點旧困,可以減少區(qū)域延遲
基本架構
image.png
高可用實現(xiàn)
- 通過raft一致性來保證主從副本的一致性
- 通過raft來實現(xiàn)failover
- 寫入設置write conren選項保證大多數(shù)節(jié)點同步到oplog
cluster
目的
- 增大存儲
- 增大IO
- 地理分布
基本架構
image.png
config server
- 存儲集群的元數(shù)據(jù),key的范圍對應到具體的shard
mongos
- 主要承擔路由的功能
- 查詢sort稼锅,以及count等操作會在mongos上合并排序的等操作吼具,因為數(shù)據(jù)可能在不同shard上
mongod
- 存儲chunk的數(shù)據(jù)庫,這里為了高可用矩距,需要部署成復制集的模式
cluster的特點
- 對應用全透明拗盒,無需特殊處理,可以認為是一個超大數(shù)據(jù)庫
- 數(shù)據(jù)自動平衡锥债,chunk自動balance
- 動態(tài)擴容陡蝇,無需下線
- 提供三種分shard的方式
- 基于range,優(yōu)化連續(xù)讀哮肚,但是容易造成不均衡登夫,比如連續(xù)的id
- 基于hash,優(yōu)化寫允趟,適合大量寫入場景恼策,對范圍查詢不友好
- 基于zone,可以打tag潮剪,不同區(qū)域?qū)懭氲讲煌膕hard涣楷,比如北京地區(qū)寫入北京地區(qū)的shard分唾,上海寫入上海的。
如何用好cluster
- 關于數(shù)據(jù):數(shù)據(jù)單個shard 不要超過3T狮斗,最好2T一個shard
- 關于索引:常用索引最好可以全部納入內(nèi)存绽乔,可以通過db.col.stats壓測估算
- mongos和config一般消耗很少資源,mongs需要多點cpu碳褒,count以及sort會用到折砸,config占用資源很少
- 集群數(shù)量不太大,可以mongs和app-server部署一起骤视,集群數(shù)量太大鞍爱,mongos單獨部署
- config的部署最好跨機房,最次也跨機柜
- mongod內(nèi)存要能容納索引以及熱數(shù)據(jù)专酗,mongod畢竟還是磁盤數(shù)據(jù)庫睹逃,推薦ssd
兩地三中心
基本架構
image.png
- mongo可以甚至選舉優(yōu)先級,冷備可以不用參與選舉
- 如果北京海淀DC掛了祷肯,就會自動選舉到朝陽DC
- 如果北京整個都掛了沉填,可以手動恢復上海浦東的DC
建議
- 主數(shù)據(jù)中心兩個節(jié)點選舉優(yōu)先級可以提高一點,避免垮機房切換中心點
- 同城雙中心佑笋,保證低延遲和帶寬翼闹,因為需要保證writeconern: majority的雙中心寫需求
- 業(yè)務要處理好雙中心切換