2013-10-31 26 views
-1

我已经作出了mongodb的replicaSet与一种伯,仲和仲裁器。MongoDB的副本集最初开始在次要模式

我面临的问题是,当我最初开始的MongoDB服务器,它是被二次模式启动

也就是说Intially当我键入终端蒙戈其显示为

ubsc:SECONDARY> 

我创建使用副本集

config = {with all my server details } 
rs.reconfig(config) 

我也尝试使用rs.add(serverhoststr)选项也。

这是我下面的蒙戈外壳输出和日志文件

ubsc:PRIMARY> rs.status() 
{ 
    "set" : "ubsc", 
    "date" : ISODate("2013-10-31T19:09:26Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "mongoA:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 2210, 
      "optime" : Timestamp(1383246016, 1), 
      "optimeDate" : ISODate("2013-10-31T19:00:16Z"), 
      "self" : true 
     }, 
     { 
      "_id" : 1, 
      "name" : "mongoB:27018", 
      "health" : 1, 
      "state" : 2, 
      "stateStr" : "SECONDARY", 
      "uptime" : 576, 
      "optime" : Timestamp(1383246016, 1), 
      "optimeDate" : ISODate("2013-10-31T19:00:16Z"), 
      "lastHeartbeat" : ISODate("2013-10-31T19:09:26Z"), 
      "lastHeartbeatRecv" : ISODate("2013-10-31T19:09:24Z"), 
      "pingMs" : 0, 
      "syncingTo" : "192.168.2.67:27017" 
     }, 
     { 
      "_id" : 2, 
      "name" : "mongoC:27019", 
      "health" : 1, 
      "state" : 10, 
      "stateStr" : "ARBITER", 
      "uptime" : 550, 
      "lastHeartbeat" : ISODate("2013-10-31T19:09:26Z"), 
      "lastHeartbeatRecv" : ISODate("2013-10-31T19:09:25Z"), 
      "pingMs" : 0 
     } 
    ], 
    "ok" : 1 
} 

MongoDB的日志

Fri Nov 1 01:22:00.981 [initandlisten] MongoDB starting : pid=13177 port=27017 dbpath=/data/mongodb 64-bit host=MLDev5 
Fri Nov 1 01:22:00.982 [initandlisten] db version v2.4.6 
Fri Nov 1 01:22:00.982 [initandlisten] git version: b9925db5eac369d77a3a5f5d98a145eaaacd9673 
Fri Nov 1 01:22:00.982 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49 
Fri Nov 1 01:22:00.982 [initandlisten] allocator: tcmalloc 
Fri Nov 1 01:22:00.982 [initandlisten] options: { config: "mongod1.conf", dbpath: "/data/mongodb", fork: "true", logpath: "/data/mongodb/mongodb.log", nojournal: "true", port: 27017, replSet: "ubsc", rest: "true" } 
Fri Nov 1 01:22:01.000 [initandlisten] waiting for connections on port 27017 
Fri Nov 1 01:22:01.004 [websvr] admin web console waiting for connections on port 28017 
Fri Nov 1 01:22:01.008 [rsStart] replSet I am MongoA:27017 
Fri Nov 1 01:22:01.009 [rsStart] replSet STARTUP2 

rs.conf

ubsc:PRIMARY> rs.conf() 
{ 
    "_id" : "ubsc", 
    "version" : 10, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "mongoA:27017" 
     }, 
     { 
      "_id" : 1, 
      "host" : "mongoB:27018" 
     }, 
     { 
      "_id" : 2, 
      "host" : "mongoC:27019", 
      "arbiterOnly" : true 
     } 
    ] 
} 

请让我知道为什么最初的服务器在辅助模式下入门?

不好意思,麻烦大家,但是找不到这个

+1

没有解决没有问题。所有副本集节点都会启动,然后成为次要副本。 *然后*他们可以通过选举成为主要。这就是它的工作原理。 –

回答

5

没有解决问题 - 这是副本集是如何工作的。

节点不能成为而不存在选举初选。因此,每个节点(ARBITER除外)都会出现并成为SECONDARY,然后其中一个节点可以成为PRIMARY(通过选举)。

因此,这是正常的,和预期,而不是一个问题,所以没有办法解决。

+0

在这种情况下,它不应该显示为Secondary也知道? – Pawan

+1

我不知道你在问什么 - 每个不是仲裁者的节点都会成为SECONDARY。然后会有选举,如果可能的话,其中一个将被选为主要。 –

+0

非常感谢。 – Pawan

2

您还没有设置任何副本集成员优的解决方案,因此MongoDB是自由选择其中之一将是主要的。就你而言,MongoA。由于MongoC是一个仲裁者,因此它不能成为主要的。

如果你wan't强制成员是主要的,提高其优先级。默认优先级是1。

为了确保MongoA第一:

var cfg = rs.conf() 
cfg.members[0].priority = 2 
cfg.members[1].priority = 1 
rs.reconfig(cfg) 

为了确保MongoB第一:

var cfg = rs.conf() 
cfg.members[0].priority = 1 
cfg.members[1].priority = 2 
rs.reconfig(cfg) 

http://docs.mongodb.org/manual/tutorial/force-member-to-be-primary/

+0

谢谢,我会试试这个。 – Pawan

+0

这是无关紧要的 - 节点将始终启动并成为辅助节点,然后才能成为主节点。 –

+0

如果Preethi想要确保在启动过程后选择哪个节点为主节点,那么它是相关的。否则,你是对的,开始时一个成员cannoy成为初选直到选举发生,并且没有问题需要解决。 – Rafa