MongoDB副本集Secondary节点状态确认:该节点是否正常?
MongoDB副本集节点状态异常分析
我有一个包含3个节点的MongoDB副本集,读写均使用Primary节点,这是一个遗留系统,使用率较低,使用的MongoDB版本为2.6.11。当我在其中一个Secondary节点上运行isMaster命令时,得到如下响应:
{ "setName" : "PROD DB", "setVersion" : 5, "ismaster" : false, "secondary" : false, "hosts" : [ "xxxxxxxxxx:27017", "xxxxxxxxxy:27017", "xxxxxxxxz:27017" ], "primary" : "xxxxxxxxxx:27017", "me" : "xxxxxxxxxy:27017", "maxBsonObjectSize" : 16777216, "maxMessageSizeBytes" : 48000000, "maxWriteBatchSize" : 1000, "localTime" : ISODate("2024-08-01T04:10:16.843Z"), "maxWireVersion" : 2, "minWireVersion" : 0, "ok" : 1.0 }
该节点的ismaster和secondary字段均为false,请问这个Secondary节点是否正常工作?
同时附上rs.status()的执行结果:
{ "set" : "PROD DB", "date" : ISODate("2024-08-02T00:55:47.000Z"), "myState" : 3, "members" : [ { "_id" : 0, "name" : "xxxy:27017", "health" : 1.0, "state" : 3, "stateStr" : "RECOVERING", "uptime" : 17607969, "optime" : Timestamp(1702118685, 6), "optimeDate" : ISODate("2023-12-09T10:44:45.000Z"), "infoMessage" : "still syncing, not yet to minValid optime 66aad5e1:60", "self" : true }, { "_id" : 2, "name" : "xxxz:27017", "health" : 1.0, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 17607969, "optime" : Timestamp(1722560139, 1), "optimeDate" : ISODate("2024-08-02T00:55:39.000Z"), "lastHeartbeat" : ISODate("2024-08-02T00:55:46.000Z"), "lastHeartbeatRecv" : ISODate("2024-08-02T00:55:46.000Z"), "pingMs" : 0, "syncingTo" : "xxxx:27017" }, { "_id" : 3, "name" : "xxxx:27017", "health" : 1.0, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 17607969, "optime" : Timestamp(1722560139, 1), "optimeDate" : ISODate("2024-08-02T00:55:39.000Z"), "lastHeartbeat" : ISODate("2024-08-02T00:55:46.000Z"), "lastHeartbeatRecv" : ISODate("2024-08-02T00:55:46.000Z"), "pingMs" : 0, "electionTime" : Timestamp(1702118698, 1), "electionDate" : ISODate("2023-12-09T10:44:58.000Z") } ], "ok" : 1.0 }
状态分析
- 从
rs.status()结果可见,该节点(_id:0,name:xxxy:27017)处于RECOVERING(state:3)状态,infoMessage明确显示它仍在同步数据,未达到最小有效操作时间点(minValid optime)。 - 在MongoDB 2.6版本中,处于RECOVERING状态的节点不会被标记为secondary,因此
isMaster返回secondary:false是该状态下的正常表现——只有节点完成数据同步、进入SECONDARY(state:2)状态后,isMaster才会返回secondary:true。 - 该节点健康状态(
health:1.0)正常,但数据进度远落后于Primary(optimeDate停留在2023年12月,而Primary和另一个Secondary的optimeDate为2024年8月),当前无法承担Secondary节点的角色。
结论
这个节点没有正常工作,它处于恢复同步阶段,尚未完成数据同步,无法提供Secondary节点的服务。建议等待其完成同步,或排查同步缓慢的原因(如网络延迟、数据量过大、Primary节点负载等)。
内容的提问来源于stack exchange,提问作者pavo kristiani
相关产品推荐
相关产品推荐

