首页 文章

UDP负载均衡使用自定义 balancer 方法和UDP主体内的会话ID

提问于
浏览
2

我正在尝试设置负载 balancer 解决方案,它能够负载均衡UDP流量 . 在我的例子中,我有几个不同的服务器将UDP包发送到负载均衡器 . 在每个UDP包体内,都有一个MSG-ID字段 . 理想情况下,我希望基于该MSG-ID将UDP流量负载 balancer 到一组服务器 . 换句话说,应该将具有相同MSG-ID的两个UDP包发送到同一服务器(因为我想组装两个具有相同MSG-ID的UDP包以形成完整的包以供进一步处理) . 但如果不可能,那么基于源/发送方IP的解决方案可能就足够了 .

Haproxy不支持UDP所以我正在检查nginx . 但似乎只有nginx-plus(不是免费的解决方案)允许你根据ip_hash方法进行负载均衡?

我想知道:

  • 什么是最好的开源解决方案,帮助我根据UDP体内的自定义MSG-ID处理负载 balancer .

  • nginx(免费/开源)版本是否至少支持基于ip_hash方法的UDP负载均衡 .

  • 无论如何我可以欺骗UDP源/发送方IP . 基本上,如果我有服务器(如服务器A)从多个服务器(服务器D)接收UDP包并将其转发到一组服务器(服务器B,C);我希望服务器B,C接收包,IP表示为服务器D,而不是A.

  • 编写自定义层的缺点是读取UDP然后形成TCP包然后维护与负载均衡器的TCP连接以转发新形成的TCP包 . 在这种情况下,可以使用nginx或haproxy .

谢谢 .

2 回答

  • 0

    nginx确实支持开源nginx(自v1.19.13)和NGINX Plus的UDP负载均衡 . 从nginx.com阅读此post

    并且nginx提供了基于ip_hash开箱即用的UDP负载均衡,请查看docs

    所以我认为问题2的答案是肯定的 .

    在文档here中也提到,nginx上游模块在自定义密钥上提供哈希算法,在您的情况下可能是MSG-ID,但我不容易 . 我试着寻找一段时间但没有运气 . 如果您找到了解决方案,希望您能在此问题下分享 .

  • 1

    您通常会使用proxy_bind $ remote_addr transparent;在您的服务器{}上下文中 . 请注意,您需要一个(非常)最近的nginx,它具有上游/ udp负载 balancer 支持 .

相关问题