如何从本地节点模拟erlang集群中的临时netsplit?

时间:2018-10-19 08:03:19

标签: erlang simulation distributed-system

我在本地计算机上有几个连接到群集的节点。在以gproc作为依赖项运行我的应用程序的每个节点上。我需要测试如果发生临时netsplit,我的应用程序将如何运行。如何模拟临时netsplit?

2 个答案:

答案 0 :(得分:0)

您可以将特定节点的cookie设置为不正确的值,然后手动断开连接。由于cookie不匹配,两个节点将无法重新连接。

erlang:set_cookie(myothernode@localhost, invalid_cookie),
erlang:disconnect_node(myothernode@localhost)

要重新连接,请再次设置正确的cookie并ping节点:

erlang:set_cookie(myothernode@localhost, erlang:get_cookie()),
pong = net_adm:ping(myothernode@localhost)

答案 1 :(得分:0)

通常,netsplit(通常是网络故障)的行为不同于“正确断开连接”的行为。这就是为什么我建议通过修改基础网络堆栈来模拟此类故障的原因。

您可以将iptablestc用于此目的。

现有的库通过利用docker来帮助您进行此类设置-如果可以的话,您可以看看https://github.com/worstcase/blockade。设置完成后,您可以轻松地介绍很多在分布式系统上工作时必须处理的常见网络故障(免责声明:我前一阵子为该库做出了贡献。)

相关问题