自管理链式复制
从版本 2.0 开始,MongoDB支持链式复制。 当 从主节点 (primary node in the replica set)从节点(secondary node from replica set)从节点(secondary node from replica set)时,就会发生链式复制。示例,如果从节点根据网络从节点(secondary node from replica set)时间选择其复制源,并且最近的成员是另一个从网络探测(ping),则可能会出现这种从节点(secondary node from replica set)。 该操作的复制源是从中读取数据的成员。
链式复制可以减少主节点上的负载。但是,链式复制也可能会导致复制延迟增加,具体取决于网络拓扑。
对于链式复制导致延迟的情况,您可以使用settings.chainingAllowed
自管理副本集配置 中的 设置来禁用链式复制。
MongoDB 默认能够进行链式复制。此过程描述了如何禁用以及重新启用。
注意
如果已禁用链式复制,仍可使用 replSetSyncFrom
指定从另一个从节点复制从节点。但该配置只会持续到从节点重新计算要同步的成员为止。
禁用链式复制
要禁用链式复制,设立settings.chainingAllowed
自管理副本集配置 中的 字段设置为false
。
您可以使用以下命令序列,将 settings.chainingAllowed
设置为 false
:
将配置设置复制到
cfg
对象中:cfg = rs.config() 注意当前配置设置是否包含
settings
嵌入式文档。如是这样,请跳过此步骤。警告
为避免数据丢失,如果配置设置包含
settings
嵌入式文档,请跳过此步骤。如果当前配置设置不包含
settings
嵌入式文档,请通过发出以下命令来创建嵌入式文档:cfg.settings = { } 发出以下命令序列,以将
settings.chainingAllowed
设置为false
:cfg.settings.chainingAllowed = false rs.reconfig(cfg)
重新启用链式复制
要重新启用链式复制,请将 settings.chainingAllowed
设置为 true
。您可以使用以下命令序列:
cfg = rs.config() cfg.settings.chainingAllowed = true rs.reconfig(cfg)