我有Meteor项目,复制了两个mongoDB服务器 它工作得很好但是当我测试一些DB错误模拟时, mongoDB复制的主要选举和多操作日志设置与我的工作方式不同。
这是我的Meteor和MongoDB设置。
- MongodB -
rs.conf()
{
"_id" : "meteor",
"version" : 6,
"members" : [
{
"_id" : 0,
"host" : "hostname1:27017",
"priority" : 2.5
},
{
"_id" : 1,
"host" : "hostname2:27017",
"priority" : 1.5
}
]
}
rs.status()
{
"set" : "meteor",
"date" : ISODate("2014-10-08T10:40:38Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "hostname1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 462,
"optime" : Timestamp(1412764634, 2),
"optimeDate" : ISODate("2014-10-08T10:37:14Z"),
"electionTime" : Timestamp(1412764612, 1),
"electionDate" : ISODate("2014-10-08T10:36:52Z"),
"self" : true
},
{
"_id" : 1,
"name" : "hostname2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 234,
"optime" : Timestamp(1412764634, 2),
"optimeDate" : ISODate("2014-10-08T10:37:14Z"),
"lastHeartbeat" : ISODate("2014-10-08T10:40:37Z"),
"lastHeartbeatRecv" : ISODate("2014-10-08T10:40:37Z"),
"pingMs" : 141,
"syncingTo" : "hostname2:27017"
}
],
"ok" : 1
}
- Meteor Environment -
MONGO_OPLOG_URL=mongodb://hostname1:27017,hostname2:27017/local MONGO_URL=mongodb://hostname1:27017/sports meteor
我假设如果我终止DB hostname1,那么hostname2应该由Primary选举,因此我的Meteor服务器可以将其OPLOG URL重定向到它。
但是当我终止hostname1时,hostname2仍然是Secondary并且Meteor无法找到任何oplog服务器。
即使我终止了hostname2,主要的hostname1也被改为Secondary,因此Meteor也找不到任何oplog服务器。
我想我错过了一些重要的东西,但我无法弄清楚。
有没有人对此有所了解?
提前致谢。
答案 0 :(得分:2)
您的MONGO_URL需要包含副本集的两个成员。 Meteor构建在mongo的节点驱动程序上,因此必须知道副本集的两个成员才能正常进行故障转移。