我有一个在 us-east-1b 中的 EC2 实例,它正在运行 flink 作业管理器,它负责通过 RPC 和历史服务器协调多个任务管理器之间的工作。我可以从 netstat 看到 jobmanager 正在监听:::6123
传入的 taskmanager 连接。
我有一个 Auto Scaling 组,它会将 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实例。
总结一下:
- taskmanager和jobmanager在同一个VPC,同一个AZ,同一个子网,同一个安全组
- 安全组允许来自同一安全组中源的所有入站流量
- 安全组允许所有出站流量到任何目的地
- 作业管理器在手动创建的 EC2 实例上运行
- 任务管理器在 ECS 作为 ASG 的一部分创建的 EC2 实例上运行。任务管理器运行在 ECS 上的容器中
- 我可以从任务管理器节点卷曲作业管理器
- taskmanager 和 jobmanager 通过 RPC 通信
- 任务管理器不会将地址解析给作业管理器
为什么我的任务无法连接?我还尝试了公共 IP (v4) 和私有 IP (v4)。
今天我发现了为什么这不起作用。
作业管理器配置为:
因此,在侦听正确的 rpc 端口时,不接受到任何其他地址的流量。
当我更改它以匹配任务管理器时:
然后任务管理器立即连接。