MongoDB分片集群由以下组件组成:
-
shard:每个分片包含分片数据的子集。每个分片必须部署为副本集。
-
mongos:
mongos
充当查询路由器,提供客户端应用程序和分片集群之间的接口。mongos
可以支持 对冲读取以最小化延迟。 - config servers:配置服务器存储集群的元数据和配置设置。从 MongoDB 3.4 开始,配置服务器必须部署为副本集 (CSRS)。
生产配置
在生产集群中,确保数据冗余并且系统高度可用。对于生产分片集群部署,请考虑以下事项:
-
将 Config Server 部署为 3 成员副本集
-
将每个分片部署为 3 成员副本集
-
部署一台或多台
mongos
路由器
副本集分布
如果可能,请考虑将每个副本集的一个成员部署在适合作为灾难恢复位置的站点中。
mongos
数量及分布
mongos
路由器经常与您的配置服务器通信。随着路由器数量的增加,性能可能会下降。如果性能下降,请减少路由器的数量。您的部署不应超过 30 个mongos
路由器。
开发配置
为了进行测试和开发,您可以部署具有最少数量组件的分片集群。这些非生产集群具有以下组件:
仅将测试集群架构用于测试和开发。
分片shard
分片包含分片集群的分片数据的子集。集群的分片共同保存集群的整个数据集。
分片必须部署为副本集以提供冗余和高可用性。
primary shard
分片集群中的每个数据库都有一个主分片,用于保存该数据库的所有未分片集合。每个数据库都有自己的主分片。主分片与副本集中的主分片没有关系。
Shard Status
Use the sh.status()
method in mongosh
to see an overview of the cluster.
配置服务器
配置服务器存储分片集群的元数据。元数据反映了分片集群内所有数据和组件的状态和组织。元数据包括每个分片上的块列表以及定义块的范围。
实例mongos
缓存此数据并使用它来将读写操作路由到正确的分片。mongos
当集群的元数据发生更改时更新缓存,例如添加分片。分片还从配置服务器读取块元数据。
每个分片集群必须有自己的配置服务器。不要对不同的分片集群使用相同的配置服务器。
副本集配置服务器
数据库admin
和配置数据库存在于配置服务器上。
配置服务器可用性
如果配置服务器副本集丢失其主副本并且无法选择主副本,则集群的元数据将变为只读。您仍然可以从分片读取和写入数据,但在副本集可以选择主分片之前,不会发生块迁移或块分割。
在分片集群中,mongod
实例mongos
监控分片集群中的副本集(例如分片副本集、配置服务器副本集)。
如果所有配置服务器都不可用,则集群可能无法运行。为了确保配置服务器保持可用且完好无损,配置服务器的备份至关重要。与集群中存储的数据相比,配置服务器上的数据较小,并且配置服务器的活动负载相对较低。
mongos路由
从应用程序的角度来看,提供了分片集群的唯一接口。应用程序从不直接与分片连接或通信。
路由和结果处理
实例通过以下方式将查询路由到mongos集群:
-
确定必须接收查询的分片列表。
-
在所有目标分片上建立游标。
然后mongos
合并来自每个目标分片的数据并返回结果文档。在 mongos检索结果之前,会在每个分片上执行某些查询修饰符(例如排序) 。