Lastausgleich Wordpress in Amazon Web Services: Verwalten von Änderungen

7

Ich bin relativ neu bei Amazon Web Services und versuche mir ein Bild davon zu machen, wie Elastic Load Balancing im Kontext meines WordPress-Setups funktioniert. Darüber hinaus möchte ich einige Ratschläge zur vorgeschlagenen Infrastruktur.

Meine ursprünglich vorgeschlagene Infrastruktur lautet wie folgt:

  • 1x EC2 m1.small - Ubuntu 12.04.3 LTS 64bit (mit 1 EBS-Volume)
  • 1x EC2 t1.micro - Ubuntu 12.04.3 LTD 64bit (mit oder ohne EBS-Volume?)
  • 1x Micro RDS-Instanz - MySQL 5.6.13

EC2 Auf meinem aktuellen EC2 (t1.micro) wird ein LAMP-Stack ausgeführt und für die Ausführung von WordPress konfiguriert.

Ich möchte dies mit einer m1.small-Instanz ausgleichen, die einen Klon der t1.micro-Instanz ausführt.

Die aktuellen Unbekannten für mich sind wie folgt:

  • Wie verwaltet ein Setup mit Lastenausgleich Änderungen, die am WordPress-CMS über Instanzen hinweg vorgenommen wurden? Muss ich die AMIs jedes Mal aktualisieren, wenn eine Änderung in WordPress vorgenommen wird?
  • Meine Website ist eine E-Commerce-Website. Gibt es Auswirkungen auf ein Setup mit Lastenausgleich? Gibt es eine Möglichkeit, dass Befehle auf einer Instanz und nicht auf einer anderen existieren?

Es mag eine ziemlich dumme Frage sein, aber ich gehe davon aus, dass einige Probleme nicht relevant sind, da die Infrastruktur auf eine Datenbank verweist.

Gibt es eine bessere Möglichkeit, die Infrastruktur für den Lastausgleich einzurichten? Das heißt, ich sollte in Betracht ziehen, Amazon S3 zum Speichern aller meiner Dateien zu verwenden und Cloudfront als CDN zu verwenden, um einen effizienten Betrieb sicherzustellen und Probleme bei der Replikation von EBS-Dateien zu beheben.

Jede Hilfe sehr geschätzt.

Lloyd

Lloyd Rees
quelle
Sie möchten fast nie Mikros in der Produktion betreiben. Ihre CPUs werden unter Last stark ausgelastet, sodass Ihr RDS bei angemessenem Datenverkehr zum Stillstand kommt.
Ceejayoz

Antworten:

5

Staatenlose Web-Apps sind schwierig.

Wie Sie wissen, hängt WordPress ziemlich stark davon ab, dass Dinge auf die Festplatte geschrieben werden. Hier ist die vorgeschlagene Infrastruktur

  • Elastic Load Balancer
    • Autoscaling-Gruppe bestehend aus kleinen ec2-Instanzen
  • Foreman / Dev micro ec2 Instanz
  • Micro / Small RDS für CMS-Daten
  • Elasticache-Cluster für die Sitzungsspeicherung
  • S3-Bucket für Medien-Uploads

Nun der schwierige Teil.

Vergessen wir für eine Sekunde die Aktualisierungen der Codebasis und schauen wir uns an, wie man das Ganze zustandslos macht. Sie sollten Folgendes tun, um dieses Objekt horizontal skalierbar zu machen:

  1. Beginnen Sie mit Ihrer Mikroinstanz. Es fungiert sowohl als Bereitstellungsmechanismus als auch als Vorlage
  2. Stellen Sie PHP-Sitzungen so ein, dass memcached für die Sitzungsverwaltung verwendet wird, und verweisen Sie es auf Ihren Elasticache-Cluster. Http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
  3. Installieren Sie git auf der Mikroinstanz
  4. Installieren Sie eine Art WordPress-Plugin, um alle Datei-Uploads in S3 zu speichern (optional, erspart Ihnen jedoch die erneute Bereitstellung bei jedem Hochladen einer Medien-Datei auf das CMS). Probieren Sie das W3 Total Cache-Plugin aus

