这两天在学习搭建Mongo DB复制集,查阅了一些资料,主要是参照官方手册,但是遇到了下面的问题。
采用的mongo DB的版本是当前最新版本3.0.6
单机,多端口搭建复制集,按照官方手册,没有遇到问题。
多机,都是默认27017端口遇到问题。
机器规划如下:
192.168.3.60 primary
192.168.3.61 secondary
192.168.3.67 secondary
我首先配置了host文件,三台机器可以相互访问。
(1)三台机器的配置文件内容如下,都是一样的
systemLog:
destination: file
path: /software/mongodb/data/log/mongodb.log
logAppend: true
storage:
dbPath: /software/mongodb/data/db
replication:
replSetName: rs0
(2)通过bin/mongod –config mongo.config启动mongo DB服务
(3)我在60上面,通过mongo 命令连接mongo DB
` 按照官方手册的话,我直接在60节点上执行:
1)rs.initiate()方法,此时60变成primary节点,可以使用rs.isMaster()查看其相关状态,可以通过rs.status()方法查看状态;
2)rs.add(“host61”),使用该方法添加61节点,但是添加之后,通过rs.status()查看状态的时候,新添加的61节点,state:0,stateStr:”STARTUP”状态;
也就是说,好像是不能够动态的添加节点,不知道是我操作有问题,还是官方说明手册有问题。
除此之外,通过查找资料,发现可以通过这种方式来大家复制集
执行了上面的(1)、(2)、(3)之后,在执行rs.initiate()方法的时候,通过传递参数来实现
(4)第(3)步之后,如果执行rs.status(),可以看到下面的提示信息
{
“info” : “run rs.initiate(…) if not yet done for the set”,
“ok” : 0,
“errmsg” : “no replset config has been received”,
“code” : 94
}
此时不要直接执行rs.initiate()方法,先定义变量:
var config = {_id:”rs0″, members:[{_id:0, host:”host60″}, {_id:1, host:”host61″}, {_id:2, host:”host67″}]};
把此参数作为上面参数的方法
执行:rs.initiate(config)方法
再次查看rs.status()可以看到复制集搭建成功。
可是这样的话,没办法动态的为复制集添加节点了?
是官方手册有问题,还是我执行的操作过程有问题?
(1)我的三台机器host都配置了;
(2)我使用的是最新的版本,3.0.6
(3)你上面提到的rs.reconfig()方法,我测试了,没有成功。
我使用了上面的方法之后,通过rs.status()看到如下状态:
{
“_id” : 2,
“name” : “host60:27017”,
“health” : 1,
“state” : 0,
“stateStr” : “STARTUP”,
“uptime” : 4,
“optime” : Timestamp(0, 0),
“optimeDate” : ISODate(“1970-01-01T00:00:00Z”),
“lastHeartbeat” : ISODate(“2015-10-16T00:49:47.117Z”),
“lastHeartbeatRecv” : ISODate(“1970-01-01T00:00:00Z”),
“pingMs” : 0,
“configVersion” : -2
}
当我去使用60连接本地mongodb的时候,使用rs.status()方法提示未初始化的。
所以我感觉是在第一次初始化的时候,传递参数,它能把其他节点都给一起初始化的,但是单个添加新的节点的时候,它没能完成初始化。
但是出现上面的问题,不知道是我环境配置的原因,还是官方操作手册的说明有问题。在单机,开多端口模拟的情况下,可以使用rs.add()方法动态的添加节点。