【发布时间】:2021-03-24 15:40:49
【问题描述】:
我有一个应用程序使用 marathon-api 和 ClusterBootstrap 部署 Akka 集群
当部署运行时,它会执行以下操作:
- 使用新版本的应用程序添加新实例
- 杀死一个旧实例
- 重复直到完成
我们有一个由 4 个节点组成的集群
进行部署后,集群如下所示(假设本示例中有 2 个实例):
{
"leader": "akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655",
"members": [
{
"node": "akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724",
"nodeUid": "-1598489963",
"roles": [
"dc-default"
],
"status": "Up"
},
{
"node": "akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655",
"nodeUid": "-1604243482",
"roles": [
"dc-default"
],
"status": "Up"
}
],
"oldest": "akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724",
"oldestPerRole": {
"dc-default": "akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724"
},
"selfNode": "akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655",
"unreachable": [
{
"node": "akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724",
"observedBy": [
"akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655"
]
}
]
}
有时领导者仍然是 WeaklyUp,但想法是一样的,而消失的节点可以是 up 或 Leaving。
然后日志开始显示此消息:
Cluster Node [akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655] - Leader can currently not perform its duties, reachability status: [akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655 -> akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724: Unreachable [Unreachable] (1)], member status: [
akka.tcp://app@ip-10-0-4-8.eu-central-1.compute.internal:15724 Up seen=false,
akka.tcp://app@ip-10-0-5-15.eu-central-1.compute.internal:13655 Up seen=true]
部署次数越多,情况就越糟糕
我想当一个节点被杀死时会改变集群的状态,因为它实际上是不可访问的,但我希望有某种功能可以解决这个问题
到目前为止,唯一可以解决此问题的方法是使用 Akka Cluster HTTP Management 执行 PUT /cluster/members/{address} operation:Down
我知道有一个名为 Auto-downing 的功能已被删除,因为它弊大于利。
我也尝试了Split Brain Resolver 那里提供的策略,但最后这些策略最终导致整个集群崩溃,日志如下:
> Cluster Node [akka://app@ip-10-0-5-215.eu-central-1.compute.internal:43211] - Leader can currently not perform its duties, reachability status: [akka://app@ip-10-0-5-215.eu-central-1.compute.internal:43211 -> akka://app@ip-10-0-4-146.eu-central-1.compute.internal:2174: Unreachable [Unreachable] (1)], member status: [akka://app@ip-10-0-4-146.eu-central-1.compute.internal:2174 Up seen=false, akka://app@ip-10-0-5-215.eu-central-1.compute.internal:43211 Up seen=true]
> Running CoordinatedShutdown with reason [ClusterDowningReason]
> SBR is downing
> SBR took decision DownReachable and is downing
也许我没有用正确的配置设置正确的策略,但我不确定要尝试什么,我有一个 4 节点集群,所以我猜默认 Keep Majority 应该这样做,虽然这种情况是更多的是崩溃的节点而不是网络分区
有没有办法使用 marathon-api 顺利部署 Akka 集群?我愿意接受建议
更新:
我还将 Akka 版本从 2.5.x 更新到 2.6.x,文档指出它不兼容,因此我需要手动干预第一次部署。最后使用默认配置的裂脑解析器确实有效
【问题讨论】: