MongoDB中使用分片集群结构分布:
Shard:
用于存储实际的数据块,提供高可用性和数据的一致性。
分片就是指将数据拆分,将其分散存在不同的机器上的过程。
每个分片会包含分片数据的一部分。每个分片都可以部署为副本集(replica set)。
每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replication Set。为了实现每个Shard内部的auto-failover(自动故障切换),MongoDB官方建议每个Shard为一组Replica Set
Config Server:
mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
这些元数据信息记录了集群数据到分片的映射。
对数据操作时,路由使用这些元数据定位操作到明确的分片中。
config节点为至少3个节点的复制集
为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key(片键),例如{age: 1} ,shard key可以决定该条记录属于哪个chunk(分片是以chunk为单位)。
Config Servers就是用来存储:所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。
Query Routers:
前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。(所有操作在mongos上操作即可)
shard的replica set的架构图:
config servers的replica set的架构图: