这是一个相当具体的问题,但我还没有找到答案。我在 Ubuntu 16.04 LTS 中的 LXC 容器上运行一组服务,特别是游戏服务器。但是,已知此服务会失败,其包装器也是如此。因此,为了在服务挂起或无响应的情况下保持正常运行时间和负载平衡,我需要能够根据服务是否响应来重定向 UDP 和 TCP 流量。
为了更好地解释这个场景,我有一个暴露在公共 IP 上的 LXC 容器,另一个 LXC 容器嵌套在 iptables 中,将端口 21025 上的流量重定向到嵌套容器。在该容器内,如果接受流量的服务(称为ServiceWrapper
和ServiceMain
)没有响应,则流量必须转到另一个端口上的另一个服务(我们将其称为 )ServiceFallback
。否则,流量将按预期转到 ServiceWrapper,然后 ServiceWrapper 将流量发送到ServiceMain
。
我目前尝试使用 HAProxy 在ServiceWrapper
和之间进行负载平衡ServiceFallback
,但乍一看,HAProxy 似乎不会根据其负载平衡ServiceWrapper
和的方式检测或允许重定向其他端口ServiceFallback
。您会看到,ServiceMain
在另一个端口上接受 UDP 流量以方便服务器查询,例如版本、主机名等。据我所知,HAProxy 不会路由或检测 UDP 流量。
我有点不顾一切地想要让它工作。我知道这是可能的,因为我尝试执行的确切设置已经为我的一个直接竞争对手工作过,但他们似乎不愿意与我分享他们用来做这件事的软件包(合理,但是呃)。
答案1
NGINX 应该能满足您的所有需求。它支持 UDP 路由,并具有被动和主动健康检查,因此您可以配置它如何确定主服务是否正在运行。它可以配置为仅在健康检查失败时才回退到备份服务。