具有多个原色并且pingMS = 0的mongodb副本集

时间:2012-10-23 21:21:06

标签: mongodb replication

我正在尝试设置一个包含两个节点的副本集: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.

2 个答案:

答案 0 :(得分:5)

您提到在两台服务器上运行rs.initiate()。这应该只在一个上完成。

我建议您从头开始,删除每个节点的dbpath目录(如果db不为空,则备份数据)。然后,启动所有mongod进程,登录其中一个,然后调用

  • rs.initiate()
  • rs.add(<other node 1>)

另一个节点自动通过第一个节点获取副本集配置。对要添加的每个其他节点重复`rs.add()。

答案 1 :(得分:0)

我遇到了同样的情况,错误地在两个实例上运行rs.initiate()。我通过关闭应该是第二个实例,删除数据目录并重新启动实例来解决这个问题。重新启动后,它被正确检测为副本集的成员,正确同步,最重要的是只有一个主要成员。

此操作不应该是危险的,因为据我所知,副本集会复制节点上的所有数据。可以肯定的是,您可以在关闭辅助节点后移动数据目录,以便在发生任何错误时保留备份。