Amazon-Web-Services
ECS 上的 Flink taskmanager 無法連接到 EC2 上的 jobmanager
我有一個在 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://flink@ip-xxx-xx-x-xxx.ec2.internal:6123/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://flink@ip-xxx-xx-x-xxx.ec2.internal: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)。
今天我發現了為什麼這不起作用。
作業管理器配置為:
jobmanager.rpc.address: localhost
因此,在偵聽正確的 rpc 埠時,不接受到任何其他地址的流量。
當我更改它以匹配任務管理器時:
jobmanager.rpc.address: ip-xxx-xx-x-xxx.ec2.internal
然後任務管理器立即連接。