副本集数据同步

为了维护共享数据集的最新副本,副本集的从节点同步或从其他节点复制数据。MongoDB 使用两种形式的数据同步:初始同步用完整数据集填充新节点,复制将持续更改应用到整个数据集。

初始同步

初始同步将所有数据从副本集的一个节点复制到另一个节点。看初始同步源选择有关初始同步源选择标准的更多信息。

从 MongoDB 4.4 开始,您可以使用initialSyncSourceReadPreference参数指定首选的初始同步源。该参数只能在启动时指定 mongod

从 MongoDB 5.2 开始,初始同步可以是逻辑的或基于文件副本的

逻辑初始同步过程

当您执行逻辑初始同步时,MongoDB:

  1. 克隆除本地数据库之外的所有数据库。为了克隆, mongod扫描每个源数据库中的每个集合并将所有数据插入到这些集合的它自己的副本中。
  2. 在为每个集合复制文档时构建所有集合索引。
  3. 在数据复制期间拉取新添加的 oplog 记录。确保目标节点在local数据库中有足够的磁盘空间来临时存储这些 oplog 记录在此数据复制阶段的持续时间。
  4. 将所有更改应用于数据集。使用来自源的操作日志,mongod更新其数据集以反映副本集的当前状态。

当初始同步完成时,成员从 过渡 STARTUP2SECONDARY

要执行初始同步,请参阅 重新同步副本集的成员。

基于文件复制的初始同步

仅在 MongoDB Enterprise 中可用。

基于文件复制的初始同步通过在文件系统上复制和移动文件来运行初始同步过程。这种同步方法可以比 逻辑初始同步。

IMPORTANT

基于文件副本的初始同步可能会导致计数不准确

基于文件副本的初始同步完成后,如果您在 count()没有查询谓词的情况下运行该方法,则返回的文档计数可能不准确。

没有查询谓词的count方法如下所示: db.<collection>.count()

要了解更多信息,请参阅没有查询谓词的不准确计数。

启用基于文件复制的初始同步

要启用基于文件复制的初始同步,请将 initialSyncMethod参数设置fileCopyBased为初始同步的目标节点。该参数只能在启动时设置。

行为

基于文件副本的初始同步将local正在同步的节点上的数据库替换为正在同步的节点的local数据库。

限制

  • 在基于文件复制的初始同步期间:
    • 您不能对同步到的节点或同步自的节点运行备份。
    • 您不能写入local正在同步到的节点上的数据库。
  • 您一次只能从一个给定的节点运行初始同步。
  • 使用加密存储引擎时,MongoDB 使用源密钥加密目标。

容错

如果执行初始同步的从节点在同步过程中遇到非暂时性 (即持久性)网络错误,则从节点从头开始重新启动初始同步过程。

从 MongoDB 4.4 开始,如果被瞬态(即临时)网络错误、集合删除或集合重命名中断,则执行初始同步的从节点可以尝试恢复同步过程。同步源还必须运行 MongoDB 4.4 以支持可恢复的初始同步。如果同步源运行 MongoDB 4.2 或更早版本,从节点必须重新启动初始同步过程,就好像它遇到了非暂时性网络错误一样。

默认情况下,从节点尝试恢复初始同步 24 小时。MongoDB 4.4 添加了 initialSyncTransientErrorRetryPeriodSeconds服务器参数,用于控制从节点尝试恢复初始同步的时间量。如果从节点在配置的时间段内无法成功恢复初始同步过程,它会从副本集中选择一个新的健康源并从头开始重新启动初始同步过程。

10次要尝试在返回致命错误之前多次重新启动初始同步。

初始同步源选择

初始同步源选择取决于 mongod启动参数 的值initialSyncSourceReadPreference4.4 新增):

  • 对于initialSyncSourceReadPreference设置为 primary(默认情况下chaining禁用),选择主要 作为同步源。如果主节点不可用或无法访问,请记录错误并定期检查主节点的可用性。
  • 对于initialSyncSourceReadPreference设置为 primaryPreferred(投票副本集节点的默认值),尝试选择主节点作为同步源。如果主节点不可用或无法访问,则从剩余的副本集节点中执行同步源选择。
  • 对于所有其他支持的读取模式,从副本集节点执行同步源选择。

执行初始同步源选择的节点通过所有副本集节点的列表进行两次传递:

在选择初始同步源的第一遍时,节点将以下条件应用于每个副本集节点:

如果在第一遍之后没有候选同步源剩余,则该节点执行具有宽松标准的第二遍。请参阅同步源选择(第二遍)

如果节点在两次通过后无法选择初始同步源,它会记录一个错误并等待1第二次,然后重新启动选择过程。从节点可以在出现错误退出之前多次mongod重新启动初始同步源选择过程。10

在进行第二遍选择初始同步源时,成员将以下条件应用于每个副本集节点:

如果节点在两次通过后无法选择初始同步源,它会记录一个错误并等待1第二次,然后重新启动选择过程。从节点可以在出现错误退出之前多次mongod重新启动初始同步源选择过程。10

