本人Centos6.4实际测试通过!MongoDB分片+复制集!
要求:
1.3台服务器做复制集,选举方式,每台服务器有自己的IP
2.3台服务器,每台分2片
3.config server 和 route server 部署到3台服务器
serverA:
mkdir -p /data/shardset/shard1_1
mkdir -p /data/shardset/shard2_1
mkdir -p /data/shardset/config
serverB:
mkdir -p /data/shardset/shard1_2
mkdir -p /data/shardset/shard2_2
mkdir -p /data/shardset/config
serverC:
mkdir -p /data/shardset/shard1_3
mkdir -p /data/shardset/shard2_3
mkdir -p /data/shardset/config
#shard1上配置复制集
A机器
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_1 --logpath
/data/shardset/shard1_1/shard1_1.log --logappend --fork
B机器
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_2 --logpath
/data/shardset/shard1_2/shard1_2.log --logappend --fork
C机器
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shardset/shard1_3 --logpath
/data/shardset/shard1_3/shard1_3.log --logappend --fork
#用mongo连接一台机器的27017端口的mongod,初始化repl set shard1:
./mongo --port 27017
config={_id:'shard1',members:[{_id:0,host:'192.168.1.112:27017 '},
{_id:1,host:'192.168.1.162:27017 '},{_id:2,host:'192.168.1.167:27017'}]}
rs.initiate(config)
(此处若是出现问题,先查看日志文档:1、vi /etc/sysconfig/network vi /etc/hosts 是否都已配置好?2、防火墙问题,
修改防火墙设置,或者直接关闭 service iptables stop)
#shard2上配置复制集
A机器
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_1 --logpath
/data/shardset/shard2_1/shard2_1.log --logappend --fork
B机器
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_2 --logpath
/data/shardset/shard2_2/shard2_2.log --logappend --fork
C机器
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/shardset/shard2_3 --logpath
/data/shardset/shard2_3/shard2_3.log --logappend --fork
#用mongo连接一台机器的27018端口的mongod,初始化repl set shard2:
./mongo --port 27018
config={_id:'shard2',members:[{_id:0,host:'192.168.1.112:27018'},
{_id:1,host:'192.168.1.162:27018'},{_id:2,host:'192.168.1.167:27018'}]}
rs.initiate(config)
#配置3台config server
#在server A B C 上执行
./mongod --configsvr --dbpath /data/shardset/config --port 20000 --logpath /data/shardset/config/config.log --
logappend --fork
#配置3台route server
#在server A B C 上执行
./mongos --configdb 192.168.1.112:20000,192.168.1.162:20000,192.168.1.167:20000 --port 30000 --chunkSize 1 --
logpath /data/shardset/mongos.log --logappend --fork
#配置shard cluster
#选择一台机器的30000端口,连接mongos进程:
./mongo --port 30000
use admin
db.runCommand({addshard:"shard1/192.168.1.112:27017,192.168.1.162:27017,192.168.1.167:27017"})
db.runCommand({addshard:"shard2/192.168.1.112:27018,192.168.1.162:27018,192.168.1.167:27018"})
#激活数据库和集合的分片
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1}})
分片失败出现的可能原因:每台服务器时间不同步!
参考 http://hi.baidu.com/chenghui_2311/item/4a08fc34345678e896f88df4
最终,可以用一个来测试哈!
./mongo --port 30000
use test
for(var i=0;i<=200000;i++)db.users.insert({_id:i,"name":"xxxxx","addr":"China"});
db.users.stats()
结果出现,{
“sharded”:true,........
shards{
"shard1":{.....}
"shard2":{.....}
}
}
成功!
参考文档:http://blog.csdn.net/mchdba/article/details/9856239
http://blog.sina.com.cn/s/blog_498e79cc0101115v.html
总结:很简单的一个配置,可能会遇到很多问题(防火墙、系统本来的配置问题),出现错误必须看日志文档!!