采用该文档进行MongoDB集群环境迁移,需确保
1. 两套MongoDB集群环境架构一致,且采用命令方式部署。本文档以如下架构集群MongoDB为例进行讲解MongoDB集群迁移部署。
MongoDB集群部署拓扑图
2. 两套MongoDB软件版本一致
进入MongoDB目录,执行创建数据、日志文件夹。
服务器1 执行命令:
#mkdir -p data
#mkdir -p data/shard11
#mkdir -p data/shard21
#mkdir -p logs
服务器2 执行命令:
#mkdir -p data
#mkdir -p data/shard12
#mkdir -p data/shard23
#mkdir -p logs
服务器3 执行命令:
#mkdir -p data
#mkdir -p data/shard13
#mkdir -p data/shard23
#mkdir -p logs
说明:shardmn,其中m代表分片编号,n代表备份编号。如上命令,共1和2两个分片,每个分片共2备份。如shard11,有备份shard12和shard13。
进入MongoDB的bin目录,每台服务器执行命令启动2个分片数据节点。
服务器1 执行命令:
#./mongodb -shardsvr -replSet shard1 -port 27017 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard11 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard11.log -logappend -fork
#./mongodb -shardsvr -replSet shard2 -port 27018 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard21 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard21.log -logappend -fork
说明:
(1) shard1表示:分片编号,通用为shardn,n为具体数字;
(2) 27017表示:该进程使用的端口;
(3) -dbpath后面的路径表示:分片数据文件存放的路径;
(4) -logpath后面路径表示:分片日志文件存放路径
(5) -logappend -fork表示:后台运行进程
服务器2 执行命令:
#./mongodb -shardsvr -replSet shard1 -port 27017 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard12 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard12.log -logappend -fork
#./mongodb -shardsvr -replSet shard2 -port 27018 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard22 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard22.log -logappend -fork
服务器3 执行命令:
#./mongodb -shardsvr -replSet shard1 -port 27017 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard13 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard13.log -logappend -fork
#./mongodb -shardsvr -replSet shard2 -port 27018 -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/shard23 -oplogSize 100 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/logs/shard23.log -logappend -fork
副本集将分片节点关联起来。
只需在一台服务器上进行副本集分配命令执行。通常默认执行该命令的服务器的分配为master,其余服务器为备份。
如在服务器1登录分片1控制台,命令 #./mongo -port 27017
分配分片1副本集命令:
>config = {_id: 'shard1', members: [
{_id: 0, host: '服务器1 IP:27017'},
{_id: 1, host: '服务器2 IP:27017'},
{_id: 2, host: '服务器3 IP:27017'}]
}
> rs.initiate(config);
说明:rs.initiate(config);为初始化配置命令
在服务器2登录分片2控制台,命令:#./mongo -port 27018
进行分片2副本集命令:
>config = {_id: 'shard2', members: [
{_id: 0, host: '服务器1 IP:27018'},
{_id: 1, host: '服务器2 IP:27018'},
{_id: 2, host: '服务器3 IP:27018'}]
}
> rs.initiate(config);
分别在三台服务器上执行命令:
#./mongod -configsvr -dbpath /app/mongodb-linux-x86_64-rhel62-3.0.4/config -port 20000 -logpath /app/mongodb-linux-x86_64-rhel62-3.0.4/data/config.log -logappend –fork
说明:
(1) -dbpath后面跟着目录是配置文件存放路径
(2) -port后面跟着20000是进程使用的端口地址
(3) -logpath后面跟着目录是进程启动日志文件存放路径
(4) -logappend -fork表示:后台运行进程
分别在三台服务器上执行命令:
# ./mongos -configdb 192.168.2.33:20000,192.168.2.34:20000,192.168.2.35:20000 -port 30000 -chunkSize 5 -logpath / app /mongodb-linux-x86_64-rhel62-3.0.4/data/mongos.log -logappend –fork
说明:
(1) -configdb 后面跟着三台配置服务器的IP及端口地址
(2) -port 后面跟着进程使用的端口地址
(3) -logpath 后面跟着路由进程对应日志存放地址
(4) -logappend -fork表示:后台运行进程
1. 连接到其中一台服务器的mongs进程,并切换至admin数据库。
命令:
#./mongos -port 30000
>use admin;
2. 配置分片,本文档例子中仅有两个分片,所以执行命令:
>db.runCommand( { addshard : "shard1/192.168.2.33:27017,192.168.2.34:27017,192.168.2.35:27017",name:"s1"} );
>db.runCommand( { addshard : "shard2/192.168. 2.33:27018,192.168.2.34:27018,192.168.2.35:27018",name:"s2"} );
说明:配置分片时,需更改分片相关服务器IP和端口地址
3. 配置分片验证,命令:
> db.runCommand( { listshards : 1 } );
说明:如果列出了以上两个你加的shards,表示shards已经配置成功,如图所示。
配置分配成功验证结果
1. 连接到其中一台服务器的mongs进程,并切换至admin数据库。
命令:
#./mongos -port 30000
>use admin;
2. 激活数据库分片,命令:
>db.runCommand( { enablesharding : “DB_NAME” } );
1. 连接到其中一台服务器的mongs进程,并切换至admin数据库。
命令:
#./mongos -port 30000
>use admin;
2. 集合分片,命令:
>db.runCommand( { shardcollection : "DB_NAME.COLLECTION_NAME",key : {id: 1} } );
将需要迁移的MongoDB –Data下的分片数据文件中的DB_NAME文件复制到对应服务器的对应相同目录下。
如源服务器1的shard11和shard21文件夹中DB_NAME文件复制到目标服务器1的shard11和shard21文件中。
1. 连接到其中一台服务器的mongs进程,并切换至DB_NAME数据库。
命令:
#./mongos -port 30000
>use DB_NAME;
2. 添加索引
1. 连接到其中一台服务器的mongs进程,并切换至DB_NAME数据库。
命令:
#./mongos -port 30000
>use DB_NAME;
2. 查看数据库状态,命令:
>db.stats();
说明:若数据库状态中包含全部分片,则说明数据迁移成功,如图所示。同时,既然是数据迁移,则dataSize应不为0。
1. 连接到其中一台服务器的mongs进程,并切换至DB_NAME数据库。
命令:
#./mongos -port 30000
>use DB_NAME;
2. 查看数据库中的集合状态,如查看EVENT集合状态命令:
>db.EVENT.stats();
说明:
(1) 集合中shard状态为true;
(2) Count数量大于0;
(3) 有具体分片的数据信息