2016-06-11 17 views
1

我想建立一個能夠負載均衡UDP流量的負載均衡解決方案。就我而言,我有幾個不同的服務器將UDP包發送到負載平衡器。在每個UDP包體內,都有一個MSG-ID字段。理想情況下,我想根據該MSG-ID將UDP流量負載平衡到一組服務器。換句話說,兩個具有相同MSG-ID的UDP包應該被髮送到同一個服務器(因爲我想組裝兩個具有相同MSG-ID的UDP包來形成完整的包以供進一步處理)。但是,如果這是不可能的,那麼基於源/發送者IP的解決方案可能就足夠了。UDP負載均衡使用定製的平衡方法與UDP身體內的會話ID

Haproxy不支持UDP,所以我正在檢查nginx。但似乎只有nginx-plus(不是免費的解決方案)允許你基於ip_hash方法做負載平衡?

我想知道:

  1. 什麼是最好的開源的解決方案,以幫助我處理基於UDP體內定製MSG-ID負載平衡。
  2. nginx(免費/開源)版本是否支持基於ip_hash方法的UDP負載均衡。
  3. 有反正我可以欺騙UDP源/發件人IP。基本上,如果我有從多個服務器(服務器D)接收UDP包並將其轉發給一組服務器(服務器B,C)的服務器(如服務器A);我想要服務器B,C接收IP,並將IP指定爲服務器D,而不是A.
  4. 寫入自定義層的缺點是:讀取UDP然後形成TCP包,然後與負載平衡器保持TCP連接以轉發新形成的TCP包。在這種情況下,可以使用nginx或haproxy。

謝謝。

+0

負載均衡可能會造成您無序傳送數據包的情況。 TCP可以處理這個問題,但它可能導致性能下降。這可能真的搞砸了UDP。 UDP是一個即忘即忘的協議,沒有保證交付。許多實時協議,例如VoIP,使用UDP。 VoIP在無序分組傳送方面存在問題。 –

回答

1

nginx在開源的nginx(自v1.19.13)和NGINX Plus都支持UDP負載平衡。閱讀本post從nginx.com

而且nginx的提供基於ip_hash開箱的UDP負載均衡,檢查docs

因此,我認爲對問題二是肯定的。

也在文檔here中提到,nginx上游模塊提供了一個自定義密鑰的哈希算法,在您的情況下可能是MSG-ID,但我不知道如何從您的MSG-ID中獲取UDP數據報我想這並不容易。我試圖尋找一段時間,但沒有運氣。如果你找到了解決方案,希望你可以在這個問題下分享。

0

您通常會使用proxy_bind $ remote_addr transparent;在您的服務器{}環境中。請注意,您需要一個(非常)最近的nginx以及上游/ udp負載平衡支持才能使其工作。