2016-06-11 11 views
1

Ich versuche, eine Load-Balancing-Lösung, die in der Lage ist, UDP-Datenverkehr Last auszugleichen. In meinem Fall habe ich mehrere verschiedene Server, die ein UDP-Paket an einen Load-Balancer senden. In jedem UDP-Paketkörper befindet sich ein MSG-ID-Feld. Im Idealfall möchte ich den UDP-Datenverkehr auf eine Reihe von Servern verteilen, die auf dieser MSG-ID basieren. Mit anderen Worten, zwei UDP-Pakete mit derselben MSG-ID sollten an denselben Server gesendet werden (weil ich zwei UDP-Pakete mit derselben MSG-ID zu einem vollständigen Paket für die weitere Verarbeitung zusammenstellen möchte). Aber wenn es nicht möglich ist, dann könnte eine Lösung auf der Basis von Quell-/Sender-IP ausreichen.UDP Load Balancing mit benutzerdefinierten Balancing-Methode mit Sitzungs-ID innerhalb UDP Körper

Haproxy unterstützt UDP nicht, also überprüfe ich nginx. Aber scheint nur nginx-plus (nicht freie Lösung) Sie Last-Balance basierend auf ip_hash-Methode zu tun?

Ich mag wissen:

  1. Was beste Open-Source-Lösung ist mir Lastenausgleich basierend auf kundenspezifischen MSG-ID innerhalb UDP Körper zu helfen, zu behandeln.
  2. Unterstützt die nginx (freie/Open-Source) Version mindestens UDP Load-Balance basierend auf der ip_hash Methode.
  3. Gibt es trotzdem kann ich die UDP-Quelle/Absender IP spoof. Grundsätzlich, wenn ich Server (wie Server A) habe, die UDP-Paket von mehreren Server (Server D) empfangen und es an eine Gruppe von Servern (Server B, C) weiterleiten; Ich möchte den Server B, C Paket mit IP als Server D, nicht A.
  4. Was ist der Nachteil des Schreibens einer benutzerdefinierten Schicht, die UDP lesen dann ein TCP-Paket bilden und dann eine TCP-Verbindung mit Load Balancer, um das weiterleiten neu gebildetes TCP-Paket. In diesem Fall können sowohl Nginx als auch Haproxy verwendet werden.

Danke.

+0

Load Balancing kann eine Situation verursachen, in der Sie eine Out-of-Order-Paketzustellung erhalten. TCP kann damit umgehen, aber es kann zu Leistungseinbußen kommen. Das kann UDP wirklich durcheinander bringen. UDP ist ein Fire-and-Forget-Protokoll ohne garantierte Zustellung. Viele Echtzeitprotokolle, z.B. VoIP, benutze UDP. VoIP hat ein Problem mit der Out-of-Order-Paketzustellung. –

Antwort

1

nginx unterstützt den UDP-Lastenausgleich sowohl in Open Source nginx (seit v1.19.13) als auch in NGINX Plus. Lesen Sie diesen post von nginx.com

Und nginx bietet UDP Lastenausgleich basierend auf ip_hash aus der Box, überprüfen Sie die docs

Also ich denke, die Antwort auf die Frage No.2 ist ja.

Auch erwähnt in der Dokumentation here, Nginx Upstream-Modul bieten Hash-Algorithmus auf einem benutzerdefinierten Schlüssel, in Ihrem Fall könnte MSG-ID sein, aber ich weiß nicht, wie Sie MSG-ID aus Ihrem UDP-Datagramm bekommen und ich denke, es wird nicht einfach sein. Ich habe eine Weile gesucht, aber kein Glück. Wenn Sie eine Lösung gefunden haben, hoffen Sie, dass Sie unter dieser Frage teilen können.

0

Normalerweise würden Sie proxy_bind $ remote_addr transparent verwenden; in Ihrem Server {} Kontext. Beachten Sie, dass Sie ein (sehr) aktuelles Nginx mit Upstream/UDP-Loadbalancing-Unterstützung benötigen, damit dies funktioniert.