首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初识MongoDB分片

分片是指将数据拆分,拆分后存放在不同的机器上的过程,以此来降低单个服务器的压力,同时也解决单个服务器硬盘空间不足的问题,让我们可以用廉价的机器实现高性能的数据架构。有的小伙伴不理解分片和副本集的差异,一言以蔽之:副本集上每个备份节点存储的数据都是相同的,分片上存储的数据则是不同的。好了,本文我们就先来看看分片环境的搭建。

本文是MongoDB系列的第十八篇文章,了解前面的文章有助于更好的理解本文:

环境准备

准备三台已经装好了MongoDB的服务器,地址分别是:

本文使用的MongoDB版本为3.4.9

规划

首先我们需要三台配置服务器,配置服务器相当于集群的大脑,配置服务器中保存着集群和分片的元数据,即每个分片都包含了哪些数据信息,这些数据都是保存在配置服务器中的,我这里将开启三个配置服务器实例,这三个配置服务器将运行在三个MongoDB服务器上,地址分别如下:

接下来需要一个Mongos实例,Mongos对请求进行路由,Mongos扮演的角色有点类似于一个门面,我们以后访问的时候,直接访问Mongos即可,再由Mongos将请求路由到不同的分片上去,Mongos在启动时会去访问配置服务器,它将从配置服务器中获取数据的存储信息,Mongos我将启动在如下服务器上:

最后需要三个分片实例,三个分片依然运行在三台服务器上,如下:

搭建配置服务器

配置服务器中不需要太多的空间和资源,因为配置服务器上保存的只是数据的分布表,不保存具体的数据,具体的数据都保存在分片上,配置服务器中1KB的空间约为200MB的真实数据。注意,从MongoDB3.4开始,配置服务器要做成集群的方式。

由于配置服务器是独立的mongod进程,所以我们可以像启动普通的MongoDB服务一样启动配置服务器,只是这里的配置不同罢了。

我这里以服务器为例来讲述配置服务器的配置启动,另外两台服务器如法炮制即可:

1.在mongodb解压目录下创建db20000文件夹,用来存储配置服务器中的数据。

2.复制一份mongodb.conf,命名为mongodb20000.conf,修改文件内容如下:

注意dbpath改为我们第一步创建的目录,端口号改为20000(这个随意,只要该端口没被占用即可),configsvr表示这是一个配置服务器,另外由于我们的配置服务器要做成备份集,所以要设置replSet。

3.做好前两步之后,执行如下命令启动配置服务器:

最后,在另外两台服务器上重复上面三个步骤。

三台服务器上都启动成功之后,参考我们之前的MongoDB副本集搭建一文,将这三台配置服务器配成一个副本集,副本集的配置我这里就不再赘述。

搭建Mongos

Mongos实例我们可以启动在任意一台服务器上,我这里就启动在上,Mongos的配置步骤如下:

1.复制一份mongodb.conf,命名为mongos.conf,修改内容:

因为mongos中不需要保存数据,所以不需要dbpath,端口号改为30000,configdb表示三个配置服务器的地址,注意最前面的rs表示配置服务器副本集的名称。

2.配置完成后,执行如下命令启动mongos:

搭建三个分片

三个分片实际上就是三个普通的MongoDB服务器,给大家看下我的配置文件:

注意多了个shardsvr表示这是一个分片服务器。

然后在三台服务器上分别执行如下命令启动分片:

添加分片

上面三个步骤完成之后,我们就进入到mongos的shell命令行了,如下:

然后我们可以通过如下命令查看一下分片的当前状态:

执行结果如下(部分):

shards表示分片服务器,目前还没有,databases表示分片的库,目前也还没有,接下来我们通过如下命令添加分片服务器:

添加三个分片服务器,然后再执行,结果如下(部分):

设置集合分片

接下来我们来设置集合的分片,首先执行如下命令表示给某个数据库分片:

对集合分片时,需要选择一个片键,片键实际上就是集合中的一个键,MongoDB将根据这个片键来拆分数据,我们需要先对片键建立索引,如下:

然后以x为片键,对c1集合进行分片,如下:

做完这些之后,再执行命令,查看目前状态,结果如下(部分):

做完上面这些之后,我们再做两个操作:

1.设置自动分片:

2.设置chunksize,chunksize这一项是用来指定chunk的大小的,为了方便测试分片效果,我们把chunksize指定为1MB,即当这个分片中插入的数据大于1M时开始进行数据分片

OK,做好这些之后,大功告成。

测试

测试方式很简单,我们直接在mongos的命令行向sang的c1集合中插入50000条数据,然后再查看这些数据的分布,就知道分片有没有成功了:

然后执行,结果如下:

OK,看到如上结果,说明我们的数据已经分布在三个分片服务器中了。

好了,MongoDB中分片环境的搭建我们就先说到这里,小伙伴们有问题欢迎留言讨论。

参考资料:

1.《MongoDB权威指南第2版》

更多资料请关注公众号:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180104G030W500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券