Akka.net / Cluster - 如何在领导者死亡时“治愈”拓扑?

时间:2017-11-30 17:01:03

标签: akka.net akka.net-cluster

我设置了一个基本的测试拓扑,其中包含Petabridge Lighthouse和两个相互通信的简单测试参与者。到目前为止这种方法效果很好,但有一个问题:Lighthouse(或底层的Akka.Cluster)让我的一个演员成为领导者,并且当没有优雅地关闭节点时(例如当某些事情严重崩溃或我只是点击“停止”时)在VS)灯塔不再可用了。大量例外滚动,必须重新启动。

是否可以配置Akka.Cluster .net,使拓扑的其余部分选出新的领导者并继续?

1 个答案:

答案 0 :(得分:1)

这里有两点需要指出。一个是如果你的灯塔节点出现严重风险,你可能应该有更多的 -  akka.cluster.seed-nodes设置可以使用多个地址,此处唯一的要求是所有节点(包括灯塔)必须以相同的顺序指定它们。这样一来,如果一座灯塔倒塌,另一座灯塔仍然可以扮演其角色。

其他问题是,当节点无法访问时(因为网络连接上崩溃的进程不可用),默认情况下akka.net群集不会关闭该节点。当发生这样的事情时,你需要告诉它,它应该如何表现:

  1. 您可以随时配置自己的IDowningProvider接口,该接口将在达到某段节点不活动后触发。然后您可以手动决定要做什么。要使用它,请添加完全限定的类型名称以跟随设置:akka.cluster.downing-provider = "MyNamespace.MyDowningProvider, MyAssembly"。可以看到向下提供者实现的示例here
  2. 您可以指定akka.cluster.auto-down-unreachable-after = 10s(或其他时间值)来指定一个无法访问的节点加入的超时 - 如果在超时触发之前它不会加入,它将从群集中踢出。这里唯一的风险是当群集分裂脑发生时:在某些情况下,机器之间的网络故障可以将您的群集分成两部分,如果在自动设置中发生这种情况,则群集的两半可能会认为彼此已经死亡。在这种情况下,您最终可能会有两个独立的群集而不是一个群集。
  3. 从下一个版本开始(Akka.Cluster 1.3.3),将有一个新的Split Brain Resolver功能。它将允许您配置有关网络分区和计算机崩溃时如何操作的更高级策略。