MongoDB实例失败测试

时间:2013-03-29 15:26:11

标签: ruby mongodb testing

我正在研究Ruby MongoDB Client on Eventmachine,我想知道如何测试mongo实例失败,副本集投票(主要失败)和其他类似的东西。

在示例中。客户端应建立与副本集的连接。然后主要失败,客户端应找到下一个主要并重定向所有查询。

也许有mongodb命令来暂停/恢复实例。或者我应该分叉进程和sigstop / sigcont(但这将是依赖于操作系统的解决方案)。

UPD

看看mongodb-ruby-driver如何做到这一点,去做同样的事情 https://github.com/mongodb/mongo-ruby-driver/blob/master/test/tools/mongo_config.rb

2 个答案:

答案 0 :(得分:1)

我可以根据我测试Mongo副本集的方式给你一些建议,但我担心它在云中托管节点非常具体。也许你可以从中汲取一些东西。

假设你有一个副本设置:

  1. 确保所有节点具有相同的优先级。编写一个对副本集进行慢速读取的客户端(确保所有三台计算机都在客户端配置中表示)。慢读意味着写一个大查询然后在光标上缓慢迭代。继续,让主要离线,看看会发生什么。您可以为其他节点添加日志文件,以观察他们为新主节点投票。

  2. 如果您为每个节点使用主机名,请运行运行缓慢的查询,然后停止/启动节点,以使主机名获得新的IP地址。我们发现Mongo客户端刷新DNS缓存,而您仍然使用旧的IP地址。 (这是针对Java客户端的 - 我们已经提交了一个Jira错误。)

  3. 请注意,如果重新启动副本集中的所有节点,则会转移主节点。有时它将是节点1,有时是节点2等。这假定所有节点的优先级相同。您的客户处理得好吗?我们曾经遇到过问题,因为我们有一个硬编码的节点用于写入,突然所有写入都会失败。

  4. 编写一个工具来模拟连续写入,然后开始使节点脱机,终止主节点,重新启动具有新IP的计算机等。您是否要删除任何写入?

  5. 除了停止mongod之外,没有我知道暂停/恢复实例的命令。我喜欢给机器供电以便亲自测试。

答案 1 :(得分:0)

最后,我实现了绑定到所需端口的假Mongodb服务器,回答了对查询的虚假回复。它还回复“isMaster”查询。因此,您可以随时停止主要/次要,您可以激发将成为下一个主要的投票等等。它看起来是最好的选择,因为它大约有100行代码,并且可以在任何操作系统上完美运行。 :)

https://github.com/fl00r/monga/blob/master/spec/helpers/mongodb.rb