it-swarm.com.de

So führen Sie WordPress auf 2 VMs aus, um eine hohe Verfügbarkeit zu gewährleisten

Microsoft Azure erfordert, dass Anwendungen zwei Instanzen in mehreren Rechenzentren verwenden, um ihre "Hochverfügbarkeit" SLA 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 müssen.

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 leicht tun? Ich bin kein Unbekannter in der Lastverteilung zwischen zwei VMs, aber das Datenbankreplikationssetup entzieht sich mir. Wir möchten nicht, dass zwei Versionen der Daten nicht mehr synchron sind. Die MySQL-Replikation erfordert anscheinend ein Master-Slave-Setup, bei dem Änderungen an der Master-DB nicht synchronisiert werden können, wenn ein Benutzer auf der Slave-Instanz gelandet ist.

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

11
Yaron

Die schlechte Nachricht: Die Kern-Open-Source-Basis von Wordpress macht einige Annahmen darüber, dass sie auf einem einzelnen Server ausgeführt wird (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 Entwurfsbeschränkungen umgehen können.

Grundsätzlich werden Sie die folgenden Bedenken ansprechen:

  • Load Balancing-Verkehr zwischen zwei (oder mehr) Front-End-Wordpress-Web-/App-Servern. Nicht allzu schwierig, da Wordpress AM MEISTEN staatenlos ist, sofern Sie nicht zulassen, dass sich Benutzer bei den Websites anmelden. Dies erfolgt über eine Kombination aus DNS und Load Balancern. Sie benötigen Unterstützung für 2 IP-Adressen für Ihre App-Server - 1 Satz stellt eine Verbindung mit dem Subnetz her, das über das Internet routingfähig ist (obwohl dies hoffentlich durch eine Firewall geschützt ist, die unten nicht aufgeführt ist), und die beiden anderen befinden sich in einem VERSCHIEDENEN Subnetz, das von diesem 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) 
  • Sitzungen verwalten WENN Sie Benutzern erlauben, sich an den Sites anzumelden. In diesem Fall müssen Sie sicherstellen, dass bei der Anmeldung auf Server 1 entweder alle zukünftigen Anforderungen an diesen Server weitergeleitet werden (Sticky Sessions) oder dass es keine Rolle spielt, auf welchen Server sie zugreifen, da die Sitzungen über einen anderen Mechanismus verwaltet werden (zum Beispiel über Zend Server Session Clustering ).

  • Verwalten von Administratoranmeldungen WENN Sie einigen Benutzern erlauben, sich im Back-End anzumelden, um Inhalte zu verwalten (ähnlich wie oben).

  • DB-System auswählen, das AUCH hochverfügbar ist. Es macht keinen Sinn, zwei Front-End-Server zu haben, wenn Ihr Datenbank-Absturz das gesamte System zum Erliegen bringt. Sie müssen die MySQL-Master/Slave-Replikation über ClearDB oder Ändern von WordPress über das Plugin, um SQL Server wirksam einzusetzen nutzen, damit Sie dessen native Clustersysteme verwenden können. Dies bedeutet, dass Sie mindestens 4 VMs benötigen, wenn Sie die DB-Ebene 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)/
 
  • NOTE- Um ein zuverlässiges Failover zu gewährleisten und die Sicherheit des Systems zu schützen, werden die beiden Datenbankknoten in der Regel über einen von den anderen Kommunikationsnetzen getrennten privaten Kanal über ein DRITTES Netzwerk-Subnetz miteinander verbunden die die App-Server verwenden, um mit der Datenbank zu kommunizieren, und die App-Server verwenden, um mit der Außenwelt zu kommunizieren.

  • Aktivieren von Connection Pooling, 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 Last auf Front-End-Servern zu minimieren.

In den folgenden Handbüchern erfahren Sie, wie Sie die oben genannten Herausforderungen bewältigen können. In Azure gibt es verschiedene Möglichkeiten, um die einzelnen Aufgaben zu behandeln. Sie müssen also entscheiden, wie Sie die einzelnen Herausforderungen angreifen möchten, und dann die Einschränkungen berücksichtigen, die sich aus diesen Auswahlmöglichkeiten ergeben, wenn Sie den Stapel hoch- und runterarbeiten.