Docs 菜单

自管理链式复制

从版本 2.0 开始,MongoDB支持链式复制。 当从节点成员从另一个从从节点(secondary node from replica set)成员而不是从从节点(secondary node from replica set)主节点 (primary node in the replica set)复制时,就会发生链式复制。示例,如果从节点根据网络从节点(secondary node from replica set)时间选择其复制源,并且最近的成员是另一个从网络探测(ping),则可能会出现这种从节点(secondary node from replica set)。 该操作的复制源是从中读取数据的成员。

链式复制可以减少主节点上的负载。但是,链式复制也可能会导致复制延迟增加,具体取决于网络拓扑。

对于链式复制导致延迟的情况,您可以使用settings.chainingAllowed 自管理副本集配置 中的 设置禁用链式复制。

MongoDB 默认能够进行链式复制。此过程描述了如何禁用以及重新启用。

注意

If you disable chained replication, the replSetSyncFrom command and rs.syncFrom() method have no effect.

要禁用链式复制,设立settings.chainingAllowed 自管理副本集配置 中的 字段设置为false

您可以使用以下命令序列,将 settings.chainingAllowed 设置为 false

  1. 将配置设置复制到 cfg 对象中:

    cfg = rs.config()
  2. 注意当前配置设置是否包含 settings 嵌入式文档。如是这样,请跳过此步骤。

    警告

    为避免数据丢失,如果配置设置包含 settings 嵌入式文档,请跳过此步骤。

    如果当前配置设置包含 settings 嵌入式文档,请通过发出以下命令来创建嵌入式文档:

    cfg.settings = { }
  3. 发出以下命令序列,以将 settings.chainingAllowed 设置为 false

    cfg.settings.chainingAllowed = false
    rs.reconfig(cfg)

要重新启用链式复制,请将 settings.chainingAllowed 设置为 true。您可以使用以下命令序列:

cfg = rs.config()
cfg.settings.chainingAllowed = true
rs.reconfig(cfg)