如何使用oplog重放停止克隆的收集,即使恢复的实例上的所有数据都已恢复。
复制场景我设置了一个3节点复制。负载是持续的负载,数据每天都在不断增加。而且我们每2个房间就有一个oplog备份。尽管oplog备份设置为每2小时一次,但我们仍有一些事务从oplog中滚出。这意味着当我们重放这些操作日志时,我们可能会遗漏一些记录。
场景。在复制场景中,我们有一个辅助节点没有响应,当我们将它重新加入到复制集中时,最小oplog时间戳超过了失败实例中的oplog,失败的实例试图赶上,但它进入了恢复模式。从正在恢复的实例上的日志消息。
2019-02-13T15:49:42.346-0500 I REPL [replication-0] We are too stale to use primaryserver3:27012 as a sync source. Blacklisting this sync source because our last fetched timestamp: Timestamp(1550090168, 1) is before their earliest timestamp: Timestamp(1550090897, 28907) for 1min until: 2019-02-13T15:50:42.346-0500
2019-02-13T15:49:42.347-0500 I REPL [replication-0] sync source candidate: primaryserver3:27012
2019-02-13T15:49:42.347-0500 I ASIO [RS] Connecting to primaryserver3:27012
2019-02-13T15:49:42.348-0500 I REPL [replication-0] We are too stale to use primaryserver3:27012 as a sync source. Blacklisting this sync source because our last fetched timestamp: Timestamp(1550090168, 1) is before their earliest timestamp: Timestamp(1550090897, 22809) for 1min until: 2019-02-13T15:50:42.348-0500
2019-02-13T15:49:42.348-0500 I REPL [replication-0] could not find member to sync from为了使这个实例与主实例相同,我们将这个“正在恢复的”实例作为一个“新的主实例”,并应用到当前插入之前所做的所有oplog备份。在应用操作日志之后,两个服务器上的记录计数匹配。现在,当我将正在恢复的实例(即"new PRIMARY")加入到复制集时,我会看到显示"initial sync“的日志,然后看到下面的日志
2019-03-01T12:11:58.327-0500 I REPL [repl writer worker 4] CollectionCloner ns:datagen_it_test.test finished cloning with status: OK
2019-03-01T12:12:40.518-0500 I REPL [repl writer worker 8] CollectionCloner ns:datagen_it_test.link finished cloning with status: OK在那里集合再次被克隆。我的问题是,为什么它要再次克隆来获取数据。我们在“恢复”的实例记录中恢复了所有匹配的数据。如何阻止克隆的发生。
发布于 2019-03-16 05:23:20
根据MongoDB文档
当副本集成员的复制过程远远落后于主副本时,副本集成员将覆盖该成员尚未复制的oplog条目,此时副本集成员将变得“过时”。成员赶不上进度,变得“陈旧”。发生这种情况时,必须通过删除成员的数据并执行初始同步来完全重新同步成员。
本教程介绍重新同步过时成员和使用来自另一个成员的种子数据创建新成员,这两种方法都可用于恢复副本集成员。同步成员时,请选择系统有足够带宽移动大量数据的时间。将同步安排在使用率较低的时段或维护窗口期间。
MongoDB为执行初始同步提供了两个选项:
用一个空的数据目录重启MongoDB,让MongoDB正常的初始同步功能恢复数据。这是更简单的选项,但替换数据可能需要更长的时间。
请参阅自动同步成员。
使用副本集中另一个成员的最近数据目录的副本重新启动计算机。此过程可以更快地替换数据,但需要更多的手动步骤。
请参阅通过从其他成员复制数据文件进行同步。
中提供了逐步操作过程
https://stackoverflow.com/questions/55190519
复制相似问题