2012-09-20 66 views
0

我试图配置一个具有两个节点的副本集,但是当我执行rs.add("node2")然后rs.status()时,两个节点都设置为PRIMARY。另外,当我在另一个节点上运行rs.status()时,出现的唯一节点就是本地节点。mongodb - 副本集中的所有节点都是主要的

EDIT1: rs.status()输出:

{ 
     "set" : "rs0", 
     "date" : ISODate("2012-09-22T01:01:12Z"), 
     "myState" : 1, 
     "members" : [ 
       { 
         "_id" : 0, 
         "name" : "node1:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 70968, 
         "optime" : Timestamp(1348207012000, 1), 
         "optimeDate" : ISODate("2012-09-21T05:56:52Z"), 
         "self" : true 
       }, 
       { 
         "_id" : 1, 
         "name" : "node2:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 68660, 
         "optime" : Timestamp(1348205568000, 1), 
         "optimeDate" : ISODate("2012-09-21T05:32:48Z"), 
         "lastHeartbeat" : ISODate("2012-09-22T01:01:11Z"), 
         "pingMs" : 0 
       } 
     ], 
     "ok" : 1 
} 

EDIT2:我试过3个不同的节点做同样的事情,我得到了相同的结果(rs.status()说我有一个副本有三个主要节点设置)。这个问题是否可能是由网络的某些特定配置引起的?

+2

您不应创建具有偶数个节点的ReplicaSet。如果您有空间问题,请添加一个仲裁节点(没有存储空间,但可以投票选择主节点)作为第三个节点。 –

+0

你可以用'rs.status()'的输出更新你的问题吗?确保在发布之前使输出匿名。 –

+0

已更新它。对于迟到的回复感到抱歉 – miguel

回答

1

如果您在rs.add()之前从副本集的两个成员中发出rs.initiate(),那么两者都会成为主要副本。

您应该只使用rs.initiate()在副本集的成员之一,你打算是主要最初一个。那么你可以将rs.add()的其他成员复制到集合中。

+0

我刚刚意识到这一点。谢谢! – miguel

+3

但你如何解决它? – schmoopy

0

答案上面并没有回答如何解决它。我有点用试验和错误来完成它。

我已经清除了数据目录(如在rm -rf *)和重新启动这些主节点,除了一个。我加回他们。它似乎工作。

EDIT1
下可爱的小伎俩似乎没有为我工作,


所以,我登录到使用mongo <hostname>:27018

这里的壳怎么看起来像mongod控制台:

rs2:PRIMARY> rs.conf() 
{ 
    "_id" : "rs2", 
    "version" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "ip-10-159-42-911:27018" 
     } 
    ] 
} 

我决定去查将它改为次要的。所以,

rs2:PRIMARY> var c = { 
... "_id" : "rs2", 
... "version" : 1, 
... "members" : [ 
...  { 
...  "_id" : 1, 
...  "host" : "ip-10-159-42-911:27018", 
...  "priority": 0.5 
...  } 
... ] 
... } 

rs2:PRIMARY> rs.reconfig(c, { "force": true}) 
Mon Nov 11 19:46:39.244 DBClientCursor::init call() failed 
Mon Nov 11 19:46:39.245 trying reconnect to ip-10-159-42-911:27018 
Mon Nov 11 19:46:39.245 reconnect ip-10-159-42-911:27018 ok 
reconnected to server after rs command (which is normal) 

rs2:SECONDARY> 

现在它是次要的。我不知道是否有更好的方法。但是,这似乎工作。

HTH

相关问题