【发布时间】:2016-06-11 09:49:32
【问题描述】:
我正在尝试设置一个能够对 UDP 流量进行负载平衡的负载平衡解决方案。就我而言,我有几个不同的服务器,它们将 UDP 包发送到负载平衡器。在每个 UDP 包体内,都有一个 MSG-ID 字段。理想情况下,我想根据该 MSG-ID 将 UDP 流量负载平衡到一组服务器。换句话说,两个具有相同 MSG-ID 的 UDP 包应该被发送到同一个服务器(因为我想将两个具有相同 MSG-ID 的 UDP 包组装成一个完整的包以供进一步处理)。但如果不可能,那么基于源/发送方 IP 的解决方案可能就足够了。
Haproxy 不支持 UDP,所以我正在检查 nginx。但似乎只有 nginx-plus(不是免费解决方案)允许您基于 ip_hash 方法进行负载平衡?
我想知道:
- 什么是最好的开源解决方案,可以帮助我根据 UDP 正文中的自定义 MSG-ID 处理负载平衡。
- nginx(免费/开源)版本是否至少支持基于 ip_hash 方法的 UDP 负载均衡。
- 无论如何我可以欺骗 UDP 源/发送方 IP。基本上,如果我有服务器(例如服务器 A)从多个服务器(服务器 D)接收 UDP 包并将其转发到一组服务器(服务器 B,C);我希望服务器 B、C 接收 IP 为服务器 D 的包,而不是 A。
- 编写自定义层的缺点是什么,该层读取 UDP 然后形成 TCP 包,然后与负载平衡器保持 TCP 连接以转发新形成的 TCP 包。在这种情况下,nginx 或 haproxy 都可以使用。
谢谢。
【问题讨论】:
-
负载平衡会造成数据包交付乱序的情况。 TCP 可以处理这个问题,但它会导致性能下降。这真的会弄乱UDP。 UDP 是一种即发即弃协议,无法保证交付。许多实时协议,例如VoIP,使用 UDP。 VoIP 存在乱序数据包传送问题。
标签: networking nginx tcp udp load-balancing