Gibt es eine Möglichkeit, den Verkehr zu einem anderen Port umzuleiten, falls der Dienst, der den ursprünglichen Port abhört, nicht reagiert?

342
Shigbeard_

Dies ist eine ziemlich spezifische Frage, auf die ich jedoch keine Antwort finden konnte. Ich führe eine Reihe von Diensten auf einem LXC-Container in Ubuntu 16.04 LTS aus, insbesondere auf Game-Servern. Es ist jedoch bekannt, dass dieser Dienst fehlschlägt, und auch der Wrapper. Um also die Verfügbarkeit und das Lastgleichgewicht aufrechtzuerhalten, wenn Dienste hängen bleiben oder nicht reagieren, muss ich in der Lage sein, UDP- und TCP-Verkehr basierend auf der Reaktion eines Dienstes oder von Diensten umzuleiten.

Um das Szenario besser zu erklären, habe ich einen LXC-Container, der einer öffentlichen IP-Adresse ausgesetzt ist, wobei ein anderer LXC-Container mit iptables verschachtelt ist und den Datenverkehr an Port 21025 auf den verschachtelten Container umleitet. Wenn innerhalb dieses Containers die Dienste, die den Verkehr annehmen (angerufen ServiceWrapperund ServiceMain), nicht antworten, muss der Verkehr zu einem anderen Dienst an einem anderen Port gehen, den wir anrufen ServiceFallback. Andernfalls geht der Datenverkehr erwartungsgemäß an ServiceWrapper weiter, der den Datenverkehr an sendet ServiceMain.

Mein aktueller Versuch, diese Art von Routing zu implementieren wurde HAProxy zu verwenden, um zwischen zu Loadbalance ServiceWrapperund ServiceFallbackaber auf den ersten Blick scheint es, HAProxy die Umleitung von zusätzlichen Ports nicht erkennt oder auf Basis ermöglichen, wie es Loadbalancer ServiceWrapperund ServiceFallback. Sie sehen, ServiceMainakzeptiert UDP-Verkehr an einem anderen Port, um Serverabfragen wie Version, Hostname usw. zu erleichtern. Und soweit ich das beurteilen kann, wird HAProxy keinen UDP-Verkehr routen oder erkennen.

Ich bin halb verzweifelt, damit das funktioniert. Ich weiß, dass dies möglich ist, weil das genaue Setup, das ich ausführen möchte, für einen meiner direkten Konkurrenten funktioniert hat, sie scheinen jedoch nur ungern mit mir zu teilen, welche Pakete sie verwendet haben (vernünftig, aber eh).

1
Ich finde, du brauchst NGINX Garr Godfrey vor 6 Jahren 0

1 Antwort auf die Frage

0
Garr Godfrey

NGINX sollte alles tun, was Sie brauchen. Es unterstützt das UDP-Routing und bietet sowohl passive als auch aktive Integritätsprüfungen. Sie können also konfigurieren, wie festgestellt wird, ob der Hauptdienst ausgeführt wird oder nicht. Es kann so konfiguriert werden, dass es nur dann auf Ihren Sicherungsdienst zurückgreift, wenn die Integritätsprüfungen fehlschlagen.

Schreibt NGINX die Quell-IP neu? Und wenn ja, schickt es den Verkehr zurück zu dem Ort, an den er ursprünglich gekommen ist, als er eine Antwort erhält? Dies war ein anderes Problem, auf das ich später bei HAproxy gestoßen war: Pakete, die in den ServiceWrapper kamen, lasen, als würden sie von der internen IP-Adresse kommen, von der HAproxy ausgeht, und nicht von der tatsächlichen Quell-IP. Shigbeard_ vor 6 Jahren 0
Im Allgemeinen, ja, scheint es sich um eine interne IP-Adresse zu handeln, sie wird jedoch an den Client zurückgeleitet. Ich habe den UDP-Proxy jedoch nicht verwendet, da es so aussieht, als müsste die Quell-IP irgendwie vorhanden sein. Bei http-Verkehr würde das Original in den Header eingefügt. Garr Godfrey vor 6 Jahren 0