• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MongoDB分片集群部署实例(四)

MongoDB 彭东稳 8年前 (2016-03-30) 22704次浏览 已收录 0个评论

MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源。在这里我使用的是MongoDB 3.2版本进行复制集实验(但MongoDB配置文件使用的是老版本格式)。

一、实验环境

1)节点信息:192.168.60.10

2)节点确保iptablesselinux已关闭

3)实验环境图

MongoDB分片集群部署实例(四)

上图就是我的实验环境图。而在生产环境中,mongos节点最少是两个或是更多节点,Config Server节点做成一个复制集,而Shard节点则更应该是复制集已保证数据的安全性。所以就可以考虑在使用资源最少的情况下从而部署可靠的分片集群,如下示意图。

MongoDB分片集群部署实例(四)

二、安装MongoDB 3.2

PS:需要的软件包可以去https://repo.mongodb.org/yum/redhat/下载,MongoDB的安装很简单,怎么安装都成。

三、配置集群

1)创建所需要的目录

2)创建每个节点需要的配置文件及参数

Shard节点(192.168.60.10:27018

一个shard节点可以是一个单独的mongod或者是一个replica set。在生产环境中,每个分片都应该是一个复制集。Shard进程的默认端口就是27018。参见部署复制集将每个分片部署为复制集。

PS:更多具体参数详细含义请看《MongoDB命令行选项介绍》

Shard节点(192.168.60.10:27028

Config Server节点(192.168.60.10:27019

配置服务器必须开启1个(会有警告)或则3个,开启2个则会报错。Config server的默认端口就是27019。另外从MongoDB3.2开始,config servers可以部署为一个复制集,但这个复制集中的config server节点必须是WiredTiger存储引擎。

单节点Config Server

Mongos节点(192.168.60.10:27017

mongos实例是轻量服务,并且不需要数据目录,所以只需要记录一下日志即可。你可以将 mongos 运行在已经部署了其他服务的系统中,比如应用服务器或者运行了mongod的机器上,mongos默认运行在 27017 端口上。

3)启动各节点

Shard

Config Server

Mongos

查看进程三个节点都启动了

4)向集群中添加分片

好了,到此为止MongoDB分片环境已经配置完毕了。接下来就是为这个集群添加分片了,大概步骤如下:

步骤一、连接到mongos

步骤二、添加2个点节点Shard(必须在admin数据库下进行)

步骤三、为集群数据库开启分片

mongos节点上只有config默认数据库,上面创建了一个shardtest库,然后进入到admin数据库开启shardtest数据库分片。

步骤四、对一个集合进行分片

这里对user集合创建一个片键,对userid字段进行创建片键(shard key)并使用哈希值做索引,保证数据的均衡。但注意的是这里的shardtest.user集合里面没有数据。

5)测试分片

使用db.user.stats()方法查看集合的状态信息,跟分片相关的会有这么几个参考值。

1. “sharded” : true

可以看出此集合是开启了分片的,如果值为false的话就表示未开启分片。

2. “shards”

标识这个集合有几个shard,然后每一个shard下面都会有很多参考信息,具体的就不说了。

使用sh.status()方法或db.printShardingStatus()命令查看分片状态信息。

MongoDB分片集群部署实例(四)

下面在mongos节点上写了一个for循环往shardtest.user集合中插入100000条数据,看看是否平均分配存储到两个shard上面了。

然后登录到shard节点192.168.60.10:27018进行数据查看。

然后登录到shard节点192.168.60.10:27028进行数据查看。

由这两个节点可以看出,插入的100000条数据大致平均地分到了2shard节点上了。如果此时再加入一个shard节点的话会怎么样呢?会进行数据块(chunk)迁移以保证均衡吗?下面我们再添加一个shard节点。

向集群中添加一个shard节点(192.168.60.10:27038

1)创建并启动节点

启动shard节点

2)然后在mongos节点中添加shard即可。

此时在用sh.status()查看分片的状态.

MongoDB分片集群部署实例(四)

就会发现shards节点有了变化,且balancer:Currently running状态变为yes,进行数据块的迁移。当数据块迁移完成之后database:chunks显示的节点就会变成三个,如下,其数据分配比例是1:2:1

此时再看三个shard节点的数据分配情况,均衡器是根据数据块来进行迁移的,而默认数据块大小为64M,如下:

上面是使用哈希分片,如果100000条数据使用以范围为基础分片,那么3Shard节点又会怎样存储数据呢?下面来看一看,测试时最好使用大数据量进行测试,我这数据量太小可能测不出很好的效果。

1)对一个集合进行分片

2)循环插入数据

3)查看集群状态

从这个状态可以看出,当一个集合内写入的数据达到可以分给多个shard的时候,这里用了100000条数据分别存储在shard0000shard0001shard0002这三个shard上。然后我们看下面对应的三条算法:

第一行、$minkey表示从最小的键到1的文档存储到shard0001.

第二行、表示从127的文档存储到shard00002上面.

第三行、表示从27到最后所有的文档存储在shard0000上面.

具体的数据分配方式暂时还不太清楚,等待后续补充。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!