Wie kann ich den eingehenden Webdatenverkehr zwischen N Apache-Servern verteilen?


12

Ich möchte so etwas wie Heartbeat / Squid / Varnish / etc verwenden, um den eingehenden Datenverkehr zwischen den internen Apache-Instanzen auszugleichen. Dies müsste Software und nicht Hardware sein, da alle meine Sachen auf VPS laufen. Ich habe nicht viel Erfahrung in diesem Bereich. Es tut mir leid, wenn ich die Terminologie falsch verwende und die falschen Pakete auswähle.

Ich habe mir etwas ausgedacht, um zu veranschaulichen, wonach ich strebe. Auf der grünen Seite würde das anfängliche Setup aussehen, auf der blauen Seite könnte es aussehen, nachdem aufgrund des zunehmenden Datenverkehrs mehr Apache-Instanzen hinzugefügt wurden. So funktionieren diese Dinge vielleicht nicht, aber im Idealfall würde ich die IP des Balancers / der Balancer zum DNS der Domäne hinzufügen. Dann würde der Balancer / die Balancer sehen, wie viele Verbindungen sich auf jeder Apache-Instanz befinden (über eine Konfigurationsliste von internen IPs oder ewigen IPs) und die Verbindungen gleichmäßig verteilen. Im Blau gibt es einen zweiten Balancer, da ich mir sicher bin, dass der Balancer irgendwann auch Hilfe brauchen würde.

Vielleicht mache ich das falsch, aber ich suche Hilfe zu den "Balancern" und bewährten Vorgehensweisen, um sie einzurichten.

Jede Hilfe wäre toll. Alt-Text


1
Entschuldigung, aber welches Programm haben Sie für Ihre Zeichnungen verwendet?
Prix

1
@ Prix - Sieht aus wie visio ( office.microsoft.com/en-us/visio )
malonso

Antworten:


4

So gut wie jeder "Reverse Proxy" wird tun, was Sie verlangen.

Zum Beispiel sind Varnish, Pound und HAProxy alle gut darin, was sie tun, aber sie haben auch ihre Unterschiede - aber für das, was Sie fragen, wird jeder von ihnen tun. Persönlich würde ich denken, dass Sie mit HAProxy am besten zurechtkommen, aber das ist nur eine Vermutung.

Lesen Sie am besten einen Artikel über Load Balancer, um herauszufinden, welche Art von Komponenten Sie benötigen: http://1wt.eu/articles/2006_lb/

Sie können auch einen vorgefertigten Service für diesen Zweck in Betracht ziehen, z. B. das Ausführen Ihrer Software in der Elastic Compute Cloud von Amazon und die Verwendung des Elastic Load Balancing.


2

Zunächst muss eine wichtige Frage beantwortet werden: Müssen
die Benutzersitzungen von den Load-Balancern verwaltet und immer auf demselben Webserver (sofern vorhanden) ausgeführt werden?

  • Sitzungen nicht erforderlich : In diesem Fall sollten Sie das effiziente Programm nginx als Load Balancer verwenden. Die Konfiguration ist einfach einzurichten, wobei Sie im Grunde nur die Liste der Webserver in einer upstream upstream_name { server1, ..., serverN }Anweisung angeben müssen und dann für eine bestimmte Domäne eine einfache proxy_pass upstream_nameAnweisung benötigen .
    Siehe Nginx-Wiki .

  • Sitzung erforderlich es eine ähnliche Einstellung ist Pfund in dem Sie den Namen des Cookies anzeigen , die wird Host die Session - ID ( ID MYCOOKIENAME), dann eine Liste der BACKENDfür alle Ihre Server.
    Siehe zum Beispiel das Einrichtungsbeispiel für Pfund .

Wenn mehrere Load Balancer erforderlich sind, möchten Sie möglicherweise eine heartbeatKonfiguration vornehmen, die entweder sicherstellt, dass nur ein Balancer die virtuelle IP-Adresse für eine bestimmte Domäne bereitstellt (sofern Sitzungen erforderlich sind) oder beide bereitstellt und DNS mit zwei IP-Adressen für bereitstellt Beispiel). Möglicherweise sollte dies in einer anderen Frage erläutert werden, wenn dies erforderlich wird (da sich die Tools schnell weiterentwickeln).
Siehe auch diesen Link zum Beispiel.


1

Sie sollten einen sehr guten Grund für die Einführung zusätzlicher Komplexität und einer einzigen Fehlerquelle in Ihre Architektur benötigen.

Round-Robin-Lastenausgleich

  • kostet nichts
  • ist einfach zu implementieren und zu verwalten
  • Implementiert Failover auf dem Client - der einzige Ort, an dem Fehler zuverlässig erkannt werden können
  • Unterstützt implizit die Serveraffinität, ermöglicht aber dennoch ein Failover ohne die Probleme der Sitzungsverwaltung, die mit Sticky-Sitzungen verbunden sind
  • erfordert keine zusätzliche Software / Hardware / Konfiguration auf Clusterknoten

Es erstaunt mich, wie viele Fehlinformationen in Bezug auf Round-Robin gemacht werden. Wenn ich eine zynische Person wäre, könnte ich mich fragen, ob es irgendeine Verbindung zu den Anbietern gibt, die große, teure Lastenausgleichshardware herstellen.

Die einzigen Punkte, die ich zugeben werde, sind die folgenden

  1. IPV4-Adressen werden knapp und damit teuer - aber immer noch viel. viel billiger als ein Cisco CSS sagen.

  2. Zunehmend läuft das Internet über Web-Services - und nicht alle Entwickler implementieren die DNS-Unterstützung gemäß den Spezifikationen . Aber jeder Browser, den ich jemals benutzt habe, funktioniert so, wie er sollte


