Mongodb : primary 宕机了一天,发现旧数据不同步,当前数据同步

Mongodb : Primary was down for a day, when turned up old data not synching, current data synching

我有一个 mongodb 副本集,其中有一个主副本和两个副副本,由于一些 os 问题,主副本关闭了一天。然后其中一个次要的被选为主要的。将该次级用作主要并用于应用程序。一天后,旧的主服务器出现,目前它用作辅助设备。似乎只有当前数据在这个次要数据中更新,而不是同步停机日的数据。有什么办法知道,它正在后台同步吗?如果不同步我必须做什么?我需要再次将旧的主要转换为主要,只有在所有数据都同步后才能完成。

如果您的旧 PRIMARY 变为 SECONDARY,这意味着它成功地从您的新 PRIMARY 复制了丢失的数据 ...新小学。您可以在 bson 格式的旧 PRIMARY 中的“回滚”文件夹中找到这些写入,您将需要查看这些 bson 文件并手动检查是否需要 re-insert 或再次考虑它们。

要遵循的故障排除步骤:

  1. 检查当前副本集状态:

    rs.status()

  2. 如果您有 1x PRIMARY + 2x SECONDARY 似乎一切都很好,您的成员与 PRIMARY 同步。

  3. 如果一些成员处于不同的状态,他们可能会初始化同步,您将需要等待一段时间直到进程完成或出现其他问题,因此您可能需要稍等片刻。

  4. 如果由于某种原因成员没有成功初始化同步,您可以强制重新初始化同步,以便他们从头开始尝试。

以下是启动初始化同步的简单步骤:

4.1。停止成员:

   mongo --p XXX
   use admin
   db.shutdownServer()

4.2。转到数据文件夹并删除其中的所有内容:

   cd /my_member_data_folder/
   rm -rf *

4.3。再次启动member,等到init sync成功进入SECONDARY状态。

   mongod --config my_config_file.conf
  1. 万一一切正常,您只需要将副本集切换到您的旧 PRIMARY,您只需 re-configure 该成员的优先级如下:

    newPRIMARY>var x=rs.conf()
    newPRIMARY>x.members[0].priority=10
    newPRIMARY>rs.reconfig(x)
    

假设 members[0] 是旧的 PRIMARY ,其余 member 的优先级 < 10