此篇文章为mongo官方文档,版本为3.2. 地址为:https://docs.mongodb.com/v3.2/core/sharded-cluster-components/
分片(Sharding)
分片是一个在多个主机上分发数据的方法。 MongoDB用分片实现大数据集合和高吞入量操作。
大数据量集合和高吞吐量操作应用数据库系统挑战单个服务器的容量。例如,高请求速率能耗尽CPU性能。工作集大小大于系统的RAM给磁盘驱动器的I / O性能施加压力
有两种方法处理系统的增长:垂直扩展和水平扩展
垂直扩展涉及扩大单个服务器的性能,例如使用更强大的CPU,添加更多RAM,或者增加存储空间。可用技术中的限制可能会限制单个机器的工作负载能力。另外,云服务提供商在可用的硬件配置上设置上限。所以,对于垂直扩展存在实际的最大值。
水平扩展涉及将系统的数据集切分并通过多服务器加载,添加另外的服务器来扩大需要的容量。既然单个机器的整体速度和容量不高,那么每个机器处理整个工作量的一部分,可能提供比一个高速度高容量服务器更好的效果。扩展部署的容量仅需要根据需要添加额外的服务器,总体成本可能比单个机器的高端硬件低。
MongoDb支持通过分片来进行水平扩展。
分片集群
MongoDB的分片集群由以下组件组成:
- 分片(shard):每个分片包含被分片数据的子集。每个分片可以被部署成副本集
- mongos:mogos扮演查询路由(query router)的角色,提供一个在客户端个分片集群之间的接口
- config servers: 配置服务器存储元数据(metadata)并配置集群的设置。在MongoDB 3.4,配置服务器必须部署成副本集
下面这张图描述了在一个分片集群中的交互
MongoDB分片数据是collection级别的,在集群中分发collection数据