黑龙江华云合创科技有限公司
实施运维部
2016年7月文档修改记录
一、环境介绍
1.mongo集群各组件介绍
mongo集群有四个组件:mongos、config server、shard、replica set。
mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求转发到对应的shard服务器上。在生产环境通常有多个mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
config server:配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos 本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从config server加载配置信息,以后如果配置服务器信息变化会通知到所有的mongos更新自己的状态。在生产环境通常有多个config server配置服务器,因为它存储了分片路由的元数据,只要还有config server 存活,mongodb集群就不会挂掉。
shard:数据分片,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。
replica set:分片的副本级,保证分片的可靠性。
2.mongo集群架构图
本方案中各个组件的数量为mongos3个、config server3个、shard server3个,每个shard包含一个副本和一个仲裁也就是3*2=6个,总共需要部署15个实例。这些实例可以部署在多台服务器上也可以部署在一台服务器上,本方案部署在三台服务器上。
3.环境描述
硬件环境:
角色IP CPU内存硬盘机器1172.17.78.16722G30G
机器2172.17.78.16822G30G
机器3172.17.78.16922G30G
软件环境:
主机名IP操作系统mongo版本
test1172.17.78.167CentOS6.5 3.2.6
test2172.17.78.168CentOS6.5 3.2.6
test3172.17.78.169CentOS6.5 3.2.6
二、mongo集群部署
1.在每台服务器上创建mongo安装目录
[root@test1~]#mkdir-p/data/mongodbtest
[root@test1~]#cd/data/mongodbtest
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/mongos/log
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/config/data
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/config/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/mongos/log
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard1/data
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard1/log
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard2/data
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard2/log
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard3/data
[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard3/log
2.下载mongodb
[root@test1~]#cd/data/mongodbtest
[root@test1mongodbtest]#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_6 4-amazon-3.2.6.tgz
[root@test1mongodbtest]#tar-xvf mongodb-linux-x86_-amazon-3.2.6.tgz
[root@test1mongodbtest]#mv mongodb-linux-x86_-amazon-3.2.6mongodb
3.在每台服务器上启动配置服务
[root@test1mongodbtest]#/data/mongodbtest/mongodb/bin/mongod--configsvr–d bpath/data/mongodbtest/config/data--port21000--logpath/data/mongodbtest/con fig/log/config.log–fork
4.在每台服务器上启动mongos服务
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongos--configdb172.17.78.16 7:21000,172.17.78.168:21000,172.17.78.169:21000--port20000--logpath/data/mong odbtest/mongos/log/mongos.log–fork
5.在每台服务器上配置各个分片的副本集
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d1--port22001--dbpath/data/mongodbtest/shard1/data--logpath/data/mongodbtest/shard1/log/shard1.log--fork--nojournal--oplogSize100
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d2--port22002--dbpath/data/mongodbtest/shard2/data--logpath/data/mongod btest/shard2/log/shard2.log--fork--nojournal--oplogSize100
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d3--port22003--dbpath/data/mongodbtest/shard3/data--logpath/data/mongodb test/shard3/log/shard3.log--fork--nojournal--oplogSize100
登陆任意服务器,配置分片副本集
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22001 mongos>use admin
switched to db admin
mongos>config={_id:"shard1
{_id:0,host:"172.17.78.167:22001
{_id:1,host:"172.17.78.168:22001
{_id:2,host:"172.17.78.169:22001
]
}
mongos>rs.initiate(config);
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22002 mongos>use admin
switched to db admin
mongos>config={_id:"shard2
{_id:0,host:"172.17.78.167:22002
{_id:1,host:"172.17.78.168:22002
{_id:2,host:"172.17.78.169:22002
]
}
mongos>rs.initiate(config);
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22003 mongos>use admin
switched to db admin
mongos>config={_id:"shard3
{_id:0,host:"172.17.78.167:22003
{_id:1,host:"172.17.78.168:22003
{_id:2,host:"172.17.78.169:22003
]
}
mongos>rs.initiate(config);
6.设置分片配置,让分片生效
[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:20000 mongos>use admin
switched to db admin
mongos>db.runCommand({addshard:"shard1/172.17.78.167:22001,172.17.78.168:2 2001,172.17.78.169:22001
mongos>db.runCommand({addshard:"shard2/172.17.78.167:22002,172.17.78.168:2 2002,172.17.78.169:22002
mongos>db.runCommand({addshard:"shard3/172.17.78.167:22003,172.17.78.168:2 2003,172.17.78.169:22003
mongos>db.runCommand({listshards:1});
{
"shards":[
{
"_id":"shard1
"host":"shard1/172.17.78.167:22001,172.17.78.168:22001"
},
{
"_id":"shard2
"host":"shard2/172.17.78.167:22002,172.17.78.168:22002
{
"_id":"shard3
"host":"shard3/172.17.78.167:22003,172.17.78.168:22003"
}
],
"ok":1
}
7.测试mongo集群
mongos>db.runCommand({enablesharding:"testdb
{"ok":1}
mongos>db.runCommand({shardcollection:"testdb.table1
[root@test1~]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:20000 mongos>use testdb
switched to db testdb
mongos>for(var i=1;i<=100000;i++)db.table1.save({id:i,"test1":"testval1
mongos>db.table1.stats();