文档菜单
文档首页
/
MongoDB 手册
/ / /

重新同步自管理副本集的成员

本页内容

  • 步骤

当副本集成员的复制过程落后太多,以至于主节点覆盖了成员尚未复制的oplog条目时,该成员变为“过时”。成员无法赶上并变为“过时”。当这种情况发生时,您必须通过删除其数据并执行一个 初始同步 来完全重新同步成员。

本教程解决了对过时成员进行重新同步和使用来自另一个成员的种子数据创建新成员的问题,这两者都可以用于恢复副本集成员。在同步成员时,选择系统具有带宽移动大量数据的时间。在低使用时间或维护窗口期间安排同步。

MongoDB提供了两种进行初始同步的选项

注意

为了防止改变写法定数,一次不要旋转超过一个副本集成员。

警告

在初始同步期间,mongod会删除dbPath目录的内容。

此过程依赖于MongoDB的常规副本集同步过程,该过程将当前数据存储在成员上。有关MongoDB初始同步过程的概述,请参阅副本集同步部分。

初始同步操作可能影响集合中的其他成员,并向主节点创建额外的流量。同步成员需要集合中另一个可访问且更新的成员。

如果实例没有数据,您可以根据向自管理副本集添加成员替换自管理副本集成员的过程向副本集添加新成员。

您还可以强制已加入集合的mongod实例执行初始同步,方法是在不包含dbPath目录内容的情况下重启实例。

  1. 停止成员的mongod实例。为确保干净关闭,请使用来自mongoshdb.shutdownServer()方法或在Linux系统上使用mongod --shutdown选项。

  2. (可选) 从成员的dbPath目录备份数据和子目录。如果不需要完整备份,请考虑仅备份diagnostic.data目录以在出现问题时保留可能有用的故障排除数据。有关更多信息,请参阅全天诊断数据捕获

  3. 删除成员的 dbPath 目录下的所有数据和子目录。

  4. 重启 mongod 进程.

此时,mongod 执行初始同步。初始同步过程的长度取决于数据库的大小和副本集成员之间的网络延迟。

这种方法使用副本集现有成员的数据文件“播种”新的或过时的成员。数据文件必须足够新,以便新成员能够赶上 oplog。否则,成员需要执行初始同步。

您可以捕获数据文件作为快照或直接复制。然而,在大多数情况下,您无法从运行中的 mongod 实例复制数据文件到另一个实例,因为在文件复制操作期间数据文件会发生变化。

重要

如果您正在复制数据文件,请确保您的复制包括 local 数据库的内容。

不能 使用 mongodump 备份数据文件:只有 快照备份。有关捕获运行中的 mongod 实例的连续快照的方法,请参阅 自管理部署的备份方法 文档。

在从“种子”源复制数据文件后,使用新的mongod实例启动members[n]._id并允许其应用oplog中的所有操作,直到反映副本集的当前状态。要查看副本集的当前状态,请使用rs.printSecondaryReplicationInfo()rs.status()

返回

强制主节点

本页内容