Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

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

在此页面上

  • 步骤

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

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

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

注意

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

警告

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

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

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

如果实例中没有数据,可以按照向自管副本集中添加节点替换自管副本集节点过程向副本集中添加新节点。

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

  1. 停止节点的 mongod 实例。要确保完全关闭,请使用 mongosh 中的 db.shutdownServer() 方法,或者在 Linux 系统上使用 mongod --shutdown 选项。

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

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

  4. 重启 mongod 进程

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

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

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

重要

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

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

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

后退

强制主节点

在此页面上