Ruby MongoDB实例失败测试

Ruby MongoDB实例失败测试,ruby,mongodb,testing,Ruby,Mongodb,Testing,我正在研究,我想知道如何测试mongo实例失败、副本集投票(主要失败)和其他类似的东西 例如。客户端应建立到副本集的连接。然后primary失败,客户端应该找到下一个primary并将所有查询重定向到那个里 可能有mongodb命令来暂停/恢复实例。或者我应该分叉进程和sigstop/sigcont(但这将是依赖于操作系统的解决方案) UPD 刚才看了一下mongodb ruby驱动程序是如何做到这一点的 根据我在测试Mongo副本集时所做的工作,我可以给您一些建议,但我担心这对于在云中托管节点

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

例如。客户端应建立到副本集的连接。然后primary失败,客户端应该找到下一个primary并将所有查询重定向到那个里

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

UPD

刚才看了一下mongodb ruby驱动程序是如何做到这一点的

根据我在测试Mongo副本集时所做的工作,我可以给您一些建议,但我担心这对于在云中托管节点来说是相当具体的。也许你可以从中拿走一些东西

假设已设置复制副本:

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

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

  • 请注意,如果重新启动副本集中的所有节点,则主节点会四处移动。有时是节点1,有时是节点2,等等。这假设所有节点的优先级相同。你的客户处理得好吗?我们曾经遇到过一些问题,因为我们硬编码了一个节点进行写入,突然所有的写入都会失败

  • 编写一个工具来模拟连续写入,然后开始使节点脱机,杀死主节点,用新的IP重新启动机器等。是否要删除任何写入

  • 据我所知,除了停止mongod之外,没有命令可以暂停/恢复实例。我喜欢关闭机器进行个人测试


  • 根据我在测试Mongo副本集时所做的工作,我可以给您一些建议,但我担心这对于在云中托管节点来说是相当具体的。也许你可以从中拿走一些东西

    假设已设置复制副本:

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

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

  • 请注意,如果重新启动副本集中的所有节点,则主节点会四处移动。有时是节点1,有时是节点2,等等。这假设所有节点的优先级相同。你的客户处理得好吗?我们曾经遇到过一些问题,因为我们硬编码了一个节点进行写入,突然所有的写入都会失败

  • 编写一个工具来模拟连续写入,然后开始使节点脱机,杀死主节点,用新的IP重新启动机器等。是否要删除任何写入

  • 据我所知,除了停止mongod之外,没有命令可以暂停/恢复实例。我喜欢关闭机器进行个人测试


  • 最后,我实现了绑定到所需端口的假Mongodb服务器,并使用假查询回复进行应答。它还回答“isMaster”查询。因此,您可以随时停止主/辅操作,也可以启动下一个主/辅操作的投票,等等。这看起来是最好的选择,因为它大约有100行代码,在任何操作系统上都能完美工作。:)


    最后,我实现了绑定到所需端口的假Mongodb服务器,对查询进行假应答。它还回答“isMaster”查询。因此,您可以随时停止主/辅操作,也可以启动下一个主/辅操作的投票,等等。这看起来是最好的选择,因为它大约有100行代码,在任何操作系统上都能完美工作。:)


    嗨,瑞安,谢谢你的回复!但我问过如何在我的功能/单元测试中模拟实例的失败,这样任何运行测试的人都会对任何操作系统感到满意。而不是嘲笑。不管怎样,你写的东西现在对我很有用!哦,对不起。我会检查嵌入式Mongo,以便在单元/功能测试中进行模拟。嗯,埃德蒙戈看起来很有前途!谢谢你,瑞安,谢谢你的回复!但我问过如何在我的功能/单元测试中模拟实例的失败,这样任何运行测试的人都会对任何操作系统感到满意。而不是嘲笑。不管怎样,你写的东西现在对我很有用!哦,对不起。我会检查嵌入式Mongo,以便在单元/功能测试中进行模拟。嗯,埃德蒙戈看起来很有前途!谢谢