分片是在多台机器之间存储数据记录的过程,MongoDB是满足数据增长需求的方法。 随着数据的大小增加,单个机器可能不足以存储所有数据,也不能提供可接受的读写吞吐量。 分片解决了水平缩放的问题。 使用分片,可以添加更多的机器来支持数据增长和读写操作的需求。
为什么要分片?
- 在复制中,所有写入都转到主节点
- 延迟敏感查询到主节点
- 单个副本集合有
12
个节点的限制 - 当活动数据集较大时,内存不足够大
- 本地磁盘不够大
- 垂直扩缩太昂贵了
MongoDB中的分片
下图显示了使用分片集群的 MongoDB 分片。
在上图中,有三个主要组件 -
碎片(Shards) - 碎片用于存储数据。它们提供高可用性和数据一致性。 在生产环境中,每个分片是一个单独的副本集。
配置服务器(Config Servers) - 配置服务器存储集群的元数据。 该数据包含集群的数据集与分片的映射。查询路由器使用此元数据将操作定位到特定的分片。 在生产环境中,分片集群正好有
3
个配置服务器。查询路由器(Query Routers) - 查询路由器基本上是 mongo 实例,与客户端应用程序的接口和直接操作到适当的分片。 查询路由器处理并将操作定向到碎片,然后将结果返回给客户端。 分片集群可以包含多个查询路由器来分割客户端请求负载。 客户端向一个查询路由器发送请求。 一般来说,分片集群有许多查询路由器。