代码之家  ›  专栏  ›  技术社区  ›  AJ Venturella

如何配置阿克卡集群对于绑定到端口0时崩溃的服务

  •  1
  • AJ Venturella  · 技术社区  · 6 年前

    我测试的是以下场景:

    现在这个第三个服务的HOCON设置为绑定到端口0,它完成了它的工作,并给了我一个随机端口。

    现在,当我强制退出此服务以模拟崩溃时阿克卡.Net非常健谈(重要的部分)

    AssociationError…尝试与无法访问的远程地址关联

    0 为了阿克卡。远程处理,它将得到一个全新的港口,所以 Unreachable 另一个失败服务的状态将永远不会被解析。

    这是预期的行为吗?我还认为这里可能会用到一个配置设置:

    auto-down-unreachable-after
    

    现在,它自己发出警告:

    使用auto-down意味着在网络划分的情况下将自动形成两个独立的集群。

    设置此选项会使消息静音:

    auto-down-unreachable-after = 3s
    

    关联到[akka.tcp协议://ClusterName@localhost:58977]具有UID[983892349]的操作失败,无法恢复。UID现在被隔离,发送到此UID的所有消息都将以死信形式传递。必须重新启动远程actorsystem才能从这种情况中恢复。

    必须重新启动远程actorsystem才能从这种情况中恢复。 UID 好像是内部分配的。所以我只能猜测以后不会有任何与uid的冲突,所以这是正确的行为。

    这似乎是唯一的选择以外的

    log-info = off
    

    让日志安静下来

    1 回复  |  直到 6 年前
        1
  •  0
  •   Paul Nieuwenhuis    6 年前

    解决这一问题的方法并不总是对每种情况都是相同的。例如,它可能取决于您是否在云微服务平台上运行服务。但其中一个选择确实是“自动关机”。这会将服务标记为“不可访问”(如您所见)。这意味着节点没有离开集群,但是集群在没有崩溃节点的情况下继续运行。这就是同一个节点不能加入的原因,因为它仍然被标记为“UNREACHABLE”。

    请注意,自动关闭可能会导致群集的“分裂大脑”,即群集的两个部分(例如,一个由4个节点组成的群集被拆分为两个由2个节点组成的群集)。这是一个你不想要的情况,所以这可能不是最好的解决方案!

    Akka.NET网站有一些其他的解决方案,你可以配置正确处理这一点:分裂大脑解析器。有关如何配置的详细信息: https://getakka.net/articles/clustering/split-brain-resolver.html

    这些都是防止“分裂大脑”情况的策略,包括牺牲节点来保持集群的一致性。将这些策略与microservices编排平台(以便实例在崩溃/退出后重新启动)结合使用,创建一个完美的自我修复Akka集群。