链式复制
自2.0版本之后,MongoDB开始支持链式复制。当 secondary 从其他从节点上进行复制而不是 primary 的时候,就发生了链式复制。当从节点根据节点之间的ping值来进行选取的时候,最近的从节点可能会被选中,从而产生链式复制。
链式复制可以减低主节点的load。但是链式复制也可能造成复制的滞后,这取决于网络情况。
使用如下的操作将 chainingAllowed 设置为 false :
MongoDB默认是允许链式复制的。本教程讲述了如何禁止和重新开启链式复制。
如果禁止了链式复制,我们也可以通过使用 replSetSyncFrom 来指定某个从节点由另一个从节点上进行复制。但是该配置仅会在从节点重新计算由哪复制后生效。
禁止链式复制
1、将配置信息赋值给 cfg
#要在PRIMARY节点配置
cfg = rs.config()
2、记下当前配置设置是否包含 设置嵌入文档。如果他们这样做,请跳过此步骤。
如果当前配置设置不包含 设置嵌入文档,请通过发出以下命令创建嵌入文档:
cfg.settings = { }
3、修改并重载配置
#关闭链式复制
cfg.settings.chainingAllowed = false
#重载配置
rs.reconfig(cfg)
#查看配置
rs.config()

重新开启链式复制
和关闭方式类似,只不过将false替换成true
cfg = rs.config()
cfg.settings.chainingAllowed = true
rs.reconfig(cfg)
本文引用MongoDB中文官方文档