复制

从节点在初始同步后连续复制数据。从节点从源同步中复制操作日志,并在异步过程中应用这些操作。

根据 ping 时间和其他节点复制状态的变化,从节点可以根据需要自动更改与源的同步。复制同步源选择 有关同步源选择标准的更多信息。

[ 1 ] 从 4.2 版开始,副本集的从节点现在会记录比慢速操作阈值应用时间更长的 oplog 条目。这些缓慢的 oplog 消息:记录在 diagnostic log.记录在REPL带有文本的组件 下applied op: <oplog entry> took <num>ms。不依赖于日志级别(无论是在系统级别还是组件级别)不要依赖于分析级别。可能受 影响slowOpSampleRate,具体取决于您的 MongoDB 版本:在 MongoDB 4.2 中,这些慢速 oplog 条目不受slowOpSampleRate. 无论采样率如何,MongoDB 都会记录所有慢速 oplog 条目。在 MongoDB 4.4 及更高版本中,这些慢速 oplog 条目受slowOpSampleRate.探查器不会捕获慢速 oplog 条目。

流复制

从 MongoDB 4.4 开始,来自源的同步将连续的oplog条目流发送到它们的同步从节点。流式复制减轻了高负载和高延迟网络中的复制滞后。它也是:

在 MongoDB 4.4 之前,从节点通过从源向其同步发出请求并等待响应来获取成批的oplog条目。这需要为每批oplog条目进行一次网络往返。MongoDB 4.4 添加了用于禁用流复制和使用旧复制行为的启动参数。如果从源同步有任何资源限制,或者如果您希望限制 MongoDB 对网络带宽的使用以进行复制,则将参数设置为 only。oplogFetcherUsesExhaustoplogFetcherUsesExhaustfalse

多线程复制

MongoDB 使用多线程批量应用写入操作以提高并发性。MongoDB 按文档 ID ( WiredTiger ) 对批次进行分组,并使用不同的线程同时应用每组操作。MongoDB 始终按照原始写入顺序将写入操作应用于给定文档。

如果读取发生在应用复制批处理的从节点上,则以辅助节点为目标并配置读取关注级别 "local""majority"从数据的WiredTiger快照读取的读取操作。

从快照读取保证了数据的一致视图,并允许读取与正在进行的复制同时发生而无需锁定。因此,需要这些读取关注级别的辅助读取不再需要等待应用复制批次,并且可以在收到它们时进行处理。

流量控制

从 MongoDB 4.2 开始,管理员可以限制主数据库应用其写入的速率,目的是将majority committed延迟保持在可配置的最大值以下flowControlTargetLagSeconds

默认情况下,流量控制是enabled.

笔记

为了进行流量控制,副本集/分片集群必须具有:featureCompatibilityVersion (FCV)4.2read concern majority enabled4.2也就是说,如果 FCV 不是,或者如果读取关注多数被禁用,则启用的流量控制无效。

有关详细信息,请参阅流量控制。

复制同步源选择

复制同步源选择取决于副本集 chaining设置:

  • 启用链接(默认),从副本集节点执行同步源选择。
  • 在禁用链接的情况下,选择主节点作为同步源。如果主服务器不可用或无法访问,请记录错误并定期检查主服务器的可用性。

执行复制同步源选择的成员通过所有副本集成员的列表进行两次传递:

第一遍:

在选择初始同步源的第一遍时,节点将以下条件应用于每个副本集节点:

如果在第一遍之后没有候选同步源剩余,则该节点执行具有宽松标准的第二遍。请参阅同步源选择(第二遍)

如果节点在两次通过后无法选择初始同步源,它会记录一个错误并等待1第二次,然后重新启动选择过程。从节点可以在出现错误退出之前多次mongod重新启动初始同步源选择过程。10

第二关

在进行第二遍选择初始同步源时,节点将以下条件应用于每个副本集节点:

如果节点在两次通过后无法选择初始同步源,它会记录一个错误并等待1第二次,然后重新启动选择过程。从节点可以在出现错误退出之前多次mongod重新启动初始同步源选择过程。10

如果在第一遍之后没有候选同步源剩余,则该节点执行具有宽松标准的第二遍。请参阅同步源选择(第二遍)

如果节点在两次通过后无法选择同步源,它会记录一个错误并等待1第二次,然后再重新启动选择过程。

每小时可以更改源的次数可通过设置maxNumSyncSourceChangesPerHour 参数进行配置。

NOTE

从 MongoDB 4.4 开始, 在选择初始同步源时,启动参数initialSyncSourceReadPreference优先于副本集的设置。settings.chainingAllowed副本集成员成功执行初始同步后,将遵循 chainingAllowed选择复制同步源时的值。

初始同步源选择有关初始同步源选择的更多信息。

副本集操作日志 副本集部署架构

原文链接 -https://docs.mongodb.com/manual/core/replica-set-sync/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""