1.       群集简介

Mongodb是一个非关系型的分布式数据库,它可以通过自身的群集技术组成mongodb群集,进而实现数据库的横向扩展和数据库的高可用功能。Mongodb数据库群集分为Replica Sets(复制集)和Sharding(分片)两个部分。其中Replica Sets实现了mongodb数据库的高可用功能,Sharding分片实现了数据库的横向分布式扩展。在生产环境中搭建mongodb群集时一般都采取了Replica Sets+Sharding的解决方案。

Replica Sets+Sharding数据库群集包含三种角色,分别如下所示:

  • Shard:使用Replica Sets确保每个数据节点都有备份、自动容错转移、自动恢复能力。

  • Config:存储元数据,确定元数据的完整性

  • Router:实现访问的负载均衡,提高客户端访问性能

服务器配置如下:

IP地址

内存配置

Cpu配置

硬盘

OS

192.168.83.45

8G

2*4

100G

CentOs6.4 64bit

192.168.83.46

8G

2*4

100G

CentOs6.4 64bit

192.168.83.47

8G

2*4

100G

CentOs6.4 64bit

表格 1

2.2.    服务器部署规划

本次服务器部署规划信息如下:

IP地址

服务

端口

数据目录

日志目录

192.168.83.45

Mongod s1-1

27020

/data/mongo/s1_1/db

/data/mongo/s1_1/log

Mongod s2-1

27021

/data/mongo/s2_1/db

/data/mongo/s2_1/log

Mongod c1

27018

/data/mongo/config/db

/data/mongo/config/log

Mogos 1

27017


/data/mongo/route/log


192.168.83.46

Mongod s1-2

27020

/data/mongo/s1_2/db

/data/mongo/s1_2/log

Mongod s2-2

27021

/data/mongo/s2_2/db

/data/mongo/s2_2/log

Mongod c2

27018

/data/mongo/config/db

/data/mongo/config/log

Mogos 2

27017


/data/mongo/route/log


192.168.83.47

Mongod s1-3

27020

/data/mongo/s1_3/db

/data/mongo/s1_3/log

Mongod s2-3

27021

/data/mongo/s2_3/db

/data/mongo/s2_3/log

Mongod c3

27018

/data/mongo/config/db

/data/mongo/config/log

Mogos 3

27017


/data/mongo/route/log

表格 2

2.3.    部署准备

  • 部署前检查服务器网络,确保网络通信正常

  • 部署前确保mongodb软件已经拷贝到上述三台服务器上,本次部署使用的是mongodb-linux-x86_64-2.4.5版本

  • S1

(1)       将mongodb-linux-x86_64-2.4.5.tar分别拷贝到192.168.83.45、192.168.83.46、192.168.83.47的/usr/local目录下

(2)       分别切换到三台服务器的/usr/local目录下,使用tar xvzf mongodb-linux-x86_64-2.4.5.tar将软件包解压缩到/usr/local目录下

(3)       分别在三台服务器的/usr/local目录下使用mv mongodb-linux-x86_64-2.4.5 mongodb命令将文件夹重命名为mongodb

(4)       在83.45服务器上分别创建如下目录

mkdir –p /data/mongo/s1_1/db   mkdir –p /data/mongo/s1_1/log

(5)       在83.46服务器上分别创建如下目录

mkdir –p /data/mongo/s1_2/db  mkdir –p /data/mongo/s1_2/log

(6)       在83.47服务器上分别创建如下目录

(7)       mkdir –p /data/mongo/s1_3/db  mkdir –p /data/mongo/s1_3/log

(8)       切换到83.45服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log--logappend –fork

(9)       切换到83.46服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log--logappend –fork

(10)   切换到83.47服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s1 --port 27020--dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log--logappend –fork

(11)   连接三个节点的任一个初始化复制集s1,这里以连接到83.45的27020为例,执行下述命令:

./mongo –port 27020

(12)   切换到admin数据库

Useadmin

