我正在尝试设置具有两个节点的副本集:Node0 和 Node1。我从 Node0 初始化了一个名为“rs0”的副本集并将 Node1 添加到它。问题是它被添加为主节点而不是辅助节点,最终结果是具有两个主节点的副本集。
这是从Node0执行rs.status()
命令的结果
"set" : "rs0",
"date" : ISODate("2012-10-23T21:03:37Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "Node0:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 61185,
"optime" : Timestamp(1350967947000, 1),
"optimeDate" : ISODate("2012-10-23T04:52:27Z"),
"self" : true
},
{
"_id" : 1,
"name" : "Node1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 58270,
"optime" : Timestamp(1350956423000, 1),
"optimeDate" : ISODate("2012-10-23T01:40:23Z"),
"lastHeartbeat" : ISODate("2012-10-23T21:03:37Z"),
"pingMs" : 0
}
],
如果我从 Node1 执行相同的命令,列出的唯一节点就是它自己。请注意,pingMs 为 0。尝试添加第三个节点或仲裁器会得到类似的结果:每个节点都作为主节点添加,而 pingMS 始终为 0。
最佳答案
您提到您运行 rs.initiate()
在两台服务器上。这应该只在一个上完成。
我建议您从头开始,删除每个节点的 dbpath 目录(如果 db 不为空,请备份之前的数据)。然后,启动所有mongod进程,登录其中一个,然后调用
-
rs.initiate()
-
rs.add(<other node 1>)
另一个节点自动通过第一个节点获取副本集配置。对要添加的每个附加节点重复 `rs.add()。
关于具有多个主节点和 pingMS=0 的 mongodb 副本集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13039443/