MongoDB Sharding Cluster 分片集群
MongoDB Sharding Cluster 分片集群
官方文档说明:
https://docs.mongodb.com/v3.6/sharding/#sharded-cluster
![](D:\data\Sync-data\simon\学习笔记\Mysql 笔记\MySql-DBA\Mongodb\NoSQL-Mongodb-06-MSC组件工作流程.assets\Sharded-Cluster结构-01.png)
Router(Mongos)
负责接受读写请求,把请求路由分片群集中的shard节点。
mongos 是没有数据的无状态服务
mongos实例会缓存config server的配置信息数据,并将会话请求的读写操作路由到正确的shard节点。 当config server数据发生更改(比如chunk拆分或添加 shard)时,mongos都会更新缓存。
Config Server
由一组eplicaSet 复制集构成,负责记录MSC所有的节点信息
config server 存储分片群集的元数据,身份验证配置信息,管理分布式锁。
元数据是分片群集中所有数据和组件的状态和组织信息。
元数据还包括每个shard节点上可用chunk列表和chunk的使用范围
Config Server 副本集不支持 1主1从1Arbiter结构,必须是1个主+2个slave
Shard
负责存储"文档"数据
shard节点会从config server读取chunk 的元数据信息
一个Shard节点,是由一组ReplicaSet复制集组成
从MongoDB 3.6起,必须将shard部署为ReplicaSet副本集,以提供冗余和高可用性
Shard节点2个或多个
官方详细说明:
https://docs.mongodb.com/v3.6/core/sharded-cluster-shards/
Chunks
Chunks是 Shard的存储单元,一个Chunks默认大小为64MB,当使用超出64MB的块时,MongoDB将对其进行拆分。
MongoDB 使用与 collection 关联的 shard key 将数据划分为chunks。chunks 由分片数据的子集组成。每个分片都包含有基于分片键的上下文
![](D:\data\Sync-data\simon\学习笔记\Mysql 笔记\MySql-DBA\Mongodb\NoSQL-Mongodb-06-MSC组件工作流程.assets\Data-partitioning -with-chunks.png)
Router 根据分片键值写入适当的块。 当使用超出64MB的块时,MongoDB会对其进行拆分。 插入和更新都可以触发chunks的拆分。
chunk 使用的最小范围是单个唯一的分片键值。 仅包含具有单个分片键值的文档的块无法进行拆分。
Sharded Cluster Balancer
Balancer 是一个后台进程,用于监视每个shard上的Chunks。 当给定shard上的Chunks达到特定的迁移阈值时,balancer 将尝试自动在shard 之间进行 Chunks迁移,保证每个shard 的Chunks数相等。
在MSC群集内,Balancer操作 Chunks的迁移过程对于用户和应用程序是完全透明的,不过在迁移过程中可能会影响性能
![](D:\data\Sync-data\simon\学习笔记\Mysql 笔记\MySql-DBA\Mongodb\NoSQL-Mongodb-06-MSC组件工作流程.assets\Sharded Cluster Balance.png)
MSC 优势
1、多分片策略
具备多种分片方案,可以自动分片,也可以通过手工指定分片策略,来减轻chunk迁移的性能影响。
常用分片方案:range、hash。一般使用hash较多,hash 是根据shard节点均匀的进行分片
2、配置信息由Config Server统一管理
3、灵活的架构扩展,自动数据迁移
无论添加还是删除shard节点,balancer都会自动对shard 节点内的chunk做自动均衡