自管理链式复制
从版本 2.0 开始,MongoDB 支持链式复制。链式复制发生时,一个从节点从另一个从节点而不是从主节点复制。例如,如果从节点根据ping时间选择复制源,并且最近的成员是另一个从节点,则可能会发生这种情况。操作的数据源是从读取数据的成员。从节点成员从另一个从节点复制,而不是从主节点复制。这可能发生在以下情况下,例如,如果从节点根据ping时间选择复制源,并且最近的成员是另一个从节点。操作的数据源是从读取数据的成员。
链式复制可以减少主节点的负载。但是,根据网络拓扑,链式复制也可能导致复制延迟增加。
您可以使用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)