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做自动均衡

posted @ 2022-05-20 00:01  oldSimon  阅读(57)  评论(0编辑  收藏  举报