我有一个位于 us-east-1b 的 EC2 实例,它正在运行 flink jobmanager,它负责通过 RPC 和历史服务器协调多个任务管理器之间的工作。我可以从 netstat 中看到,jobmanager 正在监听:::6123
传入的任务管理器连接。
我有一个自动扩展组,它将把 EC2 实例运行到与 EC2 实例相同的 az、子网和安全组中。
安全组允许所有端口上的所有流量从组中的任何源到组中的任何目标:
我将该 ASG 用作 ECS 任务的容量提供者。然后,我尝试在 ECS 中运行一项任务,该任务运行任务管理器并使用该 ASG。
任务管理器启动了,但是无法连接到作业管理器:
2021-09-28 13:52:08,651 INFO org.apache.flink.runtime.taskexecutor.TaskExecutor [] - Could not resolve ResourceManager address akka.tcp://[email protected]:6123/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://[email protected]:6123/user/rpc/resourcemanager_*.
我已经通过 ssh-d 连接到 ASG 运行的实例,并确认我可以 curl 打开作业管理器ip-xxx-xx-x-xxx.ec2.internal:8081
- 它可以工作。所以我知道任务管理器实例可以看到作业管理器实例。
总结一下:
- Taskmanager和Jobmanager在同一个VPC、同一个AZ、同一个子网、同一个安全组
- 安全组允许来自同一安全组内源的所有入站流量
- 安全组允许所有出站流量到任何目的地
- jobmanager 正在手动创建的 EC2 实例上运行
- 任务管理器在 ECS 作为 ASG 的一部分创建的 EC2 实例上运行。任务管理器在 ECS 上的容器中运行
- 我可以从任务管理器节点 curl 作业管理器
- 任务管理器和作业管理器通过 RPC 进行通信
- 任务管理器无法解析作业管理器的地址
为什么我的任务无法连接?我也尝试了公网 IP (v4) 和私网 IP (v4)。
答案1
今天我发现了为什么它不起作用。
Jobmanager 配置如下:
jobmanager.rpc.address: localhost
因此,在监听正确的 rpc 端口时,不会接受到任何其他地址的流量。
当我将其更改为匹配任务管理器时:
jobmanager.rpc.address: ip-xxx-xx-x-xxx.ec2.internal
然后任务管理器立即连接。