Ich versuche, mich mit dem Konzept des Lastausgleichs vertraut zu machen, um Verfügbarkeit und Redundanz zu gewährleisten und die Benutzer bei Problemen zufrieden zu stellen, anstatt den Lastausgleich zu betreiben, um Millionen von Benutzern eine rasante Geschwindigkeit zu bieten.
Wir haben ein begrenztes Budget und versuchen, uns an die Dinge zu halten, bei denen es genügend Wissen gibt. Daher scheint es die Strategie zu sein, Apache unter Ubuntu VPS zu betreiben, bis uns eine berühmte Suchmaschine dazu bringt ( inklusive Samstags-Ironie, bitte beachten Sie ).
Zumindest für mich ist es ein kompletter Dschungel von verschiedenen verfügbaren Lösungen. Apaches own mod_proxy & HAproxy sind zwei, die wir durch eine schnelle Google-Suche gefunden haben. Da ich jedoch keine Erfahrung mit dem Lastenausgleich habe, habe ich keine Ahnung, was für unsere Situation angemessen wäre oder worauf wir bei der Auswahl einer Lösung für unsere Probleme achten würden Bedenken hinsichtlich der Verfügbarkeit.
Was ist die beste Option für uns? Was sollten wir tun, um die Verfügbarkeit hoch zu halten, während wir innerhalb unseres Budgets bleiben?
Antworten:
Die Lösung, die ich verwende und die mit VPS einfach zu implementieren ist, ist folgende:
Dieser Bogen hat meiner voreingenommenen Meinung nach die folgenden Vorteile:
In Ihrem Fall ist es eine gute Idee, physikalisch getrennte VPSs zu haben, aber die gemeinsame Nutzung von IP-Adressen wird schwieriger. Das Ziel besteht darin, ein fehlerresistentes, redundantes System und einige Konfigurationen für Load Balancing / HA zu haben und einen einzigen Fehlerpunkt hinzuzufügen (wie einen einzelnen Load Balancer, um den gesamten Datenverkehr zu empfangen).
Ich weiß auch, dass Sie nach Apache gefragt haben, aber heutzutage haben wir spezielle Tools, die besser für den Job geeignet sind (wie Nginx und Lack). Überlassen Sie es apache, die Anwendungen auf dem Backend auszuführen und sie mit anderen Tools zu bedienen (nicht, dass apache keinen guten Lastenausgleich oder Reverse-Proxying durchführen kann, es geht nur darum, verschiedene Teile des Jobs auf mehr Dienste zu verlagern, damit jeder Teil eine gute Leistung erbringen kann es ist Anteil).
quelle
HAproxy ist eine gute Lösung. Die Konfiguration ist ziemlich einfach.
Sie benötigen eine weitere VPS-Instanz, um vor mindestens zwei anderen VPS zu sitzen. Zum Lastenausgleich / Failover benötigen Sie also mindestens 3 VPS
Ein paar Dinge, über die man nachdenken sollte, sind:
SSL-Kündigung. Wenn Sie HTTPS: // verwenden, sollte diese Verbindung am Load Balancer beendet werden. Hinter dem Load Balancer sollte der gesamte Datenverkehr über eine unverschlüsselte Verbindung geleitet werden.
Dateispeicher. Wenn ein Benutzer ein Bild hochlädt, wohin geht es? Sitzt es nur auf einer Maschine? Sie benötigen eine Möglichkeit, um Dateien sofort zwischen Computern auszutauschen - Sie könnten den S3-Dienst von Amazon verwenden, um alle statischen Dateien zu speichern, oder Sie könnten einen anderen VPS verwenden, der als Dateiserver fungieren würde, aber ich würde S3 empfehlen, weil es redundant und unglaublich billig ist.
Sitzungsinfo. Jeder Computer in Ihrer Load Balancer-Konfiguration muss auf die Sitzungsinformationen des Benutzers zugreifen können, da Sie nie wissen, auf welchen Computer er zugreifen wird.
db - hast du einen separaten db server? Wenn Sie gerade nur einen Computer haben, wie stellen Sie sicher, dass Ihr neuer Computer Zugriff auf den Datenbankserver hat? Wenn es sich um einen separaten VPS-Datenbankserver handelt, wie redundant ist das? Es ist nicht unbedingt sinnvoll, ein Hochverfügbarkeits-Web-Front-End und einen einzigen Ausfallpunkt mit einem Datenbankserver zu haben. Jetzt müssen Sie auch die Datenbankreplikation und die Slave-Promotion berücksichtigen.
Also, ich bin in Ihren Schuhen, das ist das Problem mit einer Website, die ein paar hundert Zugriffe pro Tag auf eine echte Operation macht. Es wird schnell komplex. Ich hoffe, das hat dir zu denken gegeben :)
quelle
Ich stimme für Linux Virtual Server als Load Balancer. Dies macht den LVS-Direktor zu einer einzigen Fehlerquelle und zu einem Engpass
Die Kosten können niedrig gehalten werden, indem sich der erste Director auf demselben Computer wie der erste LVS-Knoten und der zweite Director auf demselben Computer wie der zweite LVS-Knoten befindet. Dritte und nachfolgende Knoten sind reine Knoten ohne LVS- oder HA-Implikationen.
Dadurch können Sie auch beliebige Webserver-Software ausführen, da die Umleitung unterhalb der Anwendungsebene erfolgt.
quelle
Wie wäre es mit dieser Kette?
Round-Robin-DNS> Haproxy auf beiden Maschinen> Nginx, um statische Dateien zu trennen> Apache
Verwenden Sie möglicherweise auch Ucarp oder Heartbeat, um sicherzustellen, dass Haproxy immer antwortet. Stunnel würde vor haproxy sitzen, wenn Sie auch SSL benötigen
quelle
Möglicherweise möchten Sie die Verwendung einer geeigneten Cluster-Software in Betracht ziehen. RedHats (oder CentOS) Cluster Suite oder Oracle ClusterWare . Diese können zum Einrichten von Aktiv-Passiv-Clustern und zum Neustarten von Diensten verwendet werden. Bei schwerwiegenden Problemen können Fehler zwischen Knoten auftreten. Dies ist im Wesentlichen das, wonach Sie suchen.
Alle diese Cluster-Lösungen sind in den jeweiligen Betriebssystem-Lizenzen enthalten. Sie erfordern eine Art von gemeinsam genutztem Speicher - entweder ein NFS-Mount oder eine physische Festplatte, auf die beide Knoten mit einem Cluster-Dateisystem zugreifen. Ein Beispiel für Letzteres wären SAN-Festplatten mit mehreren zulässigen Hostzugriffen , die mit OCFS2 oder GFS formatiert sind . Ich glaube, Sie können dafür freigegebene VMWare- Festplatten verwenden .
Die Clustersoftware wird verwendet, um "Dienste" zu definieren, die ständig auf Knoten ausgeführt werden, oder nur, wenn dieser Knoten "aktiv" ist. Die Knoten kommunizieren über Heartbeats und überwachen diese Dienste. Sie können sie neu starten, wenn sie Fehler bemerken, und neu starten, wenn sie nicht behoben werden können.
Sie würden im Grunde eine einzelne "gemeinsame" IP-Adresse konfigurieren, an die der Datenverkehr geleitet wird. Dann können auch Apache und alle anderen erforderlichen Dienste definiert und nur auf dem aktiven Server ausgeführt werden. Die freigegebene Festplatte wird für Ihren gesamten Webinhalt, alle hochgeladenen Dateien und Ihre Apache-Konfigurationsverzeichnisse verwendet. (mit httpd.conf, etc)
Nach meiner Erfahrung funktioniert das unglaublich gut.
--Christopher Karel
quelle
Ein optimaler Lastausgleich kann sehr teuer und kompliziert sein. Der grundlegende Lastenausgleich sollte lediglich sicherstellen, dass jeder Server zu jeder Zeit ungefähr die gleiche Anzahl von Treffern verarbeitet.
Die einfachste Methode zum Lastenausgleich besteht darin, mehrere A-Einträge in DNS bereitzustellen. Standardmäßig wird die IP-Adresse in einer Round-Robin-Methode konfiguriert. Dies führt dazu, dass die Benutzer relativ gleichmäßig auf die Server verteilt sind. Dies funktioniert gut für zustandslose Sites. Eine etwas komplexere Methode ist erforderlich, wenn Sie eine Stateful-Site haben.
Um Statusanforderungen zu verarbeiten, können Sie Weiterleitungen verwenden. Weisen Sie jedem Webserver eine alternative Adresse zu, z. B. www1, www2, www3 usw. Leiten Sie die ursprüngliche www-Verbindung zur alternativen Adresse des Hosts um. Auf diese Weise können Lesezeichenprobleme auftreten, die jedoch gleichmäßig auf die Server verteilt sein sollten.
Wenn Sie alternativ einen anderen Pfad verwenden, um anzugeben, welcher Server die zustandsbehaftete Sitzung abwickelt, können Sie Sitzungen, bei denen der Host auf den ursprünglichen Server umgeschaltet wurde, auch per Proxy weiterleiten. Dies kann ein Problem sein, wenn die Sitzung für einen ausgefallenen Server auf einem Server eintrifft, der vom ausgefallenen Server übernommen wurde. Wenn Sie die Cluster-Software nicht aktivieren, fehlt der Status jedoch. Aufgrund von Browser-Caching treten möglicherweise nicht viele Sitzungen auf, in denen die Server gewechselt werden.
Failover kann durch Konfigurieren des Servers zur Übernahme der IP-Adresse eines ausgefallenen Servers durchgeführt werden. Dies minimiert die Ausfallzeit, wenn ein Server ausfällt. Ohne Clustering-Software gehen zustandsbehaftete Sitzungen verloren, wenn ein Server ausfällt.
Ohne Failover kommt es zu einer Verzögerung, bis der Browser auf die nächste IP-Adresse umschaltet.
Durch die Verwendung von Restful-Diensten anstelle von Stateful-Sitzungen sollten Clusterprobleme im Front-End behoben werden. Clustering-Probleme auf der Speicherseite würden weiterhin auftreten.
Selbst wenn sich Load Balancer vor den Servern befinden, haben Sie wahrscheinlich Round-Robin-DNS vor sich. Dadurch wird sichergestellt, dass alle Ihre Load Balancer verwendet werden. Sie fügen Ihrem Entwurf eine weitere Ebene hinzu, die komplexer und fehleranfälliger ist. Sie können jedoch einige Sicherheitsfunktionen bereitstellen.
Die beste Lösung hängt von den jeweiligen Anforderungen ab.
Das Implementieren von Image-Servern zur Bereitstellung von Inhalten wie Bildern, CSS-Dateien und anderen statischen Inhalten kann die Belastung der Anwendungsserver verringern.
quelle
Ich benutze im Allgemeinen ein Paar identischer OpenBSD-Maschinen:
OpenBSD ist leicht, stabil und ziemlich sicher - Perfekt für Netzwerkdienste.
Zu Beginn empfehle ich ein Layer3-Setup. Dies vermeidet Komplikationen bei der Einrichtung einer Firewall (PF). Hier ist ein Beispiel für die Datei /etc/relayd.conf, die die Einrichtung eines einfachen Relay-Load-Balancers mit Überwachung der Backend-Webserver zeigt:
quelle
Haben Sie ec2 mit Cloudfoundry oder vielleicht Elastic Beanstalk oder nur einem einfachen alten AWS Autoscaling einen Gedanken gegeben. Ich habe das benutzt und es skaliert ziemlich gut und elastisch zu sein kann ohne menschliches Eingreifen skaliert werden.
Angesichts der Tatsache, dass Sie sagen, dass Sie keine Erfahrung mit dem Lastenausgleich haben, würde ich diese Optionen vorschlagen, da sie nur minimales "Braten" des Gehirns erfordern, um in Betrieb zu gehen.
Es könnte eine bessere Nutzung Ihrer Zeit sein.
quelle
pound
bis vor kurzem verwendet wurden, haben meines Erachtens Nginx implementiert. Beachten Sie, dass Nginx als Ersatz für Apache oder nur als Frontend für Apache implementiert werden kann.