运维开发网

mongodb 3.4.9 sharding 数据分片集群搭建 安装文档

运维开发网 https://www.qedev.com 2017-09-14 15:27 出处:原创
一.前言 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的。而mongodb主打的就是海量数据架构,

一.前言

数据压力大到机器支撑不了的时候能否做到自动扩展?

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的。而mongodb主打的就是海量数据架构,“分片”就用这个来解决海量数据存储这个问题。

二.理论

说了这么多传统数据库的架构,那Nosql怎么去做到了这些呢?mysql要做到自动扩展需要加一个数据访问层用程序去扩展,数据库的增加、删除、备份还需要程序去控制。一但数据库的节点一多,要维护起来也是非常头疼的。不过mongodb所有的这一切通过他自己的内部机制就可以搞定!还是上图看看mongodb通过哪些机制实现路由、分片:

从图中可以看到有四个组件:mongos、config server、shard、replica set。

mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server:顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

shard:这就是传说中的分片了。上面提到一个机器就算能力再大也有天花板,就像军队打仗一样,一个人再厉害喝血瓶也拼不过对方的一个师。俗话说三个臭皮匠顶个诸葛亮,这个时候团队的力量就凸显出来了。在互联网也是这样,一台普通的机器做不了的多台机器来做,如下图:

一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。也许有人问一台机器硬盘加大一点不就可以了,为什么要分给四台机器呢?不要光想到存储空间,实际运行的数据库还有硬盘的读写、网络的IO、CPU和内存的瓶颈。在mongodb集群只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。在生产环境中分片的片键可要好好设置,这个影响到了怎么把数据均匀分到多个分片机器上,不要出现其中一台机器分了1T,其他机器没有分到的情况,这样还不如不分片!

replica set:前面已经详细讲过了这个东东,怎么这里又来凑热闹!其实上图4个分片如果没有 replica set 是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建 replica set 副本集保证分片的可靠性。生产环境通常是 2个副本 + 1个仲裁。

三.搭建

 

3.1 环境及版本

操作系统:CentOS release 6.5 (Final)

软件版本:mongodb-Linux-x86_64-rhel62-3.4.9

 

切忌关闭所有服务器防火墙或放行mongodb所有端口

测试环境  关闭所有防火墙

service iptables stop

 

3.2   架构图

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

首先确定部署数量,mongos两台,config server三台,shard服务器两台,每个shard有一个副本,一个仲裁,就是6台.这样下来总计11台服务器.   由于测试资源有限,我们分别在三台机器做测试,使用不同的端口就可以了.

 

3.3 部署服务器

主机(hosts)IP
slave210.8.1.222
slave310.8.1.223
slave410.8.1.224

3.4服务及所在服务器

服务所在IP开放端口备注
mongos10.8.1.223/10.8.1.22457017

config server10.8.1.222/10.8.1.223/10.8.1.22437017

shard110.8.1.222/10.8.1.223/10.8.1.2242701710.8.1.224 为arbiter
shard210.8.1.222/10.8.1.223/10.8.1.2242701810.8.1.224 为arbiter

3.5 下载安装

mkdir /data

cd /data

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.9.tgz

tar xzvf mongodb-Linux-x86_64-rhel62-3.4.9.tgz

mv mongodb-Linux-x86_64-rhel62-3.4.9 mongodb

cd mongodb

mkdir data

mkdir logs

mkdir conf

各目录结构如下图

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

3.6 启动配置服务器

 

在每台机器分别启动配置服务器

  /data/mongodb/bin/mongod -f /data/mongodb/conf/config.conf

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

连接任意一台服务器

 /data/mongodb/bin/mongo --host 10.8.1.222 --port 37017

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

创建配置服务器副本集

use admin

 

rs.initiate({_id:"cfgReplSet",configsvr:true,members:[{_id:0,host:"10.8.1.222:37017"},{_id:1,host:"10.8.1.223:37017"},{_id:2,host:"10.8.1.224:37017"}]})

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

3.7启动sharding服务器

 

shard1 :               分别在  10.8.1.222/10.8.1.223 执行命令:   /data/mongodb/bin/mongod -f   /data/mongodb/conf/shard1.conf

shard2 :               分别在  10.8.1.222/10.8.1.223 执行命令:   /data/mongodb/bin/mongod -f   /data/mongodb/conf/shard2.conf

arbiter :                在10.8.1.224 执行命令:/data/mongodb/bin/mongod -f /data/mongodb/conf/arbiter1.conf

/data/mongodb/bin/mongod -f   /data/mongodb/conf/arbiter2.conf

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

登陆任意分片服务器

 

/data/mongodb/bin/mongo --host 10.8.1.223 --port 27017

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

创建副本集1并初始化

 

use admin

 

rs.initiate({_id:"shard1ReplSet",members:[{_id:0,host:"10.8.1.222:27017"},{_id:1,host:"10.8.1.223:27017"},{_id:2,host:"10.8.1.224:27017",arbiterOnly:true}]})

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

创建副本集2并初始化

 

use admin

 

rs.initiate({_id:"shard2ReplSet",members:[{_id:0,host:"10.8.1.222:27018"},{_id:1,host:"10.8.1.223:27018"},{_id:2,host:"10.8.1.224:27018",arbiterOnly:true}]})

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

3.8   启动mongos路由

 

在10.8.1.223/10.8.1.224执行: /data/mongodb/bin/mongos -f   /data/mongodb/conf/route.conf

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

登陆路由服务器

 

/data/mongodb/bin/mongo --host 10.8.1.223 --port 57017

 

添加分片集群

 

sh.addShard("shard1ReplSet/10.8.1.222:27017,10.8.1.223:27017,10.8.1.224:27017")

 

sh.addShard("shard2ReplSet/10.8.1.222:27018,10.8.1.223:27018,10.8.1.224:27018")

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

 

至此,全部搭建过程已完成.

 

四,测试

我们直接使用hashed策略

 

sh.enableSharding("test")

sh.shardCollection("test.Log", { id: "hashed"})

use test

for(var i = 1; i <= 100000; i++){

  db.Log.save({id:i,"message":"message"+i});

}

db.Log.stats()

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

mongodb 3.4.9    sharding 数据分片集群搭建 安装文档

这里看到基本保持了数据的均衡。

 

附件配置文件

个服务器配置文件

0

精彩评论

暂无评论...
验证码 换一张
取 消