IMPORTANT:在MongoDB3.4以后 ,使用mongod實(shí)例作為config servers已被棄用。在3.4以后,你必須將你的config server從SCCC升級(jí)到CSRS。
Config servers持有集群的元數(shù)據(jù)。元數(shù)據(jù)反應(yīng)了集群里所有數(shù)據(jù)和組建的狀態(tài)。元數(shù)據(jù)還包括了每個(gè)碎片的chunks list和chunks 定義的范圍。
mongos實(shí)例緩存這些數(shù)據(jù)用于將讀寫操作路由到正確的碎片上。當(dāng)集群的元數(shù)據(jù)發(fā)生改變的時(shí)候, mongos會(huì)更新緩存,例如Chunk Splits or adding a shard。碎片也是從config servers里面讀取chunk的元數(shù)據(jù)。
config server也保存集群里的認(rèn)證配置,例如 Role-Based Access Control or internal authentication。
MongoDB同時(shí)也使用config server來(lái)管理分布式鎖。
每一個(gè)集群必須擁有自己唯一的config servers。不要在不同的集群里使用一樣的config servers。
在config servers 上進(jìn)行權(quán)限操作或許會(huì)對(duì)集群的性能和可靠性造成重大影響。根據(jù)被影響的config servers的數(shù)量,一段時(shí)間內(nèi),集群可能只能進(jìn)行讀取操作甚至offline。
Replica Set Config Servers
在MongoDB 3.2開始,集群的config servers可以部署為replica set,替代以前的SCCC。當(dāng)config server利用replica set的標(biāo)準(zhǔn)來(lái)進(jìn)行讀寫操作的時(shí)候,可以提高config servers的一致性。集群擁有3個(gè)以上config servers運(yùn)行在已經(jīng)擁有50個(gè)成員的replica set的情況除外。要把config server是運(yùn)行在replica set上,config servers 必須使用WiredTiger storage engine.
replica set如要承當(dāng)config servers的載體,該replica set有以下限制:
- 不能有arbiters成員
- 不能有 delayed 成員
- 必須建立indexes(i.e. 任何成員的buildIndexes必須設(shè)置為true)
Config servers 的讀寫操作
config servers 必須持有admin數(shù)據(jù)庫(kù)和config database
在Config servers上寫入
admin數(shù)據(jù)庫(kù)包含身份驗(yàn)證和其他像system.* collections的授權(quán)集合供內(nèi)部使用。
config database包含含有集群元數(shù)據(jù)的集合。當(dāng)元數(shù)據(jù)發(fā)生改變的時(shí)候,MongoDB將數(shù)據(jù)寫入 config database,例如在chunk migration or a chunk split.之后。
用戶在正常操作或維護(hù)的過(guò)程中應(yīng)該避免直接將數(shù)據(jù)寫入 config database。
當(dāng)寫入到 config database的時(shí)候,MongoDB將 write concern字段設(shè)置為"majority"。
從Config Servers讀取
MongoDB從admin數(shù)據(jù)庫(kù)讀取身份認(rèn)證或者授權(quán)或者其他內(nèi)部使用。
在mongos將元數(shù)據(jù)改變之前或者之后,MongoDB會(huì)從config database讀取,例如在chunk遷移之后。碎片同樣也從config database讀取chunk元數(shù)據(jù)。
當(dāng)從replica set config servers(CSRS)讀取數(shù)據(jù),MongoDB將使用 Read Concern的"majority".字段
Config server的可用性
如果config server的replica set沒(méi)有并無(wú)法選舉出primary成員,集群的元信息狀態(tài)變成只讀。你仍然可以在碎片上進(jìn)行讀寫操作,但在replica set選舉出一個(gè)primary之前,無(wú)法進(jìn)行chunk遷徙或者chunk split。
在集群中,mongod和mongos監(jiān)控集群里的replica set。(e.g. 碎片replica set, config server replica set)
如果所有的config servers都不可用了,那么該集群就廢了。為了確保config servers的可用性和完整性,對(duì)config servers進(jìn)行備份是至關(guān)重要的。config servers的數(shù)據(jù)比集群里的數(shù)據(jù)小很多,并且相對(duì)負(fù)載較低。
對(duì)于MongDB3.2版本的集群,如果嘗試監(jiān)控config servers的replica set的連續(xù)失敗次數(shù)超過(guò) replMonitorMaxFailedChecks的值,那么mongos或者mongd的監(jiān)控機(jī)制在重啟前無(wú)法使用。
集群元數(shù)據(jù)
Config servers將元數(shù)據(jù)保存在Config database。
在對(duì)config server進(jìn)行任何形式的維護(hù)前先備份config database。
使用以下命令訪問(wèn)config database:
use config
通常情況下,你不應(yīng)該直接編輯config database里的內(nèi)容。config database包含以下內(nèi)容:
參照 Config Database.獲得以上集合和集合的權(quán)限的更多資訊。
集合安全性
使用 Internal Authentication來(lái)保證集群內(nèi)部的安全性和避免未經(jīng)授權(quán)用戶訪問(wèn)集群。為了保證集群內(nèi)部安全性,你必須為集群的每個(gè)mongod實(shí)例開啟身份驗(yàn)證。