如果偵聽原始連接埠的服務無回應,是否可以將流量重新導向至另一個連接埠?

如果偵聽原始連接埠的服務無回應,是否可以將流量重新導向至另一個連接埠?

這是一個相當具體的問題,但我一直無法找到答案。我在 Ubuntu 16.04 LTS 中的 LXC 容器上執行一組服務,特別是遊戲伺服器。然而,已知該服務會失敗,其包裝器也是如此。因此,為了在服務掛起或無回應的情況下保持正常運作時間和負載平衡,我需要能夠根據一個或多個服務是否回應來重新導向 UDP 和 TCP 流量。

為了更好地解釋該場景,我將一個 LXC 容器暴露給公共 IP,另一個 LXC 容器嵌套有 iptables,將連接埠 21025 上的流量重定向到嵌套容器。在該容器內,如果接受流量的服務(稱為ServiceWrapperServiceMain)沒有回應,則流量必須轉到另一個連接埠(我們將稱為 )上的另一個服務ServiceFallback。否則,流量將按預期發送至 ServiceWrapper,然後 ServiceWrapper 將流量傳送至ServiceMain

我目前實現這種路由的嘗試是使用 HAProxy 在ServiceWrapper和之間進行負載平衡ServiceFallback,但乍一看,HAProxy 似乎不會根據其負載平衡方式檢測或允許重定向其他連接埠ServiceWrapperServiceFallback你看,ServiceMain在另一個連接埠上接受 UDP 流量,以方便伺服器查詢,例如版本、主機名稱等。

我半絕望地想讓它發揮作用。我知道這是可能的,因為我嘗試執行的確切設定已為我的直接競爭對手之一工作,但是他們似乎不願意與我分享甚至他們用來執行此操作的軟體包(合理,但是呃)。

答案1

NGINX 應該可以完成您需要的一切。它支援 UDP 路由,並具有被動和主動健康檢查,因此您可以設定它如何確定主服務是否正在運行。可以將其配置為僅在運行狀況檢查失敗時才回退到備份服務。

相關內容