【问题标题】:Mongodb oplog synchronizationmongodb oplog同步
【发布时间】:2015-11-05 15:14:03
【问题描述】:

我正在使用 Apache Storm 评估 Mongo DB。我的用例是我必须在 Apache Storm 中从 MongoDB 读取数据,在螺栓中进行一些处理并将其转储到 Neo4J 图形数据库中。

我正在使用 Mongo Spout,它将从 oplog 文件中读取数据。我浏览了文档,该文档说主节点将数据写入 oplog 文件,副本读取将从它异步发生。我知道 oplog 是一个有上限的集合(指定大小),数据正在以非常高的速度写入 oplog,并且与副本集的同步有点慢。如果 oplog 达到其最大大小,它会从文件的开头覆盖文档。在异步过程中,如果我们得到一些其他数据并且复制仍然不完整,则可能会丢失复制集,因为它不会同步。

我的问题是

1) 有没有办法克服这个问题?

2) 与 Apache Storm 一起使用时,我们如何更好地利用这个上限集合?

3) 如果我给出最大 oplog 大小,例如我给出 500GB 并且 oplog 有 1gb 的数据,它会占用并保留 500gb 的大小吗?

4) 这是适合我用例的正确解决方案吗?

提前致谢!!!

【问题讨论】:

    标签: mongodb mongodb-query apache-storm


    【解决方案1】:

    是的,您可以通过增加 oplog 的大小来克服这个问题。这需要关闭 mongo 实例才能生效。

    我最近研究了一个概念证明,类似于您在 Mongo 中使用尾游标来订阅主节点 oplog 中所做的任何更改并将它们迁移到另一个数据库。我们最终也研究了 Storm 以更清洁的方式做到这一点。对于这个用例,我们也不是 100% 在 Storm 上销售,但尾光标有点丑陋和不可靠。我会在有尾光标之前使用 Storm。

    通过让 Storm 只接收新命令,您可以更好地利用 Storm 的这个上限集合。 您触及的复制问题似乎与从主节点上的 Oplog 获取新命令并将这些感兴趣的操作执行到 Neo4j 中的任务相互排斥。 如果您正在阅读 oplog 上的内容其次,我会更好地理解这是一个关于您声称目标是什么的问题(即将数据写入 Neo4j)。 由于您正在读取 Primary 的 oplog,并且可以处理最新的命令,因此我不确定这里是否存在问题。

    关于您提出的 RS 同步问题;如果您的辅助服务器不同步以至于您正在丢失复制,那么有些问题应该提前解决。我确实理解并欣赏您的观点,但旨在实现这一点的系统需要一些 TLC。

    正如你所说,oplog 是一个有上限的集合。当它用完空间时,它将为执行任何新命令腾出空间。正如您所说,没有任何保留。您的辅助服务器将无法将这些命令应用于它们并且需要完全重新同步。您需要关注表示 1 的 "replication oplog window"。这是操作在被新条目覆盖之前将保留在 oplog 中的时间量。 2. 次要成员可以离线多长时间,并且在不进行完全重新同步的情况下仍能赶上主要成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2021-12-18
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多