MongoDB中使用分片集群結(jié)構(gòu)分布:
Shard:
用于存儲實(shí)際的數(shù)據(jù)塊卦尊,提供高可用性和數(shù)據(jù)的一致性哑姚。
分片就是指將數(shù)據(jù)拆分昭雌,將其分散存在不同的機(jī)器上的過程渔扎。
每個分片會包含分片數(shù)據(jù)的一部分。每個分片都可以部署為副本集(replica set)夭问。
每個Shard可以是一個mongod實(shí)例泽西,也可以是一組mongod實(shí)例構(gòu)成的Replication Set。為了實(shí)現(xiàn)每個Shard內(nèi)部的auto-failover(自動故障切換)缰趋,MongoDB官方建議每個Shard為一組Replica Set
Config Server:
mongod實(shí)例捧杉,存儲了整個 ClusterMetadata陕见,其中包括 chunk信息。
這些元數(shù)據(jù)信息記錄了集群數(shù)據(jù)到分片的映射糠溜。
對數(shù)據(jù)操作時淳玩,路由使用這些元數(shù)據(jù)定位操作到明確的分片中。
config節(jié)點(diǎn)為至少3個節(jié)點(diǎn)的復(fù)制集
為了將一個特定的collection存儲在多個shard中非竿,需要為該collection指定一個shard key(片鍵)蜕着,例如{age: 1} ,shard key可以決定該條記錄屬于哪個chunk(分片是以chunk為單位)红柱。
Config Servers就是用來存儲:所有shard節(jié)點(diǎn)的配置信息承匣、每個chunk的shard key范圍、chunk在各shard的分布情況锤悄、該集群中所有DB和collection的sharding配置信息韧骗。
Query Routers:
前端路由,客戶端由此接入零聚,且讓整個集群看上去像單一數(shù)據(jù)庫袍暴,前端應(yīng)用可以透明使用。
客戶端由此接入隶症,然后詢問Config Servers需要到哪個Shard上查詢或保存記錄政模,再連接相應(yīng)的Shard進(jìn)行操作,最后將結(jié)果返回給客戶端蚂会×苎客戶端只需要將原本發(fā)給mongod的查詢或更新請求原封不動地發(fā)給Routing Process,而不必關(guān)心所操作的記錄存儲在哪個Shard上胁住。(所有操作在mongos上操作即可)
shard的replica set的架構(gòu)圖:
config servers的replica set的架構(gòu)圖: