如果监听原始端口的服务没有响应,有没有办法将流量重定向到另一个端口?

如果监听原始端口的服务没有响应,有没有办法将流量重定向到另一个端口?

这是一个相当具体的问题,但我还没有找到答案。我在 Ubuntu 16.04 LTS 中的 LXC 容器上运行一组服务,特别是游戏服务器。但是,已知此服务会失败,其包装器也是如此。因此,为了在服务挂起或无响应的情况下保持正常运行时间和负载平衡,我需要能够根据服务是否响应来重定向 UDP 和 TCP 流量。

为了更好地解释这个场景,我有一个暴露在公共 IP 上的 LXC 容器,另一个 LXC 容器嵌套在 iptables 中,将端口 21025 上的流量重定向到嵌套容器。在该容器内,如果接受流量的服务(称为ServiceWrapperServiceMain)没有响应,则流量必须转到另一个端口上的另一个服务(我们将其称为 )ServiceFallback。否则,流量将按预期转到 ServiceWrapper,然后 ServiceWrapper 将流量发送到ServiceMain

我目前尝试使用 HAProxy 在ServiceWrapper和之间进行负载平衡ServiceFallback,但乍一看,HAProxy 似乎不会根据其负载平衡ServiceWrapper和的方式检测或允许重定向其他端口ServiceFallback。您会看到,ServiceMain在另一个端口上接受 UDP 流量以方便服务器查询,例如版本、主机名等。据我所知,HAProxy 不会路由或检测 UDP 流量。

我有点不顾一切地想要让它工作。我知道这是可能的,因为我尝试执行的确切设置已经为我的一个直接竞争对手工作过,但他们似乎不愿意与我分享他们用来做这件事的软件包(合理,但是呃)。

答案1

NGINX 应该能满足您的所有需求。它支持 UDP 路由,并具有被动和主动健康检查,因此您可以配置它如何确定主服务是否正在运行。它可以配置为仅在健康检查失败时才回退到备份服务。

相关内容