MongoDB Sharding Cluster 分片集群
MongoDB Sharding Cluster 分片集群
官方文档说明:
https://docs.mongodb.com/v3.6/sharding/#sharded-cluster

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 由分片数据的子集组成。每个分片都包含有基于分片键的上下文

Router 根据分片键值写入适当的块。 当使用超出64MB的块时,MongoDB会对其进行拆分。 插入和更新都可以触发chunks的拆分。
chunk 使用的最小范围是单个唯一的分片键值。 仅包含具有单个分片键值的文档的块无法进行拆分。
Sharded Cluster Balancer
Balancer 是一个后台进程,用于监视每个shard上的Chunks。 当给定shard上的Chunks达到特定的迁移阈值时,balancer 将尝试自动在shard 之间进行 Chunks迁移,保证每个shard 的Chunks数相等。
在MSC群集内,Balancer操作 Chunks的迁移过程对于用户和应用程序是完全透明的,不过在迁移过程中可能会影响性能

MSC 优势
1、多分片策略
具备多种分片方案,可以自动分片,也可以通过手工指定分片策略,来减轻chunk迁移的性能影响。
常用分片方案:range、hash。一般使用hash较多,hash 是根据shard节点均匀的进行分片
2、配置信息由Config Server统一管理
3、灵活的架构扩展,自动数据迁移
无论添加还是删除shard节点,balancer都会自动对shard 节点内的chunk做自动均衡
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律