Synchronisieren mehrerer WordPress-Webserver in einer Farm

7

Mein Unternehmen wird in Kürze ein Blog einrichten, und ich plane, zwei Webserver einzurichten, um die WordPress-Website aus Redundanzgründen zu hosten. Wenn wir Releases für eine Site in einer Farm durchführen, verschieben wir normalerweise die eine Seite, testen sie und geben sie dann auf die andere Seite frei. Für WordPress-Updates können wir dies leicht genug tun. Das Problem wird jedoch, wie mit dem Ordner wp-content umgegangen wird. Da Benutzer Beiträge veröffentlichen und Grafiken hochladen, müssen diese mit dem anderen Server in der Farm synchronisiert werden, unabhängig davon, auf welchen Server der Benutzer sie hochlädt.

Ich könnte DFS einrichten, um die Dateien zu replizieren, aber das scheint ein Overkill zu sein.

Ich könnte Robocopy so einrichten, dass es alle 15 Minuten oder so ausgeführt wird, und dann jedem mitteilen, dass Beiträge in mindestens 15 Minuten veröffentlicht werden sollen, damit die Dateien Zeit zum Replizieren haben.

Gibt es bessere Lösungen? Vielleicht etwas ein WordPress-Plugin, damit Grafiken, wenn sie in den Beitrag hochgeladen werden, automatisch auf die anderen Server in der Farm repliziert werden?

Ich verwende Wordpress unter Windows 2008, daher helfen Linux-Lösungen nicht viel.

mrdenny
quelle

Antworten:

1

Wir haben in der Vergangenheit Super Flexible File Synchronizer für solche Dinge verwendet. Es funktioniert sehr gut und bietet eine Reihe von Optionen zur Steuerung der Synchronisierung.

Adam Brand
quelle
Ich mag Super Flexible File Synchronizer. Es sieht so aus, als hätte es eine Funktion, die Änderungen erkennt und die Ordner automatisch synchronisiert. Haben Sie diese Funktion verwendet? Wie gut funktioniert es?
Mrdenny
Ich habe diese Funktion nicht verwendet, aber ich habe die Ordnerüberwachungsfunktion verwendet, um Dateien automatisch von einem Ordner in einen anderen zu verschieben ... das funktioniert sehr zuverlässig. Zu beachten ist, dass der "Scheduler" sowohl als Anwendung als auch als Dienst ausgeführt werden kann. Sie sollten daher sicherstellen, dass er als Dienst ausgeführt wird.
Adam Brand
1

Ich bin kein Assistent mit IIS, aber hoffentlich wird die Technik übersetzt.

Ich gehe davon aus, dass es einen gemeinsam genutzten Hostnamen gibt, der zwischen den beiden Servern lastausgeglichen ist, und dass es für jeden einen öffentlich zugänglichen Namen gibt.

Was Sie wollen, ist eine bedingte Umleitung auf einem der beiden Server in Kombination mit einer Art Dateisynchronisierung. Wenn der URI mit / wp-content beginnt und die Datei vorhanden ist, stellen Sie sie lokal bereit. Andernfalls leiten Sie zum anderen Server um. Server A leitet zu B weiter und umgekehrt.

Dies sollte zu einer nahtlosen Erfahrung für die Betrachter führen. Sie erhalten lediglich eine vorübergehende Weiterleitung für Bilder im Fenster zwischen dem Start des Posts und der laufenden Synchronisierung. Abhängig von Bandbreiten- oder Redundanzproblemen kann Ihr Synchronisierungsintervall viel länger als 15 Minuten sein, da die Site in dem Moment, in dem der Beitrag veröffentlicht wird, ordnungsgemäß gerendert werden sollte.

In Nginx würde ich dies mit einem Block wie dem folgenden tun:

location ~ ^/wp-content {
  if( -f $request_filename ) {
    expires max;
    break;
  }
  rewrite ^/(.+)$ http://otherserver.com/$1 last;
}

nginx ist für Windows verfügbar, aber ich bezweifle, dass Sie die Webserver-Software wechseln möchten, um dies zu tun. Hoffentlich kann die Idee auf IIS oder die von Ihnen verwendete Software übertragen werden.

