我正在使用 mongoDB 来管理托管在 3 个 Amazon 实例上的应用程序。我有一个优先级最高的主节点 (100) 和 2 个优先级分别为 99 和 98 的辅助节点。几天前,我在访问主节点时开始收到 MongoCursorExceptions。我认为这与我的主服务器资源耗尽且响应缓慢有关,因此我决定将其中一个辅助节点切换为主节点。
我将优先级从 100、99 和 98 更改为 1、100、98,但这并没有将我的辅助服务器切换为主服务器。在检查我的副本集的状态时,我发现 3 个节点没有正确同步,因为 optime 落后了 17 个小时以上。真正令人担忧的是,两个辅助节点的 optime 都是恒定的,而主节点的 optime 却不断增加。我还使用 slaveOk 查询验证了我的辅助节点没有最新数据。以下是我在主节点上获得的状态:
PRIMARY> rs.status()
{
"set" : "rs_a",
"date" : ISODate("2012-02-28T09:34:50Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "server1.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1330421648000,
"i" : 2
},
"optimeDate" : ISODate("2012-02-28T09:34:08Z"),
"self" : true
},
{
"_id" : 1,
"name" : "server2.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "server3.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
}
],
"ok" : 1
}
我在日志中找不到太多信息。有几次,辅助服务器上的日志报告连接到主服务器时出现问题。但有趣的是,所有写回都在辅助节点上正确完成。我希望所有服务器始终保持最新状态,这样我就可以从任何节点读取数据,因为这就是我首先使用 mongoDB 的原因。
答案1
我设法通过在辅助节点上重新启动 mongod 解决了此问题。我认为节点已进入陈旧状态。