MongoDB分片集群是什么(新手必看)
MongoDB 分片集群由以下组件构成:
关于分片集群内各组件之间的交互原理,具体描述如下图所示:

图 1 分片集群内各组件之间的交互
MongoDB 数据库在集合级别对数据进行分片,从而将集合数据分布到集群中的分片上。
对于副本集分布而言,如果有可能,可以考虑将每个副本集的一个成员部署在适合作为灾难恢复位置的站点中。
注意,将副本集成员分布在两个数据中心,比分布在一个数据中心更有优势。当成员分布在两个数据中心时,如果其中一个数据中心发生故障,数据仍可供读取;而如果所有成员都位于单个数据中心,则无法实现此功能。如果具有少数成员的数据中心出现故障,副本集仍然可以支持写入操作和读取操作。但是,如果具有大多数成员的数据中心出现故障,副本集将变为只读。
如果有可能,可将成员分布在至少 3 个数据中心。对于配置服务器副本集(CSRS),最佳实践是分布在 3 个数据中心(也可根据成员数量来增加数据中心数量)。如果使用第 3 个数据中心的成本过高,一种可行的分布方法是在两个数据中心均匀分配数据承载成员,并将剩余成员存储在云中。
对于分片数量而言,分片集群需要至少两个分片来分发分片数据。如果计划日后启用分片,但在部署时又不需要启用,那么单个分片的分片集群可能会很有用。基于 mongos 的数量和分布,mongos 路由器在部署多个 mongos 实例时支持高可用性和可扩展性。
如果代理或负载均衡器位于应用程序和 mongos 路由器之间,则必须为其配置客户端关联性。客户端关联性允许来自一个客户端的每个连接到达同一个 mongos。要实现分片级别的高可用性,可以在已运行 mongos 实例的同一硬件上添加 mongos 实例,在应用程序级嵌入 mongos 路由器。mongos 路由器会与配置服务器频繁通信。随着路由器数量的增加,性能可能会下降。如果性能下降,可减少路由器的数量。另外,最多只能部署 30 个 mongos 路由器。
在生产配置中,常用的分片集群架构如下图所示:

图 2 生产配置中常用的分片集群架构
一般来讲,这些非生产集群具有以下组件:
下图展示了仅用于开发目的的分片集群架构:

图 3 开发配置中的分片集群架构
- 分片:每个分片都包含分片数据的一个子集。每个分片都必须作为一个副本集进行部署;
- mongos:mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口;
- 配置服务器:配置服务器会存储集群的元数据和配置设置。配置服务器必须以副本集(CSRS)的形式部署。
关于分片集群内各组件之间的交互原理,具体描述如下图所示:

图 1 分片集群内各组件之间的交互
MongoDB 数据库在集合级别对数据进行分片,从而将集合数据分布到集群中的分片上。
生产配置
在 MongoDB 分片集群中,确保数据冗余和系统高可用性是生产环境的关键要求。对于生产分片集群的部署,可考虑以下事项:- 将配置服务器部署为 3 节点副本集;
- 将每个分片部署为 3 成员副本集;
- 部署一个或多个 mongos 路由器。
对于副本集分布而言,如果有可能,可以考虑将每个副本集的一个成员部署在适合作为灾难恢复位置的站点中。
注意,将副本集成员分布在两个数据中心,比分布在一个数据中心更有优势。当成员分布在两个数据中心时,如果其中一个数据中心发生故障,数据仍可供读取;而如果所有成员都位于单个数据中心,则无法实现此功能。如果具有少数成员的数据中心出现故障,副本集仍然可以支持写入操作和读取操作。但是,如果具有大多数成员的数据中心出现故障,副本集将变为只读。
如果有可能,可将成员分布在至少 3 个数据中心。对于配置服务器副本集(CSRS),最佳实践是分布在 3 个数据中心(也可根据成员数量来增加数据中心数量)。如果使用第 3 个数据中心的成本过高,一种可行的分布方法是在两个数据中心均匀分配数据承载成员,并将剩余成员存储在云中。
对于分片数量而言,分片集群需要至少两个分片来分发分片数据。如果计划日后启用分片,但在部署时又不需要启用,那么单个分片的分片集群可能会很有用。基于 mongos 的数量和分布,mongos 路由器在部署多个 mongos 实例时支持高可用性和可扩展性。
如果代理或负载均衡器位于应用程序和 mongos 路由器之间,则必须为其配置客户端关联性。客户端关联性允许来自一个客户端的每个连接到达同一个 mongos。要实现分片级别的高可用性,可以在已运行 mongos 实例的同一硬件上添加 mongos 实例,在应用程序级嵌入 mongos 路由器。mongos 路由器会与配置服务器频繁通信。随着路由器数量的增加,性能可能会下降。如果性能下降,可减少路由器的数量。另外,最多只能部署 30 个 mongos 路由器。
在生产配置中,常用的分片集群架构如下图所示:

图 2 生产配置中常用的分片集群架构
开发配置
MongoDB 数据库分片集群为了进行测试和开发,可以部署具有最少数量组件的分片集群。一般来讲,这些非生产集群具有以下组件:
- 一个 mongos 实例;
- 单个分片副本集;
- 副本集配置服务器。
下图展示了仅用于开发目的的分片集群架构:

图 3 开发配置中的分片集群架构