Ich möchte einen Reverse-Proxy/HTTP-Load Balancer vor einer Reihe von Backend-Anwendungsservern einsetzen. Das Problem dabei ist, dass sich die Anzahl der Backends im Laufe der Zeit ändern kann und neue Anwendungsserver dynamisch erstellt werden können (die Gesamtzahl ist also nicht im Voraus bekannt). Das bedeutet so etwas wieLack, die Integritätsprüfungen für einbekanntSatz von Backends, ist keine Option.
Das Beste, was mir eingefallen ist, ist die prg
RewriteMap
Unterstützung in Apache in Kombination mit Proxy RewriteRule
-Ausdrücken. Ich habe einen einfachen Client/Server-Mechanismus zusammengehackt, mit dem sich die Anwendungsserver beim Frontend „registrieren“ können, und ein RewriteMap
Programm, das Backends aus dieser Liste auswählt. Es funktioniert, aber es stinktWirklichhackig.
Dies scheint ein relativ häufiges Szenario zu sein (bei so vielen Cloud-Dienstanbietern, die es einfach machen, bei Bedarf neue Server hochzufahren). Wie lösen andere Leute dieses Problem? Verwenden Sie nur einen kommerziellen Load Balancer? Wirft jeder etwas auf eigene Faust zusammen?
Antwort1
Das in Apache integrierte (oder mitgelieferte) Modul „mod_proxy_balancer“ stellt die meisten dieser Funktionen bereit, einschließlich individueller Gewichtung und kontrolliertem Zusammenführen und Herausnehmen von Mitglieds-Backends.
Es gibt auch eine Balancer-Manager-App, um dieses Verhalten zur Laufzeit zu visualisieren und zu steuern.
Einzelheiten finden Sie hier:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
Antwort2
nginx unterstützt dies nicht von Haus aus, aber es ist ziemlich einfach zu implementieren. Ich habe es getan, also wird es unten ausführlich erklärt
1) Erstellen Sie eine separate Konfigurationsdatei nur für Upstreams (upstreams.conf) und schließen Sie sie aus der Haupt-nginx.conf ein. 2) Jetzt können Sie diese Datei manuell oder separat per Skript bearbeiten. Ich habe ein einfaches Perl-Skript geschrieben, um diese Datei zu verwalten und Textzeilen mit Upstream-Beschreibung hinzuzufügen/zu löschen. 3) Senden Sie ein HUP-Signal an den Haupt-nginx-Prozess, um ein ordnungsgemäßes Neuladen zu veranlassen. 4) Es wurde eine Web-Benutzeroberfläche implementiert, um diese Vorgänge zu steuern und Integritätsprüfungen durchzuführen, aber dies ist kein FOSS.
Streiten Sie darüber, dass es ein paar 3-Seiten-Module gibt, die Gesundheitscheck und Management-Schnittstelle implementieren, bitte werfen Sie einen Blick auf
http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord
Ich bin nicht sicher, aber möglicherweise hat Haproxy auch die gleiche Funktionalität.
Antwort3
Fast alle kommerziellen Lastausgleichslösungen (F5, Citrix, A10 usw.) verfügen über Konfigurationsmanagement-APIs (REST- oder SOAP-basiert), die für diesen Zweck problemlos genutzt werden können – Server können sich im Rahmen ihres Startroutings selbst zu den entsprechenden Pools hinzufügen und sich selbst löschen, wenn sie heruntergefahren werden. Wenn ein Server abstürzt, würde der Lastausgleichsserver ihn aufgrund von Healthcheck-Fehlern als heruntergestuft markieren.