我设置了一个基本的测试拓扑,其中包含Petabridge Lighthouse和两个相互通信的简单测试参与者。到目前为止这种方法效果很好,但有一个问题:Lighthouse(或底层的Akka.Cluster)让我的一个演员成为领导者,并且当没有优雅地关闭节点时(例如当某些事情严重崩溃或我只是点击“停止”时)在VS)灯塔不再可用了。大量例外滚动,必须重新启动。
是否可以配置Akka.Cluster .net,使拓扑的其余部分选出新的领导者并继续?
答案 0 :(得分:1)
这里有两点需要指出。一个是如果你的灯塔节点出现严重风险,你可能应该有更多的 -
akka.cluster.seed-nodes
设置可以使用多个地址,此处唯一的要求是所有节点(包括灯塔)必须以相同的顺序指定它们。这样一来,如果一座灯塔倒塌,另一座灯塔仍然可以扮演其角色。
其他问题是,当节点无法访问时(因为网络连接上崩溃的进程不可用),默认情况下akka.net群集不会关闭该节点。当发生这样的事情时,你需要告诉它,它应该如何表现:
IDowningProvider
接口,该接口将在达到某段节点不活动后触发。然后您可以手动决定要做什么。要使用它,请添加完全限定的类型名称以跟随设置:akka.cluster.downing-provider = "MyNamespace.MyDowningProvider, MyAssembly"
。可以看到向下提供者实现的示例here。akka.cluster.auto-down-unreachable-after = 10s
(或其他时间值)来指定一个无法访问的节点加入的超时 - 如果在超时触发之前它不会加入,它将从群集中踢出。这里唯一的风险是当群集分裂脑发生时:在某些情况下,机器之间的网络故障可以将您的群集分成两部分,如果在自动设置中发生这种情况,则群集的两半可能会认为彼此已经死亡。在这种情况下,您最终可能会有两个独立的群集而不是一个群集。