mongoDB分片集群

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoDB分片集群相关的知识,希望对你有一定的参考价值。

参考技术A 集群 》 片 》 块 》 文档
一个集群由多个分片组成,一个分片存储了多个块(逻辑上的数据分块),一个快包含了多个文档,文档不是最小的单位,文档存了一个个的字段,一个字段或者多个字段可以组成一个片键
片键决定数据可以分成多少块

配置表里存的数据分布范围是怎么定的?

数据在逻辑上被分成了4块,加入系统存的是公司用户信息,按照年龄来分,18-60,一个年龄一个分块,最大可以分43块,在把块分到多个分片上,但是容易造成22-25的用户数据显得特别大,导致了热点片的情况

片键不是连续的而是通过hash散列到不同的片区,解决了数据不均匀的情况,但是范围查询效率低,需要遍历全部的分片才能满足业务查询,用户的订单系统,按照下单用户id去做hash,这样不同用户的订单数据就会被均匀分到不同的分片,单查某个用户的订单数据是非常高效的,但是根据时间范围去查就要扫描全部分片

根据地域去划分

切割器:可以对某个源分片的数据按chunk去做切割
平衡器:
当某些分片数据不均匀的情况下,平衡器就发挥作用了,他会发出一个命令让切割器去需要移动的分片上去做数据切割,再把数据移动到数据少的分片上。具体的步骤如下:

平衡器向源分片发送moveChunk的命令
源分片收到命令后,会启动自己内部的一个moveChunk命令,如果在数据移动过程中有客户端发来读写请求的话,都会发送到源分片。(因为配置服务器上的元数据还没有改变)
目标片开始向源分片请求将要移动的数据块的文档,准备拷贝文档数据。
当目标分片接收到据块的最后一个文档后,目标分片会启动一个同步进程来检查,是否已经拷贝完全部的文档。
当同步完成后,目标分片会连接配置服务器,更新元数据列表中数据块的地址。
当目标分片完成元数据更新后,源分片就会删除原来的数据块.如果有新的数据块需要移动的话,可以继续进行移动。
配置服务器会通知monogs进程更新自己的映射表。

数据容量日益增长,访问性能降低

MongoDB分片集群搭建

参考技术A 分片(sharding)是一种跨多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。换句话说:分片就是将数据拆分,将其分散存在不同的机器上的过程,将数据分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更多的负载。

MongoDB分片集群包含以下组件:

下图描述了分片集群中组件的交互:

本文搭建的副本集集群是两个分片节点副本集(3+3)+一个配置节点副本集(3)+两个路由节点(2),共11个服务节点,具体如下图所示:

本次搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,具体步骤如下:

myshardrs01

设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称。

使用客户端命令连接主节点,这里最好连接主节点

执行初始化副本集命令:

查看副本集情况:

同样搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,
具体步骤如下:

myshardrs02

myshardrs01_27318

设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称

myshardrs01_27418

myshardrs01_27518

启动第二套副本集:一主一副本一仲裁

依次启动三个mongod服务:

查看服务是否启动:

新建或修改配置文件:
myconfigrs_27019:

新建或修改配置文件:
myconfigrs_27119

新建或修改配置文件:
myconfigrs_27219

依次启动配置的mongod副本集:一主两副本

查看服务是否启动:

以上是关于mongoDB分片集群的主要内容,如果未能解决你的问题,请参考以下文章

Docker——基于Docker搭建MongoDB分片集群

MongoDB——MongoDB分片集群(Sharded Cluster)两种搭建方式

MongoDB——MongoDB分片集群(Sharded Cluster)

MongoDB分片集群搭建

Mongodb集群架构之分片架构

mongoDB mongoDB分片集群