【问题标题】:How to test relative performance of MongoDB when utilising various snapshot techniques使用各种快照技术时如何测试 MongoDB 的相对性能
【发布时间】:2012-04-26 16:58:43
【问题描述】:

我想设置一个实验来评估 Mongo 在使用各种支持快照的技术时的表现。

  • ext3 上的 R1Soft HotCopy
  • xfs 上的 R1Soft HotCopy
  • 带有 ext3 的 LVM
  • 带有 xfs 的 LVM
  • btrfs

它需要受磁盘 IO 限制,因此我需要确保我的所有写入本质上是同步的 - 否则我将需要创建一个违反 RAM 和交换约束的数据集,但我相信在每次插入时启用文件系统刷新将确保每个操作在下一个操作之前被刷新。

> db.runCommand({getlasterror:1,j:true})

我还能做些什么来真正发挥 MongoDB 进程的 IO 特性?

  • 我可以交错读取和写入。

我将测试恒定插入率之类的东西,并观察该过程在接下来的时间段内的表现

  1. 没有与快照相关的活动或存在。
  2. 拍摄和提交快照的时间。
  3. 备份脚本正在读取快照时。
  4. 当快照是冗余但处于活动状态时。
  5. 快照停用时。

我希望确保在活动和硬件保持不变的同时,遇到相对的性能基准。

感谢任何提示。

【问题讨论】:

  • 使用你的实际应用怎么样?
  • @John,答案当然很好。抱歉,我忽略了该应用程序尚未编写。这个实验实际上构成了是否使用和依赖 EBS 快照,或者是否选择其他不提供卷快照的云提供商的基础。如果我们可以建立一个测试平台,这将有助于我们就选择在哪个平台上托管我们的应用程序做出正确的决定

标签: linux mongodb snapshot


【解决方案1】:

罗伯,这太棒了。这样做的结果应该让每个人都受益。

我想指出一些在您测试 MongoDB 生产部署的典型快照操作期间可能会有所帮助的事情。

拍摄快照

正如您所指出的,在实时服务器上拍摄快照的主要问题是 IO 争用。为了避免这种情况,大多数人会部署一个包含 3 个以上成员的副本集。

通常,在这种情况下,其中一个辅助节点要么是 fsync 并在快照期间被锁定,要么配置为隐藏成员,要么只是脱机。这允许在热备份(另一个辅助节点)仍可用于自动故障转移时拍摄快照。

这也确保了另外两件事。首先,可以及时完成快照(生产负载不影响备份时间),其次,拍摄快照所需的负载不会影响生产读取(在允许从辅助节点读取的情况下——slaveOk) .

备份机制

上述关于快照策略的观点很重要,因为大多数人忽略了辅助节点与主节点具有相同写入负载的事实。

MongoDB 没有多主复制。在给定时间,只有一个服务器(在集合/分片中)可用于写入(主服务器或主服务器)。

但是,当主节点接收写入和读取时,辅助节点会跟踪该主节点的 oplog(一个上限集合)。辅助节点发出定期请求,以查看是否有更多数据等待从此可尾游标读取。当存在时,这些 oplog 条目将从主节点读取并写入(是的——这需要一个写锁)到辅助节点。

然后辅助节点将 oplog 中的新条目应用到它们自己的数据副本(是的——这需要写锁)。

您可能知道所有这些,但在进行这项很棒的研究时请记住这一点。

祝你好运!

【讨论】:

  • 我们还没有解决这个问题,但我们可能会在未来与扩展计划一起测试它 - 目前所有数据都通过非常原始的方式快速备份(mongodump)对应用程序没有影响。
猜你喜欢
  • 2011-07-08
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多