1. 群集简介 Mongodb是一个非关系型的分布式数据库,它可以通过自身的群集技术组成mongodb群集,进而实现数据库的横向扩展和数据库的高可用功能。Mongodb数据库群集分为Replica Sets(复制集)和Sharding(分片)两个部分。其中Replica Sets实现了mongodb数据库的高可用功能,Sharding分片实现了数据库的横向分布式扩展。在生产环境中搭建mongodb群集时一般都采取了Replica Sets+Sharding的解决方案。 Replica Sets+Sharding数据库群集包含三种角色,分别如下所示: 服务器配置如下: IP地址 | | | | | 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. 部署准备(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目录下: (2) 依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令: (1) 分别切换到192.168.83.45、192.168.83.46、192.168.83.47三台服务器的 /usr/local/mongodb/bin目录下: (2) 依次在192.168.83.45、192.168.83.46、192.168.83.47三台服务器上执行下述命令: (1) 连接任一mongos进程执行以下命令,这里以83.45的27017为例 (2) 切换到admin数据库 (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) 分片添加完成后可以查看分片的状态 (1) 连接任一mongos进程执行以下命令,这里以83.45的27017为例 (2) 切换到切片数据库这里以默认的test库为例 (3) 设置分片数据库激活计划分片 db.runCommand({enablesharding:"test"})-----设置分片数据库 db.runCommand({shardcollection:"test.c1",key:{_id:1}})---设置分片集合名称
(1) 连接任一mongos进程进行数据插入验证,这里以83.45的27017为例 (2) 切换到切片数据库test库 (3) 使用下述循环插入数据进行验证,这里以插入30万条数据为例 for(vari=1;i<=300000;i++)db.c1.save({_id:i,age:i,name:"zhangsan",addr:"beijing",host:"1234567890"});
(4) 如果出现下述现象则说明配置成功
|