"erfordert keine zusätzliche Software" - setzt voraus, dass die Webanwendung den Sitzungsstatus freigegeben hat (Login, Inhalt eines Einkaufskorbs usw.). Und DNS RR kann über längere Zeiträume einen ungleichmäßigen Lastenausgleich aufweisen. Ja, DNS RR ist eine praktikable Methode, aber sie ist den Alternativen kaum klar überlegen ...
Jesper M


0

Für die Balancer können Sie sich LVS unter http://www.linuxvirtualserver.org/ ansehen und möglicherweise ldirectord und heartbeat ausführen, um den Datenverkehr zu leiten und ein Failover durchzuführen.


0

Nginx ist großartig als Upstream-Proxy, ich habe es mit großem Erfolg in einer Konfiguration verwendet, die täglich 1M + Uniques durchführt


0

OK, das wurde vor einiger Zeit gefragt, und ich bin zu spät zur Party. Trotzdem gibt es hier noch etwas hinzuzufügen.

Jackie, du hast es so ziemlich geschafft. Ihre Abbildung zeigt, wie der Lastenausgleich bei den meisten kleineren und mittelgroßen Installationen gehandhabt wird.

Lesen Sie die Einführung zum Lastenausgleich von Willy Tarreau , mit der Nakedible verknüpft ist. Es ist immer noch gültig und eine gute Einführung.

Sie müssen überlegen, wie diese Ihren Anforderungen entsprechen:

  • Lastausgleicher auf TCP / IP-Ebene (Linux Virtual Server et al.). Niedrigster Overhead pro Verbindung, höchste Geschwindigkeit, HTTP kann nicht "gesehen" werden.
  • HTTP-Level-Load-Balancer (HAProxy, Nginx, Apache 2.2, Pound, Microsoft ARR und mehr). Höherer Overhead, kann HTTP sehen, kann HTTP gzipen, kann SSL tun, kann einen Lastausgleich für Sticky-Sitzungen durchführen.
  • HTTP-Reverse-Proxys (Apache Traffic Server, Varnish, Squid). Kann cachefähige Objekte (einige Webseiten, CSS, JS, Bilder) im RAM speichern und an nachfolgende Clients weiterleiten, ohne den Back-End-Webserver einzubeziehen. Kann oft die gleichen Aufgaben ausführen wie L7-HTTP-Load-Balancer.

Es gibt einen zweiten Balancer, da ich mir sicher bin, dass der Balancer irgendwann auch Hilfe brauchen würde.

Ja, natürlich. Der Lastenausgleich ist jedoch einfach, und häufig kann ein einzelner Lastenausgleich schnell ausgeführt werden . Ich verweise auf diesen Artikel, der im Web einen Nerv getroffen hat, als nur ein Beispiel für die Leistung, die ein einzelner moderner Server bieten kann. Verwenden Sie nicht mehrere LBs, bevor Sie müssen. Wenn Sie einen allgemeinen Ansatz benötigen, gehen Sie zu IP-Level-Load-Balancern (oder DNS Round Robin), zu HTTP-Level-Load-Balancern, zu Proxies und zu Webapp-Servern.

Hilfe zu den "Balancern" und bewährten Methoden zu deren Einrichtung.

Die Problemstelle ist die Behandlung des Sitzungszustands und bis zu einem gewissen Grad das Verhalten im Fehlerzustand. Das Einrichten der Load Balancer selbst ist vergleichsweise einfach.

Wenn Sie nur 2-4 Back-End-Webanwendungsserver verwenden, kann das statische Hashing basierend auf der Ursprungs-IP-Adresse sinnvoll sein. Dies vermeidet die Notwendigkeit eines gemeinsam genutzten Sitzungszustands zwischen Webanwendungsservern. Jeder Webanwendungsknoten sieht 1 / N des gesamten Datenverkehrs, und die Kunden-Server-Zuordnung ist im normalen Betrieb statisch. Es ist jedoch keine gute Lösung für größere Installationen.

Die beiden besten Lastausgleichsalgorithmen sind Round-Robin- Algorithmen und echte zufällige Lastausgleichsverfahren , da sie unter hoher Last und gleichmäßiger Lastverteilung ein harmloses Verhalten aufweisen . Beides setzt voraus, dass Ihre Webanwendung über einen globalen Sitzungsstatus verfügt, der auf den Webanwendungsknoten verfügbar ist. Wie dies gemacht wird, hängt vom Webapp Tech Stack ab. Hierfür stehen jedoch in der Regel Standardlösungen zur Verfügung.

Wenn weder statisches Hashing noch der Status einer gemeinsam genutzten Sitzung für Sie in Frage kommen, wählen Sie in der Regel den Lastausgleich für " Klebesitzungen " und den Sitzungsstatus pro Server. In den meisten Fällen funktioniert dies einwandfrei und es ist eine voll funktionsfähige Wahl.

Der Balancer / die Balancer würden sehen, wie viele Verbindungen sich auf jeder Apache-Instanz befinden (über eine Konfigurationsliste von internen IPs oder ewigen IPs) und die Verbindungen gleichmäßig verteilen

Ja, einige Websites verwenden dies. Es gibt viele Namen für die vielen verschiedenen Lastausgleichsalgorithmen , die existieren. Wenn Sie Round Robin oder Random (oder Weighted Round Robin, Weighted Random) auswählen können, würde ich Ihnen dies aus den oben genannten Gründen empfehlen.

Last thing: Vergessen Sie nicht, dass viele Anbieter (F5, Cisco und andere High-End-Anbieter, fx Coyote Point und Kemp Technologies zu günstigeren Preisen) ausgereifte Load-Balancing-Appliances anbieten .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.