MongoDB分片介绍与部署

        大家好,MongoDB是一个面向文档的NoSQL数据库,以其灵活性、性能和可扩展性而闻名。而分片(Sharding)是MongoDB提供的一种水平扩展数据的方式,允许将数据分布在多个物理服务器上,以应对大规模数据的存储和处理需求。

前面跟大家分享了关于 MongoDB副本集介绍与部署,可以参考:

MongoDB副本集介绍与部署

一、分片介绍

        分片(shard)是集群中负责管理数据的各个子集的一台或多台服务器。一个分片可以由多台服务器组成。在分片中,不同的服务器负责保存数据的不同部分,它们共同组成了整个数据集。

        为了保证数据在各个分片间的均匀分布,MongoDB会自动在不同的分片之间移动数据子集。这些数据子集的移动是基于片键(shard key)来决定的。

1、分片数据

(1)一分片一区间

        分片最简单的方式就是每个分片负责存储一个区间段的数据,如用户名由4个分片进行存储,由用户名作为分片的依据那么将是如下情况:

        这种方式有一个问题,在数据迁移时,可能会造成级联效应,即如果要将第一分片中的数据均衡,可能要影响很多分片,造成移动的数据量过大,影响整个系统的正常运行。原因很简单,每个分片要保持一区间模式。

(2)一分片多区间

        这种方式可以有效的避免一分片一区间的数据迁移问题,宗旨是每个分片可以存储多个区间的数据。例子,如果[a, f)和[f, n)区间的数据比后面的两个分片都大,需要进行数据移动,则可以将[a, f)分为[a, c)和[c, f),[f, n)分为[f, j)和[j, n),并进行数据移动,则最终成为下面的分片状态:

在添加新分片后,MongoDB可以从每个分片取出部分数据,移动到新分片上。

2、创建块

        在决定如何分配数据时,必须选择一个键来定义数据的块区间,这个键被称为片键(shard key)。片键可以是任意字段或字段的组合。

        在最初的情况下,MongoDB只会创建一个数据块,该数据块的区间覆盖了整个数据集。只有当数据量达到一定程度时,MongoDB才会进行分片。一旦设置了分片配置,就需要指定片键。您可以通过使用命令 sh.shardCollection 来完成这一设置。

3、平衡

        如果存在多个可用的分片,只要块的数量足够多,MongoDB就会将数据迁移到其他分片上。这个迁移过程被称为平衡,由平衡器进程负责执行。

        触发平衡器的条件是:一个分片的块数量必须比最少块的分片多至少9个。此时,块将从拥挤的分片迁移到其他分片,直到各分片达到平衡为止。

        平衡器并不会过于敏感,否则,即使分片之间稍微不平衡,也会频繁触发平衡操作,导致系统资源的过度浪费。

以下是一些方便验证配置的方法:

(1)设置块大小(chunkSize): 可以通过设置块的大小来快速观察数据迁移过程。例如,使用 --chunkSize 1 可以将块的大小设置为1MB。这样,在插入10MB的数据后,就会触发数据迁移。

(2)递增块大小: 可以设置递增的块大小。这样,在创建前十几个块时,MongoDB会自动将块的大小从200MB逐渐降低到64MB。

4、mongos

        mongos是用户与MongoDB分片集群之间的交互点,它充当了用户访问集群的唯一入口,将复杂的处理流程隐藏在后台。简言之,所有对集群的操作都通过mongos服务进行,mongos会将用户的请求转发到相应的分片上去处理。

5、集群中的角色

构建一个MongoDB Sharding Cluster需要三种角色:

(1)Shard Server(分片服务器): 这些是mongod实例,负责存储实际的数据块。在实际生产环境中,一个Shard Server角色通常由多台机器组成一个Replica Set来承担,以防止主机单点故障。

(2)Config Server(配置服务器): 这些也是mongod实例,它们存储了整个集群的元数据,包括Chunk信息等。

(3)Route Server(路由服务器): 这些是mongos实例,充当前端路由,客户端通过它们接入集群。它们让整个集群对客户端看起来像单一的数据库,使得前端应用可以透明地使用集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒秋丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值