(13)   依次执行下述命令对复制集S1初始化

  • config={_id:'s1',members:[{_id:0,host:'192.168.83.45:27020'},{_id:1,host:'192.168.83.46:27020'},{_id:2,host:'192.168.83.47:27020'}]}

  • rs.initiate(config)

(14)   初始化完成后查看复制集的状态,执行如下命令:

rs.status()

3.2.    部署复制集S2

(1)       在83.45服务器上分别创建如下目录

mkdir –p /data/mongo/s2_1/db   mkdir –p /data/mongo/s2_1/log

(2)       在83.46服务器上分别创建如下目录

mkdir –p /data/mongo/s2_2/db  mkdir –p /data/mongo/s2_2/log

(3)       在83.47服务器上分别创建如下目录

mkdir –p /data/mongo/s2_3/db  mkdir –p /data/mongo/s2_3/log

(4)       切换到83.45服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log--logappend --fork

(5)       切换到83.46服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log--logappend --fork

(6)       切换到83.47服务器的/usr/local/mongodb/bin目录下执行如下命令:

./mongod --shardsvr --replSet s2 --port 27021--dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log--logappend --fork

(7)       连接三个节点的任一个初始化复制集s2,这里以连接到83.45的27021为例,执行下述命令:

./mongo –port 27021

(8)       切换到admin数据库

Useadmin

(9)       依次执行下述命令对复制集S1初始化

  • config={_id:'s2',members:[{_id:0,host:'192.168.83.45:27021'},{_id:1,host:'192.168.83.46:27021'},{_id:2,host:'192.168.83.47:27021'}]}

  • rs.initiate(config)

(10)    初始化完成后查看复制集的状态,执行如下命令:

rs.status()

3.3.    配置configserver

(1)         分别切换到192.168.83.45、192.168.83.46、192.168.83.47三台服务器的  /usr/local/mongodb/bin目录下:

  • Cd/usr/local/mongodb/bin

(2)         依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令:

  • ./mongod  --configsvr --dbpath /data/mongo/config/db--port 27018 --logpath /data/mongo/config/log/mongo.log –fork

  • routeserver

(1)         分别切换到192.168.83.45、192.168.83.46、192.168.83.47三台服务器的  /usr/local/mongodb/bin目录下:

  • Cd/usr/local/mongodb/bin

(2)         依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令:

  • ./mongos--fork--configdb"192.168.83.45:27018,192.168.83.46:27018,192.168.83.47:27018"--logpath /data/mongo/route/log/mongo.log --port 27017

  • ShardCluster

(1)         连接任一mongos进程执行以下命令,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到admin数据库

  • Useadmin

(3)         依次执行下述命令添加分片

  • db.runCommand({addshard:"s1/192.168.83.45:27020,192.168.83.46:27020,192.168.83.47:27020"})

  • db.runCommand({addShard:"s2/192.168.83.45:27021,192.168.83.46:27021,192.168.83.47:27021"})

(4)         分片添加完成后可以查看分片的状态

  • db.printShardingStatus()

(1)         连接任一mongos进程执行以下命令,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到切片数据库这里以默认的test库为例

  • Usetest

(3)         设置分片数据库激活计划分片

  • db.runCommand({enablesharding:"test"})-----设置分片数据库

  • db.runCommand({shardcollection:"test.c1",key:{_id:1}})---设置分片集合名称

(1)         连接任一mongos进程进行数据插入验证,这里以83.45的27017为例

  • ./mongo192.168.83.45:27017

(2)         切换到切片数据库test库

  • Usetest

(3)         使用下述循环插入数据进行验证,这里以插入30万条数据为例

  • for(vari=1;i<=300000;i++)db.c1.save({_id:i,age:i,name:"zhangsan",addr:"beijing",host:"1234567890"});

(4)         如果出现下述现象则说明配置成功

 

wKioL1X7syvzFuXzAAGS-7elPEc340.jpg

wKiom1X7sPLD5jh5AAE1F5RksGU152.jpg