【发布时间】:2025-12-24 00:05:18
【问题描述】:
我在 MongoDB 3.0.2 上构建了一个包含一个主、一个辅助和一个仲裁器的复制集。主节点和仲裁节点在同一台主机上,而从节点在另一台主机上。
随着写过载的增加,Secondary无法跟随Primary步入recovering状态。主服务器可以连接到辅助服务器,因为我可以通过主服务器上的 Mongo shell 登录到辅助服务器。
我停止所有操作并使用命令rs.status() 观察辅助节点的状态,然后在辅助节点上键入命令rs.syncFrom("primary's ip:port")。
然后rs.status()命令的结果显示secondary的optimeDate远远落后于primary,间歇性出现一条消息如下:
"set" : "shard01",
"date" : ISODate("2015-05-15T02:10:55.382Z"),
"myState" : 3,
"members" : [
{
"_id" : 0,
"name" : "xxx.xxx.xxx.xxx:xxx",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 135364,
"optime" : Timestamp(1431655856, 6),
"optimeDate" : ISODate("2015-05-15T02:10:56Z"),
"lastHeartbeat" : ISODate("2015-05-15T02:10:54.306Z"),
"lastHeartbeatRecv" : ISODate("2015-05-15T02:10:53.634Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1431520398, 2),
"electionDate" : ISODate("2015-05-13T12:33:18Z"),
"configVersion" : 3
},
{
"_id" : 1,
"name" : "xxx.xxx.xxx.xxx:xxx",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 135364,
"lastHeartbeat" : ISODate("2015-05-15T02:10:53.919Z"),
"lastHeartbeatRecv" : ISODate("2015-05-15T02:10:54.076Z"),
"pingMs" : 0,
"configVersion" : 3
},
{
"_id" : 2,
"name" : "xxx.xxx.xxx.xxx:xxx",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 135510,
"optime" : Timestamp(1431602631, 134),
"optimeDate" : ISODate("2015-05-14T11:23:51Z"),
"infoMessage" : "could not find member to sync from",
"configVersion" : 3,
"self" : true
}
],
"ok" : 1
"infoMessage" : "找不到要同步的成员"
主节点和仲裁节点都OK。我想知道此消息的原因以及如何将辅助的状态从“正在恢复”更改为“辅助”。
【问题讨论】:
-
请发布
rs.status()的输出并尝试从三个有问题的辅助设备连接到主设备上为mongod配置的端口。 -
我无法附加图片,
rs.status()的输出如下所示:"stateStr" : "PRIMARY", "optimeDate" : ISODate("2015-05-15T06:32:52Z")," "stateStr" : "RECOVERING", "optimeDate" : ISODate("2015-05-14T11 :23:51Z") -
请编辑您的问题并将
rs.status()的输出放在那里,以便人们更容易获得有关您问题的更多信息。我同意@MarkusWMahlberg 的观点,你首先应该确保主次元之间没有连接问题。
标签: mongodb replication