WordPress für die IIS-Replikation mit Robocopy

10

Wir richten eine WordPress-Umgebung auf 4 IIS-Servern ein. Wir erwägen, eine geplante Aufgabe zu verwenden, die ein Robocopy-Skript auslöst, um das WordPress-Verzeichnis alle 5 Minuten zu replizieren.

Wie ist die Meinung zu einem solchen Ansatz? Hat jemand dies oder ähnliches jemals benutzt?

joebegborg07
quelle
Was sind die 4 IIS-Server physisch oder VM? Was replizieren Sie die Daten oder die Datenbanken und Konfigurationen? Ich bin mir nicht sicher, warum 4 Server 1 ein Master sind (ich nehme an) und die anderen passiv sind, wenn Sie versuchen, HA zu erreichen, das nicht funktioniert.
Anthony Fornito
1
zweite Frage (und wahrscheinlich die wichtigste), warum Sie WordPress unter Windows ausführen?
Anthony Fornito
Vielen Dank an @AnthonyFornito für Ihre Antwort. Ausführen von WordPress unter Windows aus internen Gründen. Ich versuche nur damit zu arbeiten. Ich bin nach der Replikation der Website-Dateien (Datenbank-Replikation wird bereits über MYSQL abgewickelt). Die Frontends sind VMs in Azure. Ich bin hauptsächlich auf der Suche nach einer Lösung, bei der alle Frontends die gleichen Website-Dateien verwenden. Gibt es etwas, das Sie vorschlagen würden?
Joebegborg07

Antworten:

12

Es wäre ein Albtraum, 4 Front-End-Server zu haben, die zur gleichen Zeit dieselben Dateien gemeinsam nutzen und ohne DFS oder ein Drittanbieterprogramm für die Verzeichnissynchronisierung schreiben können.

Mit Azure können Sie 3 Dinge untersuchen.

  1. Freigegebener Speicher, der Erwerb eines eigenen dedizierten Speichers kann mit Kosten verbunden sein. Ich bin mir nicht sicher, welche Konfiguration Azure bietet. Dies würde sicherstellen, dass alle Ihre Dateien für jeden Server verfügbar sind, sobald sie geschrieben werden.

  2. Azure DFS, DFS ist ein Windows-basiertes Verzeichnissynchronisierungstool, das recht gut funktioniert. Sie sind sich auch nicht sicher über die Kosten, aber die Konfiguration ist möglicherweise etwas einfacher. DFS arbeitet asynchron, daher gibt es eine kleine Verzögerung, aber nicht viel.

  3. (Ich werde erklären, wie dies gemacht werden würde, und dann nie wieder darüber sprechen, weil es eine schreckliche Idee ist und fehlschlagen wird.) Erstellen Sie ein Skript, das zuerst die Daten auf allen vier Servern vergleicht und dann die Differenzdaten kopiert. Sie müssten jedes Verzeichnis für den einen Server freigeben, auf dem das Skript ausgeführt wird, die Einrichtungsberechtigung, damit der Server lesen und schreiben kann, und dann Fehlerbehebung und Fehlerbehebung durchführen.

Jede Option von oben erledigt den Job. Wenn Ihr Job von dieser Arbeit abhängt, würde ich Ihnen empfehlen, sich von Option 3 fernzuhalten.

Befolgen Sie die folgenden Schritte, und Sie versuchen nicht, Geld auszugeben.

  1. Schauen Sie sich ein Programm namens "Free File Sync" an. Die kostenlose Version bietet einige wirklich gute Funktionen. Ich glaube, es gibt eine kostenpflichtige Version, aber ich bin mir nicht sicher, welche Verbesserungen Sie erhalten. Ich habe es in vielen meiner Entwicklungsumgebungen verwendet, um etwas Ähnliches wie das zu erreichen, was Sie tun möchten, und war zu faul, um DFS einzurichten.

  2. Wenn Sie nur einen Server beschreibbar machen, können Sie dies einfach tun, indem Sie auf jedem Server einen URI konfigurieren, der besagt, ob Sie einen Artikel erstellen, zu ServerA gehen oder eine URL in Ihrer web.config neu schreiben oder WordPress als PHP-Verwendung verwenden:

    Header ('Speicherort: http://myhost.com/mypage.php ');

Jeder benötigt ein wenig Codierung und PHP, IIS-Kenntnisse.

  1. Der wirklich unterhaltsame Teil, bei dem ServerA der Autorenserver ist (nur beschreibbarer Server), wie leiten wir den Datenverkehr zum Lesen ohne Load Balancer an ServerB, ServerC und ServerD?

Kurze Antwort, die Sie nicht können, nun, das ist nicht genau richtig. Ich hatte einmal einen Kunden, der unerbittlich war, keinen Load-Balencer zu verwenden, der über eine Reihe von Powershell-Skripten eine Verbindung von einem Server auf einen anderen verschieben konnte, basierend auf der Anzahl von Arbeiterprozesse auf jeder Box oder so ähnlich. So oder so sehr schwer zu tun und nicht die Zeit und Energie wert, um hervorzubringen.

