Centos上MongoDB数据库 Replica Sets +Sharding 方案实现

本人Centos6.4实际测试通过!MongoDB分片+复制集!
要求:
1.3台服务器做复制集,选举方式,每台服务器有自己的IP
2.3台服务器,每台分2片
3.config server 和 route server 部署到3台服务器

Centos上MongoDB数据库 Replica Sets +Sharding 方案实现_第1张图片

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

总结:很简单的一个配置,可能会遇到很多问题(防火墙、系统本来的配置问题),出现错误必须看日志文档!!

你可能感兴趣的:(MongoDB)