我有一个mongodb副本集,其中有一个主副本和两个辅助副本,由于一些操作系统问题,主副本已停机一天。然后其中一名中学生当选为小学生。将该辅助设备用作主设备并在应用程序中使用。一天后,旧的主要出现了,目前它正在用作次要。似乎只有当前数据在更新,而不是与停机日的数据同步。有没有办法知道,它是在后台同步?如果不同步,我该怎么办?我需要将旧的主数据再次转换为主数据,只有在所有数据都同步的情况下才能完成。
如果您的旧PRIMARY变为SECONDARY,这意味着它成功地从您的新PRIMARY复制了丢失的数据,只为在选举前存在于旧PRIMARY中的写操作(无法复制到新PRIMARY(设置例外。你可以在你的";回滚";文件夹中,如果需要重新插入或重新考虑,则需要查看这些bson文件并手动检查。
故障排除步骤如下:
-
使用检查当前replicaSet状态
rs.status((
-
如果你有1个PRIMARY+2个SECONDARY,似乎一切都很好,你的成员与PRIMARY同步。
-
如果一些成员处于不同的状态,他们可能会初始化同步,您需要等待一段时间,直到进程完成或出现其他问题,因此您可能需要稍等。
-
如果由于某种原因,成员没有成功初始化同步,您可以强制执行新的初始化同步,以便他们从头开始尝试。
以下是启动初始化同步的简单步骤:
4.1.停止会员:
mongo --p XXX
use admin
db.shutdownServer()
4.2.进入数据文件夹并删除里面的任何内容:
cd /my_member_data_folder/
rm -rf *
4.3.再次启动成员,等待init sync并成功移动到SECONDARY状态。
mongod --config my_config_file.conf
如果一切正常,您只需要将replicaSet切换到旧的PRIMARY,您只需按如下方式重新配置该成员的优先级即可:
newPRIMARY>var x=rs.conf() newPRIMARY>x.members[0].priority=10 newPRIMARY>rs.reconfig(x)
假设成员[0]是旧的PRIMARY,并且其他成员具有优先级<10