Wenn Sie den Netzwerklastenausgleich auf den Servern nicht konfigurieren können, ist eine zusätzliche IP erforderlich, es handelt sich jedoch nur um eine DNS-Änderung, und der Datenverkehr kann zum Lesen auf die drei Server verteilt werden.

Viel Glück!

Anthony Fornito
quelle
Vielen Dank für Ihre Vorschläge. Der einzelne zentrale Speicher war ein Engpass für uns, da wir dieses Setup zuvor hatten, aber nicht mit hohem Datenverkehr fertig wurden. Aufgrund einer Frist brauchten wir eine schnelle Lösung. Letztendlich haben wir Resilio verwendet, eine Peer-to-Peer-Echtzeitsynchronisierungslösung, die Änderungen auf einem der Server erkennt und auf den anderen Server repliziert. Ich hoffe, dass jeder, der die gleichen oder ähnliche Probleme hat, die Probleme auf die gleiche Weise lösen kann, wie es für uns getan hat. Ich teste Ihren Vorschlag, URLs für das WP-Backend neu zu schreiben und Änderungen auf andere Computer zu übertragen. Danke noch einmal.
Joebegborg07
NLB funktioniert nicht in Azure (es gibt keine Schicht 2, wenn Sie wirklich schreckliche Albträume haben möchten, versuchen Sie einfach, die ARP-Tabelle auf einer Azure-VM zu betrachten).
Massimo
12

Vielen Dank für alle Vorschläge Leute.

Unsere Lösung bestand in einem Peer-to-Peer-Synchronisationsansatz mit einem Tool namens Resilio.

Mit Resilio konnten wir eine Reihe von Computern (in diesem Fall IIS-Frontends) in einem Peer-to-Peer-Synchronisationscluster konfigurieren. Von jedem Computer im Cluster wird ein Ordner ausgewählt, der für den Synchronisierungsprozess verwendet werden soll.

Der Resilio-Dienst (Windows-Dienst, der im Hintergrund ausgeführt wird) überwacht diese Ordner auf Änderungen. Wenn eine Änderung an einem der angegebenen Ordner an den betreffenden Frontends vorgenommen wird, überträgt Resilio diese Änderung auf die anderen Server.

Ich hoffe, dies kann anderen helfen, die in Zukunft vor einem ähnlichen Problem stehen.

joebegborg07
quelle
11

Ich denke nicht, dass geplante Aufgaben und Robocopy ein großartiger Ansatz sind. Aufgrund des 5-Minuten-Fensters wird es Zeiten geben, in denen eine Ressource angefordert wird, der vom Load Balancer ausgewählte Server jedoch nicht verfügbar ist. Bei weitgehend statischen Sites tritt dies viel seltener auf als bei häufig geänderten ausgelasteten Sites. Eine höhere Frequenz oder die Verwendung einer anderen Synchronisationstechnologie wie Bittorrent Sync (jetzt Resilio Sync genannt ) würde dies erheblich verbessern, das Problem jedoch nicht beseitigen.

Eine bessere Lösung wäre es, Ihren wp-Inhalt oder nur den Ordner wp-content / uploads auf ein freigegebenes Laufwerk zu legen. Eine andere Möglichkeit, dies zu betrachten, besteht darin, dass einer der Server diesen Ordner hostet und die anderen ihn freigeben. Beim Festplatten-Caching sollte die Last auf dem Server nicht viel höher sein als auf den anderen Servern.

Aktualisieren

Werfen Sie einen Blick auf diesen Artikel für Ideen über das Seiten - Caching, und diese ein für CDN. Es geht um Nginx, also müssen Sie es für IIS ausarbeiten, aber die Theorie dahinter gilt für jeden Webserver.

Tim
quelle
Vielen Dank für Ihren Vorschlag @Tim. Wie Sie sagten, ist die Website dynamisch, mit regelmäßigen geringfügigen Dateiaktualisierungen aufgrund vorhandener WordPress-Plugins. Das bedeutet, dass jedes Frontend manchmal unterschiedliche Dateien haben kann. Haben Sie jemals eine solche Produktionsumgebung getestet (ca. 500 - 1000 gleichzeitige Benutzer)? dh Speichern der Website-Dateien in einem zentralen Repository und Zuordnung über ein freigegebenes Laufwerk? Wenn ja, wie war die Erfahrung?
Joebegborg07
Nein, ich habe dieses Szenario nicht getestet. Dies ist nicht erforderlich, da ich ein CDN zwischenspeichere und verwende. Sie müssten die Front-End-Server einschließlich des Back-End-Dateiservers testen. Wenn Ihre Seiten jedoch nicht für jedes Benutzerseiten-Caching angepasst werden, kann dies Ihre Auslastung massiv reduzieren, wie dies bei Verwendung einer Inhaltsverteilung der Fall wäre - CloudFlare verfügt über eine kostenlose Stufe. Dies gilt auch dann, wenn Sie alle 5 Minuten aktualisieren. Google "Nginx Microcaching" für die Theorie dahinter, aber Sie müssen es natürlich anders auf IIS implementieren. Das Zwischenspeichern von Headern ist sehr wichtig, wenn Sie diesen Weg gehen. Siehe auch Update oben.
Tim