我有一个应用程序负载均衡器 (ALB) 和它背后的多个 Web 服务器。除了 HTTP 和 HTTPS,Web 服务器还提供持久的 TCP 套接字连接在港口52345。
当客户端套接字尝试连接到端口上的 ALB 时52345,它会失败,因为 ALB 在此端口上没有监听器。
当我尝试在此端口上添加侦听器时,我意识到 ALB 仅允许在 HTTP 和 HTTPS 上侦听。因此,我尝试在端口上添加 HTTP 侦听器52345。还是没用。
错误信息:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 34.199.41.181:52345
我该如何克服这个障碍?为什么 AWS 不允许在 ALB 上使用 TCP 侦听器?
答案1
ALB 专门用于 http 和 https 应用程序,不适用于一般 TCP。如果您需要 TCP 负载均衡器,则应考虑使用 NLB(网络负载均衡器)。它们可扩展到极高的负载,并具有一些非常有用的功能。 NLB 可以平衡任何端口的负载,包括 http/80 和 https/443,但它不具备应用程序/协议感知能力,因此它不具备基于路径的路由等功能。 NLB 可以具有静态(弹性)IP。
如果您需要两种类型的负载均衡器的功能,则可以考虑同时使用它们。NLB 可以位于子域或固定 IP 上。
答案2
上面的答案并不正确,应用程序负载均衡器确实适用于 TCP 套接字,你只需要花上半辈子的时间去弄清楚。根据 AWS 的说法,“应用程序负载均衡器为 WebSocket 提供本机支持”:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html
如果有帮助的话,我整理了一份关于如何设置的简短分步指南。:)