Mar*_*lli 4 replication mongodb mongodb-3.0
这里有这个问题:
但这不是我要找的答案。
下面有一个问题,这可能是相关的,但不一样。
这个问题几乎是重复的,但涉及 2.6.11 版,我的是 3.0 版和 3.2 版。另外,除非我需要,否则我不想使用force : 1。
我一直在努力将答案中描述的大多数内容付诸实践,也许有一个例子或澄清,因此是这个问题。
我的复制工作正常,3 个节点,node1 是主节点。
当我运行以下命令时
//-----------------------------
//check the status of the replication
//-----------------------------
rs.status()
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
{
"set" : "Krishna",
"date" : ISODate("2016-04-26T14:59:40.263Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "jpb01275:37001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1022,
"optime" : Timestamp(1461678841, 1),
"optimeDate" : ISODate("2016-04-26T13:54:01Z"),
"electionTime" : Timestamp(1461682464, 1),
"electionDate" : ISODate("2016-04-26T14:54:24Z"),
"configVersion" : 239068,
"self" : true
},
{
"_id" : 1,
"name" : "jpb01275:37002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1022,
"optime" : Timestamp(1461678841, 1),
"optimeDate" : ISODate("2016-04-26T13:54:01Z"),
"lastHeartbeat" : ISODate("2016-04-26T14:59:40.206Z"),
"lastHeartbeatRecv" : ISODate("2016-04-26T14:59:40.179Z"),
"pingMs" : 0,
"configVersion" : 239068
},
{
"_id" : 2,
"name" : "jpb01275:37003",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1022,
"optime" : Timestamp(1461678841, 1),
"optimeDate" : ISODate("2016-04-26T13:54:01Z"),
"lastHeartbeat" : ISODate("2016-04-26T14:59:40.238Z"),
"lastHeartbeatRecv" : ISODate("2016-04-26T14:59:39.593Z"),
"pingMs" : 0,
"configVersion" : 239068
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
发生的事情是我不得不停止 node1 (jpb01275:37001) 并且 node2 成为主要的。当我再次启动 node1 时,我希望它再次成为主节点。
我所做的是
登录到 node2 和 node3 然后依次运行以下命令:
rs.stepDown()
Run Code Online (Sandbox Code Playgroud)
并且 node1 作为主节点返回。
我还在 node1 上尝试了以下操作,但它对我不起作用。
//-----------------------------
// reconfigure the replica set
// because I stopped this server and now it is secondary
// I want it back to primary
//-----------------------------
cfg = rs.conf()
printjson(cfg)
cfg.members = [cfg.members[0] , cfg.members[1] , cfg.members[2]]
rs.reconfig(cfg, {force : true})
Run Code Online (Sandbox Code Playgroud)
带回 node1 并将其设置为此复制的主节点的正确、最安全的方法是什么?
通常,您不会。从主要或次要的角度考虑您的节点是错误的处理方式。由于标准数据承载节点应该具有相同的维度,因此最好将它们视为副本集成员,其中一个被选为主节点。由于驱动程序具有副本集意识并且知道当前主服务器是哪个,因此您应该在连接字符串中提供多个服务器,例如
mongodb://jpb01275:37001,jpb01275:37002/?replicaSet=Krishna
Run Code Online (Sandbox Code Playgroud)
设置固定副本集主节点没有优势。
如果你真的必须这样做,你需要做一个
rs.stepDown(90,30)
Run Code Online (Sandbox Code Playgroud)
在当前主节点上重复该操作,直到您选择的节点在 90 秒内成为主节点(设置的第一个数值)。有关详细信息,请参阅的文档rs.stepDown()。
| 归档时间: |
|
| 查看次数: |
10586 次 |
| 最近记录: |