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.
Antworten:
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.
quelle
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 einfacheproxy_pass upstream_name
Anweisung 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 derBACKEND
für alle Ihre Server.Siehe zum Beispiel das Einrichtungsbeispiel für Pfund .
Wenn mehrere Load Balancer erforderlich sind, möchten Sie möglicherweise eine
heartbeat
Konfiguration 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.
quelle
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
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
IPV4-Adressen werden knapp und damit teuer - aber immer noch viel. viel billiger als ein Cisco CSS sagen.
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
quelle
Beginnen Sie Ihre Suche hier: http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html und http://www.barneyb.com/barneyblog/2009/02/26/apache-httpds-mod_proxy_balancer/
quelle
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.
quelle
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
quelle
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:
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.
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.
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 .
quelle