配置辅助节点的同步目标
在本页面
Overview
次要对象从主要成员中捕获数据,以维护集合数据的最新副本。但是,默认情况下,辅助成员可以根据成员之间的 ping 时间变化和其他成员复制状态自动将其同步目标更改为辅助成员。有关更多信息,请参见副本集数据同步和Management 链式复制。
对于某些部署,实现自定义复制同步拓扑可能比默认同步目标选择逻辑更有效。 MongoDB 提供了指定要用作同步目标的主机的功能。
要临时覆盖默认的同步目标选择逻辑,您可以手动配置secondary成员的同步目标以临时提取oplog条目。以下提供了对此功能的访问:
-
replSetSyncFrom命令,或
-
mongo shell 中的rs.syncFrom()助手
Considerations
Sync Logic
在版本 3.4 中更改。
如果在运行replSetSyncFrom/rs.syncFrom()时正在进行初始同步操作,则replSetSyncFrom/rs.syncFrom()会停止正在进行的初始同步,并重新启动与新目标的同步过程。在以前的版本中,如果在初始同步期间运行replSetSyncFrom/rs.syncFrom(),则 MongoDB 不会产生任何错误消息,但是同步目标只有在初始同步操作之后才会更改。
仅根据需要修改默认的同步逻辑,请务必谨慎。
Target
要同步的成员必须是集合中数据的有效来源。要从成员同步,成员必须:
-
有数据。在启动或恢复模式下,它不能是仲裁器,并且必须能够回答数据查询。
-
Be accessible.
-
成为副本集配置中同一集合的成员。
-
使用members[n].buildIndexes设置构建索引。
-
集合中的其他成员,以防止与其自身进行同步。
如果您尝试从比当前成员晚 10 秒以上的成员进行复制,则mongod将记录警告,但仍将从滞后成员复制。
Persistence
replSetSyncFrom/rs.syncFrom()提供默认行为的临时替代。在以下情况下,mongod将恢复为默认的同步行为:
Procedure
要在mongo shell 中使用replSetSyncFrom命令:
db.adminCommand( { replSetSyncFrom: "hostname<:port>" } );
要在mongo shell 中使用rs.syncFrom()帮助器,请执行以下操作:
rs.syncFrom("hostname<:port>");