Mongodb副本设置状态显示“RECOVERING”

时间:2013-01-15 06:09:02

标签: mongodb replication

我已经在3个mongo服务器上设置了副本集并导入了5 GB数据。 现在显示“RECOVERING”的辅助服务器的状态。 你能否让我知道“回收”是什么意思以及如何解决这个问题。

状态如下

rs.status()
{
    "set" : "kutendarep",
    "date" : ISODate("2013-01-15T05:04:18Z"),
    "myState" : 3,
    "members" : [
        {
            "_id" : 0,
            "name" : "10.1.4.138:27017",
            "health" : 1,
            "state" : 3,
            "stateStr" : "RECOVERING",
            "uptime" : 86295,
            "optime" : Timestamp(1357901076000, 4),
            "optimeDate" : ISODate("2013-01-11T10:44:36Z"),
            "errmsg" : "still syncing, not yet to minValid optime 50f04941:2",
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.1.4.21:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 86293,
            "optime" : Timestamp(1358160135000, 18058),
            "optimeDate" : ISODate("2013-01-14T10:42:15Z"),
            "lastHeartbeat" : ISODate("2013-01-15T05:04:18Z"),
            "pingMs" : 0
        },
        {
            "_id" : 2,
            "name" : "10.1.4.88:27017",
            "health" : 1,
            "state" : 3,
            "stateStr" : "RECOVERING",
            "uptime" : 86291,
            "optime" : Timestamp(1357900674000, 10),
            "optimeDate" : ISODate("2013-01-11T10:37:54Z"),
            "lastHeartbeat" : ISODate("2013-01-15T05:04:16Z"),
            "pingMs" : 0,
            "errmsg" : "still syncing, not yet to minValid optime 50f04941:2"
        }
    ],
    "ok" : 1

2 个答案:

答案 0 :(得分:10)

“RECOVERING”副本集节点上的消息表示这些节点仍在执行初始同步。 这些节点在转换到辅助状态之前不可用于读取。

初始同步有几个步骤。

有关副本集同步过程的详细信息,请参阅此处: http://docs.mongodb.org/manual/core/replica-set-sync/

答案 1 :(得分:0)

登录到RECOVERING实例。
使用以下命令检查 RECOVERING 实例复制状态
db.printReplicationInfo()
您会得到这样的结果,

  

oplog首次活动时间:2019年7月30日星期二17:26:37 GMT + 0000(UTC)
  oplog上次活动时间:2019年7月31日星期三16:46:53 GMT + 0000
  现在:2019年8月22日星期四07:36:38 GMT + 0000(UTC)

如果您发现 oplog上次活动时间立即之间的时差。

  

这意味着该特定实例不是 PRIMARY SECONDARY ,也不是副本集活动成员

现在有两种解决方案
第一
 1.登录到 RECOVERING实例
 2.从现有的数据库中删除数据,该数据将为 / data / db
 3.重新启动此 RECOVERING实例
 4.(可选),如果发现以下错误。从指定位置删除该mongod.pid。

Error starting mongod. /var/run/mongod/mongod.pid


 5.重新启动实例。
 6.现在,您的恢复实例将处于运行状态
,它将显示PRIMARY或Secondary来代替RECOVERING。

第二
 将其他正在运行的实例数据复制到 RECOVERING实例,然后重新启动mongodb