AWS ECS Fargate环境下Akka Cluster集群节点无法连接问题求助
核心错误点说明
- 第二种配置完全错误:canonical hostname是节点对外宣告的可访问地址,其他节点需要通过该地址与当前节点建立连接,配置为0.0.0.0会导致其他节点无法识别可访问的目标地址。
- 第一种配置逻辑正确但存在硬编码问题:Fargate实例的私有IP是动态分配的,不可直接硬编码到配置文件中,同时需要确认第一个实例确实绑定了该IP的25520端口。
正确部署配置方案
- 第一步:动态获取当前实例IP
Fargate实例启动时,调用ECS元数据接口获取当前实例的私有IP,将该IP同时配置到remote.artery.bind.hostname和remote.artery.canonical.hostname字段,端口固定为25520。 - 第二步:动态生成种子节点列表
通过AWS SDK查询当前ECS服务下所有处于RUNNING状态的实例IP,按格式akka://<你的集群名>@<实例IP>:25520生成种子节点列表,配置到cluster.seed-nodes字段,至少填入1个已启动的节点地址,建议填入所有已运行的节点地址提高成功率。 - 第三步:补全必要的Akka配置
增加如下必填配置项,避免默认配置导致的连接超时:{ "remote": { "artery": { "enabled": true, "transport": "tcp", "connection-timeout": "15s", "bind":{ "hostname": "<当前实例动态获取的私有IP>", "port": 25520 }, "canonical":{ "hostname": "<当前实例动态获取的私有IP>", "port": 25520 } } }, "cluster": { "seed-nodes": ["<通过SDK查询到的已运行实例的Akka地址>"], "seed-node-timeout": "30s", "downing-provider-class": "akka.cluster.sbr.SplitBrainResolverProvider" } } - 第四步:Fargate网络二次校验
确认ECS服务关联的安全组入站规则放开同安全组内所有IP的25520端口TCP访问权限,VPC开启DNS解析和DNS主机名配置,网络ACL未拦截25520端口的内部访问。
问题排查步骤
- 进入第二个Fargate实例的终端,执行
nc -zv 172.31.74.127 25520,如果连接失败,优先排查安全组、网络ACL规则,而非Akka配置。 - 进入第一个Fargate实例的终端,执行
ss -ntlp | grep 25520,确认Akka进程确实在监听25520端口,监听地址为当前实例的私有IP或0.0.0.0。 - 查看第一个实例的Akka运行日志,确认存在
Node is now the leader的日志输出,确认单节点集群已正常形成。
内容的提问来源于stack exchange,提问作者David Puleri
相关产品推荐
相关产品推荐

