【问题标题】:MongoDB initial sync on a large database大型数据库上的 MongoDB 初始同步
【发布时间】:2017-03-31 17:00:37
【问题描述】:

我们正在使用具有三个节点的 MongoDB 副本集。该数据库相当大,有 2+ 亿条记录,在磁盘上占用 700GB(WiredTiger MongoDB 引擎)。主要在文档上执行插入(每天数百万次),然后读取和更新。

替换次要成员上的磁盘后,数据文件夹为空并开始初始同步。通过查看日志,复制记录大约需要 7 个小时,然后构建索引需要 30 个小时,但这对于 oplog 包含同时插入/更新的所有记录来说太过分了:

2016-11-16T23:32:03.503+0100 E REPL     [rsBackgroundSync] too stale to catch up -- entering maintenance mode
2016-11-16T23:32:03.503+0100 I REPL     [rsBackgroundSync] our last optime : (term: 46, timestamp: Nov 15 10:03:15:8c)
2016-11-16T23:32:03.503+0100 I REPL     [rsBackgroundSync] oldest available is (term: 46, timestamp: Nov 15 17:37:57:30)
2016-11-16T23:32:03.503+0100 I REPL     [rsBackgroundSync] See http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember

首先我们重新启动该成员并开始重新同步:

2016-11-16T23:47:22.974+0100 I REPL     [rsSync] initial sync pending
2016-11-16T23:47:22.974+0100 I REPL     [ReplicationExecutor] syncing from: x3:27017
2016-11-16T23:47:23.219+0100 I REPL     [rsSync] initial sync drop all databases
2016-11-16T23:47:23.219+0100 I STORAGE  [rsSync] dropAllDatabasesExceptLocal 5
2016-11-16T23:53:09.014+0100 I REPL     [rsSync] initial sync clone all databases

通过查看数据文件夹,所有文件都被删除并开始增长。但大约 8 小时后,它几乎没有重新同步 5% 的数据库。

对于如此大的同步使用什么方法?

我们曾考虑增加 oplog 大小,但这需要整个副本集的停机时间。我们可以使用哪些方法而无需停机?

【问题讨论】:

  • “但大约 8 小时后,它几乎没有重新同步 5% 的数据库。”以及您是如何达到这 5% 的数字的?
  • @JDPeckham 请查看下面的答案和子回复

标签: mongodb mongodb-replica-set large-data


【解决方案1】:

如果可能,最好的解决方案是使用文件系统快照。

您可以直接对 mongod 节点进行快照,只要 oplog 文件与其他数据文件位于相同的磁盘空间即可。无需“关闭”或做任何其他主动的事情。

how to make restore with snapshot

然后你只需将这些文件复制到新的节点数据目录并启动 mongod。

如果文件系统快照是不可能的,那么用其他方法来复制工作中的 mongod 数据目录,如果你可以有停机时间,这很容易。如果你不能有停机时间,你总是可以添加几个(两个)仲裁器并停止另一个辅助节点(以获取数据目录的副本),当然在那段时间你的副本集基本上是“一个节点 RS”。

【讨论】:

  • 由于它托管在 Google Compute Engine 上,因此可以通过以下步骤使用快照:1) 添加 2 个仲裁器(其中一个不起作用); 2) 关闭一个健康的二级和冻结文件系统; 3)创建快照,解冻健康并重新上线; 4) 使用此快照映像创建一个新磁盘并将其安装在“不健康”的服务器上; 5)复制数据文件(尽管我们可以替换整个磁盘); 6) 启动 MongoDB,移除仲裁器,卸载新磁盘。完成所有工作大约需要两个小时。
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2022-06-15
  • 1970-01-01
相关资源
最近更新 更多