Docs 菜单

Docs 主页开发应用程序MongoDB Manual

重新同步副本集成员

在此页面上

  • 步骤

当副本集节点的复制进程落后太多,以至于主节点覆盖了该节点尚未复制的 oplog 条目时,副本集节点就会变为“陈旧”。节点跟不上,就会变得“陈旧”。出现这种情况时,您必须删除副本集节点的数据,然后执行初始同步,从而完全重新同步该节点。

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

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

注意

为防止更改写入法定人数,请勿一次轮换多个副本集成员。

警告

在初始同步过程中,mongod会删除dbPath目录中的内容。

这个过程依赖于 MongoDB 的常规副本集同步过程。存储成员的当前数据。有关 MongoDB 初始同步过程的概述,请参阅“副本集同步”部分。

初始同步操作会影响副本集的其他成员,为主节点创建额外的流量。同步成员需要副本集中另一个可访问且是最新的成员。

如果实例中没有数据,可以按照“向副本集中添加成员”或“替换副本集成员”过程向副本集中添加新成员。

您还可以在不包含 dbPath 目录内容的情况下重启实例,强制已是副本集成员的 mongod 执行初始同步:

  1. 停止成员的mongod 实例。为确保正常关闭,请使用 中的 方法,或者在db.shutdownServer() Linuxmongoshmongod --shutdown 系统上使用 选项。

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

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

  4. 重启 mongod 进程

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

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

您可以将数据文件作为快照或直接副本进行捕获。不过,在大多数情况下,您无法将数据文件从运行中的 mongod 实例复制到另一实例,因为在文件复制操作过程中,数据文件会发生变化。

重要

如果复制数据文件,请确保副本包含 local 数据库的内容。

不能对数据文件使用mongodump备份:只能使用快照备份。有关捕获正在运行的mongod实例的一致快照的方法,请参阅MongoDB 备份方法文档。

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

← 强制成员成为主节点

在此页面上