负载均衡UDP服务器


10

我有一台udp服务器,它是我业务流程的核心部分。为了处理我在生产环境中期望的负载,我可能需要2或3个服务器实例。服务器几乎完全是无状态的,它主要收集数据,并且它上面的层知道如何处理来自多个服务器实例的最少的过时数据。

我的问题是,如何在服务器之间实现负载平衡?我希望在服务器之间尽可能均匀地分配请求。我也想保持一点忠诚,我的意思是,如果客户端X被路由到服务器y,那么我希望X的所有后续请求都发送到服务器Y,只要它是明智的且不会使Y过载。

顺便说一下,这是一个.NET系统...您会推荐什么?


状态是服务器内部的状态,而不是某种事务。状态是服务器从接收到的数据中聚合的一些数据,并且可以通过简单的WCF WebService进行隔离。该应用程序基于UDP,尽管我不同意该决定,但其“高于我的薪水等级”

我目前正在尝试使用MS的NLB,它可以正常运行,它确实可以保真,但是会在整个网络上产生噪音。

也没有DNS ...哦,这是一个完整的协议。


仅供以后参考-在许多情况下,主持人和享有盛誉的用户可以在stackexchange站点之间移动问题。这有助于保留已放置的所有答案,因此通常比自己重新发布要好(除非没有答案,在这种情况下,请删除旧问题,这样就不会有人无意中回答)。如果您同意搬家的建议,只需添加关于此效果的评论,并在可能的情况下标记您的帖子以引起主持人的注意,然后该帖子最终会为您移动。
bdonlan

Answers:


4

我有一台udp服务器,服务器几乎完全是无状态的[..]具有一定的保真度,我的意思是,如果客户端X被路由到服务器y,那么我希望所有X的后续请求都去服务器Y,因为只要是明智的,并且不会使Y过载。

因此,您使用的是未公开的应用程序协议,该协议可保留某些应用程序状态并在UDP之上运行?您有点困难。UDP不是可靠的数据传输,这是它的全部要点-有关可靠的数据传输,请参见其受欢迎的朋友TCP。获得“保真度”的唯一方法是拥有一个负载平衡代理,该代理了解您的应用程序层协议,并且知道您当前的应用程序状态并可以采取相应的措施。

我看到3种方法可以满足您的需求:

  • 根据(最终用户)IP地址,将传入的连接静态分布到3个IP地址上。这样,给定的用户将始终被定向到同一服务器。大多数专业防火墙都可以为您做到这一点。您可能必须使3台服务器具有高可用性,因为大多数防火墙都不会为您进行后端运行状况检查。

  • 正如Matt Simmons所建议的那样,使用DNS,并使用DNS Round Robin。

  • 使用Windows内置的网络负载平衡(NLB)。老实说,我不知道NLB和基于半状态UDP的服务将如何进行故障转移方案-您将不得不根据应用程序处理状态的方式自行进行调查。从好的方面来说,NLB设置非常容易,使用Windows许可证免费,成熟且性能良好。


我编辑了我的问题
地狱冰冻

6

Linux Virtual Server是基于真实服务器集群构建的高度可扩展且高度可用的服务器。支持LVS的UDP协议和源哈希算法(当您希望客户端始终出现在同一台realserver上时使用)。

我使用LVM来平衡DNS(rr),SIP(sh)。


4

有趣。我见过的大多数代理软件都基于TCP。

我在微薄的经验中看到的大多数特定于UDP的负载平衡都是基于DNS的(即时间服务器,DNS服务器等)。有什么办法可以提供多个A记录?如果可行,普通的DNS Round Robin将确保请求的公平分配(无论如何也足够公平),并且客户端缓存将确保保真度保持不变(假设您在客户端上使用基于缓存的平台)。


根本没有DNS。
地狱冰冻2011年

2

您可以使用任何类型的负载均衡器(硬件或软件)来执行此操作,您可以根据需要从不同的负载均衡器中进行选择。

级别3负载均衡器:仅通过查看传入IP和可用后端IP即可实现负载均衡,这种负载均衡器将始终通过向同一后端发送相同的传入IP地址来确保粘性,尽管这种策略可能会使一个过载如果许多客户端来自同一IP(无论是代理还是企业网关),则占后端的百分比

级别7负载均衡器:级别7负载均衡器不仅可以作为级别3均衡器进行均衡,还可以查看软件包的内容,这将为您的均衡策略提供更大的灵活性。

考虑到您使用的是UDP,两个均衡器都应具有良好的性能,因此,UDP深层数据包检查比TCP上的检查有所限制(仅出于协议原因)。

根据您的预算,您可以先使用软件负载平衡器(例如linux + IPVS),然后再使用诸如Cisco或Netapp提供的硬件负载平衡器。


L7部分为-1。第7层/第7层负载平衡器在应用程序层工作-但由于OP使用的是UDP,因此他没有使用普通的旧HTTP,并且他没有透露正在使用的应用程序。我们不知道OP正在使用的协议存在L7负载平衡器。
Jesper M,

1
我只是在评论他在负载均衡器中的选项,而我们不知道他在UDP上使用了什么,我想您太过严格了;)
lynxman 2011年

在NLB / linux和Cisco / netapp之间有一些东西:KEMP负载均衡器。您可以得到它的虚拟版本,而无需花费大量金钱,我们正在使用它,我们非常高兴。
pauska

2

开源NGINX和应用程序交付平台NGINX Plus现在支持UDP负载平衡。新功能建立在我们现有的TCP和HTTP功能的基础上,使NGINX成为功能强大,易于使用且一致的前端,可用于更广泛的Internet应用程序和设备。

在Nginx-1.9.13版本中可用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.