【转】mongodb Replica Sets +Sharding高可用集群搭建(含认证)
集群由三台服务器(假定ip地址为:serverA,serverB,serverC)组成,采用mongodb的复制集+分片(Replica Sets+Sharding) 实现集群的高可靠/高可用以及数据读写的负载均衡。 三台机器分成两个复制集,两个复制集组成一个集群的两个分片(shard1和shard2)。具体如下:
1、ServerA的s1-1 / ServerB的s1-2 / ServerC的s1-3 组成一个3节点的复制集s1 2、ServerA的s2-1 / ServerB的s2-2 / ServerC的s2-3 组成一个3节点的复制集s2 3、复制集s1和s2 组成有两个片的分片集群 4、为确保配置信息高可用,集群采用3个配置节点存储集群配置信息: ServerA的c1 / ServerB的c2 / ServerC的c3 5、为对外服务提供高可用,集群采用3个路由节点对外提供服务:ServerA的mongos 1 / ServerB的mongos 2/ ServerC的mongos 3,也可以结合keepalive对外提供一个vip. mongodb集群逻辑结构:


详细配置步骤如下:
1、配置shard1用到复制集 s1:
在serverA上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork
在serverB上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork
在serverC上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork
连接三个节点的任一个初始化复制集s1
>use admin
>config = {_id:'s1',members:[{_id:0,host:'serverA:27020',priority:1},{_id:1,host:'serverB:27020'},{_id:2,host:'serverC:27020'}]}
>rs.initiate(config)
>rs.status()
另外对复制集s1的所有节点都执行如下命令确保所有节点都能分担读取的压力
>db.getMongo().setSlaveOk();
2、配置shard2用到复制集 s2:
在serverA上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log --logappend --fork
在serverB上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log --logappend --fork
在serverC上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log --logappend --fork
连接三个节点的任一个初始化复制集s2
>use admin
>config = {_id:'s2',members:[{_id:0,host:'serverA:27021'},{_id:1,host:'serverB:27021',priority:1},{_id:2,host:'serverC:27021'}]}
>rs.initiate(config)
>rs.status()
另外对复制集s2的所有节点都执行如下命令确保所有节点都能分担读取的压力
>db.getMongo().setSlaveOk();
3、配置三台Config Server:
在serverA上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
在serverB上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
在serverC上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
4、配置三台Route Server:
在serverA上:mongos -fork --logpath /data
/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017
在serverB上:mongos -fork --
logpath /data
/mongo/route/log/mongo.log
--configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017