Dies kümmert sich um das Setup

So stellen Sie neue Änderungen bereit

Sie werden Ihre Mikroinstanz für alle zukünftigen Änderungen an der WordPress-Installation verwenden. Dazu gehören Dinge wie das Aktualisieren von WordPress, das Aktualisieren Ihrer Themendateien und so ziemlich alles, was auf der Festplatte gespeichert ist.

Sie müssen zwei Skripte erstellen:

Die erste wird verwendet, um die Änderungen in der Autoscaling-Gruppe bereitzustellen. Es sollte Folgendes tun:

  1. Übernehmen Sie die an seinem Git-Repo vorgenommenen Änderungen
  2. Pingen Sie alle Produktionsinstanzen an und weisen Sie sie an, die neue Codebasis von der Mikroinstanz herunterzuladen. Sie müssen eine Form von AWS sdk verwenden, um die Liste der Instanzen in der Gruppe mit automatischer Skalierung abzurufen und deren Empfangsskripte auszulösen. Ich persönlich mache das mit meinem über einen HTTP-Endpunkt, den ich erstellt habe.

Das zweite Skript wird auf den Instanzen der automatisch skalierenden Gruppe ausgeführt und vom ersten Skript ausgelöst sowie ausgeführt, wenn die Instanz zum ersten Mal initialisiert wird. Es sollte Folgendes tun:

  1. Stellen Sie eine Verbindung zum Git-Repository auf der Mikroinstanz her
  2. Rufen Sie die neuesten Änderungen ab und überprüfen Sie die Änderungen in einem getrennten HEAD-Status

Jedes Mal, wenn Sie Änderungen an der Systemdatei vornehmen, sollten Sie das oben beschriebene Bereitstellungsskript ausführen. Dadurch werden die Änderungen an alle Produktionsinstanzen weitergegeben.

Erstellen Sie nun eine Basis-AMI für die Produktionsinstanzen. Es sollte der Mikroinstanz sehr, sehr ähnlich sein, WordPress sollte jedoch nicht installiert werden. Sie verwenden Benutzerdaten, die beim Start an die ec2-Instanzen übergeben werden, um das zweite Skript oben auszuführen und die neueste Version der Codebasis von der Mikroinstanz herunterzuladen.

Eine letzte Sache ... Wenn Sie irgendeine Form von E-Commerce ausführen, benötigen Sie ein SSL-Zertifikat, das auf dem Load Balancer installiert ist. Schauen Sie sich den Leitfaden hier an: http://www.nczonline.net/blog/2012/08/15/setting-up-ssl-on-an-amazon-elastic-load-balancer/

Keeganiden
quelle
Danke für Ihre Antwort. Umfassend in der Tat und wahrscheinlich etwas jenseits meiner Fähigkeiten und Bedürfnisse im Moment, aber ich werde darauf verweisen, wenn wir den Punkt erreichen, an dem wir unsere Umgebung aktualisieren müssen. Vielen Dank!
Lloyd Rees
@keeganiden vielen Dank für Ihre Antwort geben Sie mir eine Richtung. Als weitere mögliche Alternative können andere CDN-Dienste wie maxCDN zur Bereitstellung von Inhalten verwendet werden. Dies ist einfacher, da die meisten Webanwendungen wie WordPress / Presta über ein Add-On verfügen, sodass alle statischen Dateien (z. B. JS, CSS, Bilder) automatisch auf ihre CDN übertragen werden.
Jeremy
Da Sie auf Amazon sind, können Sie DynamoDB als Sitzungsspeicher anstelle von memcached aws.amazon.com/blogs/aws/…
nu everest
Sehr gute Antwort, der schwierigste Teil wäre, git hinzuzufügen und den Benutzer die Dateien über die Benutzeroberfläche aktualisieren zu lassen. Korrigieren Sie mich, wenn ich falsch liege, aber sobald Sie die Berechtigungen für das Ändern dieser Dateien eingerichtet haben, wird es irgendwie gestoppt Da Sie seitdem zustandslos sind, müssen Sie diese Änderungen mit mehreren Servern synchronisieren.
Unveränderlicher Ziegelstein