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