James F.
quelle
Ich verwende IIS. Die Site hat keine eindeutigen öffentlichen IP-Adressen, daher bin ich mir nicht sicher, wie ich sie auf den anderen Server umleiten kann, bis die Datei repliziert wurde. Ich habe ungefähr 40 andere Websites, die von diesem Server gehostet werden. Der Blog wird eine davon sein, daher kann ich meinen Webserver nicht ändern. Die Idee gefällt mir allerdings. Ich frage mich, ob es eine Möglichkeit gibt, IIS (oder WordPress) so zu konfigurieren, dass die Netzwerkfreigabe für den anderen Knoten überprüft wird, wenn die Datei lokal nicht vorhanden ist. Idealerweise möchte ich eine Lösung, die größer als 2 Knoten skalieren kann, aber ich nehme, was ich bekommen kann.
Mrdenny
1

Ich stelle dies als separate Antwort, weil es ein anderer Ansatz ist:

Wie wäre es, wenn Sie die Bilder in den Cloud-Speicher (Amazon S3 oder ähnliches) stellen und Ihre Benutzer dann Links zur Cloud verwenden. Die Bandbreitenkosten sind möglicherweise etwas höher und es gibt möglicherweise Schulungsprobleme, die Benutzer dazu bringen, zuerst in die Cloud hochzuladen, aber es sind keine lokalen Dateisystem- oder serverübergreifenden Überprüfungen erforderlich.

Es sollte auch unabhängig von der Anzahl der von Ihnen bereitgestellten Server skaliert werden.

James F.
quelle
Unsere Vertriebsmitarbeiter werden das System verwenden. Sagen wir, sie sind nicht technisch. Das Hochladen auf S3 geht wahrscheinlich über das hinaus, was sie können, und ich versuche, dies kostenlos zu tun, da wir gerade ein Vermögen für Server, Speicher und Bandbreite ausgegeben haben.
Mrdenny
Ich weiß, dass dies alt ist, aber es gibt jetzt ein WordPress-Plugin namens "Amazon S3 für WordPress", das Uploads in WordPress automatisch mit einem bestimmten S3-Konto synchronisiert. Es ist für den Administrator transparent, der dieselben Upload-Funktionen verwendet, die er immer hat.
MightyE
0

Ist es eine Option, den Inhalt auf einer einzelnen Netzwerkdateifreigabe (kein DFS) zu haben?

Wie wäre es mit unisono ?

crb
quelle
Ich würde lieber nicht. Wir versuchen, alle einzelnen Fehlerquellen zu vermeiden, und unsere Dateiserver sind mit den bereits vorhandenen Netzwerkfreigaben ausreichend beschäftigt.
Mrdenny
0

Sie können hierfür rsync verwenden. Wenn Sie Dateien unter Quellcodeverwaltung haben, können Sie andernfalls Capistrano verwenden, um die Daten auf verschiedenen Computern bereitzustellen (und bei Bedarf sogar ein Rollback durchzuführen).

Wenn Sie mehr als einen Computer haben, ist die Bereitstellung und das Rollback sehr nützlich.

Jauder Ho
quelle
rsync wäre keine schlechte idee. Robocopy wäre einfacher, da es bereits auf den Systemen ist. Es löst jedoch nicht das Problem, die Synchronisierung planen zu müssen.
Mrdenny
0

Wie wäre es mit Robocopy mit den folgenden Schaltern: 1. Um Änderungen zu erkennen und die Synchronisierung auszuführen - / MON: n :: MONitor source; erneut ausführen, wenn mehr als n Änderungen angezeigt werden. / MOT: m :: MOnitor-Quelle; In m Minuten erneut ausführen. Zeit, falls geändert.

  1. Optionen zum Speichern der Bandbreite - / RH: hhmm-hhmm :: Run Hours - Zeiten, zu denen neue Kopien gestartet werden können. / PF :: Überprüfen Sie die Betriebsstunden pro Datei (nicht pro Durchgang).

neways, was hast du endlich für dieses Problem verwendet?

Home Boy
quelle
Am Ende habe ich DFS verwendet, um die Arbeit zu erledigen. Wir hatten einige andere Sites auf denselben Servern, die eine nahezu sofortige Replikation der Daten von Server zu Server benötigten, sodass DFS den Anforderungen der anderen Sites entsprach. Da es keinen Sinn macht, zwei Pakete auszuführen, um dasselbe zu tun, habe ich DFS auch für diese Site verwendet.
Mrdenny