So führen Sie WordPress auf 2 VMs für hohe Verfügbarkeit aus

12

Microsoft Azure erfordert, dass Anwendungen zwei Instanzen in mehreren Rechenzentren verwenden, um ihre SLA "Hochverfügbarkeit" zu erreichen und sicherzustellen, dass Ihre Websites nicht für die routinemäßige Wartung ausfallen. Sie sagen Ihnen sogar, welche Paare von Rechenzentren niemals gleichzeitig gewartet werden.

Das ist alles schön und gut, aber wie würden Sie dies in der Praxis für eine App wie WordPress mit einer MySQL-Datenbank auf derselben VM einfach tun? Der Lastausgleich zwischen zwei VMs ist mir nicht fremd, aber das Setup für die Datenbankreplikation entgeht mir. Wir möchten nicht, dass zwei Versionen der Daten nicht mehr synchron sind. Die MySQL-Replikation scheint ein Master-Slave-Setup zu erfordern, bei dem Änderungen nicht mit der Master-Datenbank synchronisiert werden können, wenn ein Benutzer auf der Slave-Instanz landet.

Verstehe ich dieses Konzept nur falsch? Jede Hilfe wird sehr geschätzt!

Yaron
quelle
1
Warum sollten Sie WordPress auf Azure hosten? Es gibt besseres und billigeres Hosting für WordPress. Digital Ocean zum Beispiel.
Alexus
1
Alexus, das ist hier nicht wirklich relevant, aber wir haben einen ziemlich großen Stack über die Azure-Infrastruktur verteilt, von der WordPress nur eine Komponente ist. Azure ist eine fantastische Plattform und wir sind sehr zufrieden damit.
Yaron
1
Erwischt. Sie müssen das tun, was Sie tun müssen :) Ich mag Azure auch für die meisten meiner .NET-Inhalte, habe aber WP-Sites immer separat gehostet.
Alexus
Yaron, fandest du die Antwort unten hilfreich? Es hat bisher 3 Upvotes erhalten und wollte nur überprüfen, ob ein wichtiges Konzept fehlt, damit ich es aktualisieren kann, um es für Ihren speziellen Anwendungsfall zu adressieren.
Bryan 'BJ' Hoffpauir Jr.
1
Vielen Dank für die gründliche Antwort @ Bryan'BJ'Hoffpauir und es tut mir leid, dass ich nicht die Zeit hatte, Ihren Anweisungen zu folgen, um zu sehen, ob sie mit unserer Implementierung funktionieren. Ich markiere die Antwort als richtig und werde mich erneut melden, wenn ich auf Probleme stoße. Danke noch einmal!!
Yaron

Antworten:

11

Die schlechte Nachricht: Die Open Source-Kernbasis von Wordpress geht von einigen Annahmen über die Ausführung auf einem einzelnen Server aus (WP-Inhalt, Benutzer-Uploads und Medienbibliothek, um nur einige zu nennen).

Die gute Nachricht: Nahezu alle Cloud-Anbieter (einschließlich Azure) verfügen über Abstraktionen, mit denen Sie diese Designeinschränkungen umgehen können.

Grundsätzlich werden Sie folgende Bedenken ansprechen:

  • Load Balancing-Datenverkehr zwischen zwei (oder mehr) "Front-End" Wordpress-Web- / App-Servern. Nicht allzu schwierig, da Wordpress fast staatenlos ist, es sei denn, Sie lassen Benutzer sich auf den Websites anmelden. Dies erfolgt über eine Kombination aus DNS und Load Balancern. Sie benötigen Unterstützung für 2 IPs für Ihre App-Server - 1 Satz stellt eine Verbindung zum Subnetz her, das über das Internet routingfähig ist (obwohl es hoffentlich durch eine unten nicht beschriebene Firewall geschützt ist), und die anderen beiden befinden sich in einem VERSCHIEDENEN Subnetz, von dem isoliert ist das andere Netzwerk und enthält die Datenbankserver-Instanzen, aber die Grundzüge sind wie folgt:
                     / - (10.0.0.1 - eth0) wp1.domain.com (10.0.1.1 - eth2)
(Öffentliche IP) wp.domain.com          
                     \ - (10.0.0.2 - eth1) wp2.domain.com (10.0.1.2 - eth3)
  • Verwalten von Sitzungen WENN Sie Benutzern erlauben, sich bei den Sites anzumelden. In diesem Fall müssen Sie bei der Anmeldung bei Server 1 sicherstellen, dass entweder alle zukünftigen Anforderungen an diesen Server weitergeleitet werden (Sticky Sessions) oder dass es keine Rolle spielt, auf welchen Server sie zugreifen, da Sitzungen über einen anderen Mechanismus verwaltet werden ( zum Beispiel über Zend Server Session Clustering ).

  • Verwalten von Administratoranmeldungen WENN Sie einige Benutzer beim Back-End anmelden lassen, um Inhalte zu verwalten (ähnlich wie oben).

  • Auswahl eines DB-Systems, das AUCH hoch verfügbar ist. Es macht keinen Sinn, zwei Front-End-Server zu haben, wenn Ihre Datenbank abstürzt und das gesamte System ausfällt. Sie müssen die MySQL Master / Slave-Replikation über ClearDB nutzen oder WordPress über das Plugin ändern, um SQL Server zu nutzen, damit Sie die nativen Clustersysteme verwenden können . Dies bedeutet, dass Sie mindestens 4 VMs benötigen, wenn Sie die DB-Schicht selbst verwalten möchten (2 x App & 2 x DB). So könnte das aussehen:

               / - wp1.domain.com (10.0.1.1) \ --- / (10.0.1.3) db1.domain.com (10.0.2.3) \
         wp.domain.com X |           
               \ - wp2.domain.com (10.0.1.2) / --- \ (10.0.1.4) db2.domain.com (10.0.2.3) /

  • HINWEIS - Um ein zuverlässiges Failover zu gewährleisten und die Sicherheit des Systems zu schützen, wird normalerweise ein DRITTES Netzwerk-Subnetz verwendet, um die beiden Datenbankknoten über einen privaten Kanal miteinander zu verbinden, der von den anderen Kommunikationsnetzwerken getrennt ist, mit denen die App-Server kommunizieren Die Datenbank und die App-Server kommunizieren mit der Außenwelt.

  • Aktivieren des Verbindungspools, um die Leistung und Zuverlässigkeit der Datenbankverbindungen Ihres App-Servers zu maximieren.

  • Nutzen Sie ein Caching-Plugin wie W3 Total Cache oder Super Cache, um die Belastung der Front-End-Server zu minimieren.

Die folgenden Anleitungen enthalten Einzelheiten dazu, wie Sie die oben genannten Herausforderungen bewältigen können. In Azure gibt es verschiedene Möglichkeiten, um mit jeder Aufgabe umzugehen. Sie müssen also entscheiden, wie Sie jede Herausforderung angreifen möchten, und dann die Einschränkungen zu bewältigen, die jede dieser Auswahlmöglichkeiten beim Auf- und Abarbeiten des Stapels mit sich bringt.

Bryan 'BJ' Hoffpauir Jr.
quelle