it-swarm.com.de

Wie kann Drupal 7 auf Servern mit Lastenausgleich ordnungsgemäß eingerichtet werden, damit CSS- und JS-Dateien synchronisiert werden?

Wir verschieben unsere Website auf neue Cloud Load Balanced-Server auf Rackspace. Es ist alles eine neue Erfahrung für uns, wir haben die meisten Probleme, abgesehen von einem, ausgeräumt.

Wir haben die neuen Server so eingerichtet, dass sie von Server A zu Server B lsync sind (Server A ist Master).

Von Zeit zu Zeit sehen wir CSS/JS-Dateien 404. Wir können erraten, was falsch ist. Die Dateisynchronisierung zwischen den Servern erfolgt nicht schnell genug. Wenn auf Server A ein Cache gelöscht wird, z. B. ein Cron-Lauf, fordert Server B die an alte CSS/JS-Dateien, und diese Anforderung kann an Server A gesendet werden.

Was ist der richtige Weg, um Drupal 7 auf Servern mit Lastenausgleich einzurichten, damit CSS- und JS-Dateien synchron sind und keine 404 verursachen?

6
Beebee

Verwenden Sie csync2/lsyncd , um hochgeladene Dateien (oder alle Dateien) synchron zu halten.

Eine Beispielkonfiguration für Drupal finden Sie unter http://www.severalnines.com/blog/scaling-drupal-multiple-servers-galera-cluster-mysql

Stellen Sie außerdem sicher, dass Ihr Load Balancer für Sticky Sessions konfiguriert ist . Wenn ein Benutzer eine Datei hochlädt oder Drupal, um neue CSS/JS-Dateien zu generieren, werden diese Dateien auf diese Weise vom selben Server bereitgestellt. Andernfalls können die Dateien auf einen Server hochgeladen/generiert werden Server auf einem POST, aber dann kann ein anderer Server die Antwortseite bedienen, bevor er die Dateien erhält.

Wir haben das oben Genannte verwendet und hatten eine ausgezeichnete Produktionsstabilität auf drei Webservern. Wir haben über 100.000 Knoten, ~ 40 Inhaltstypen, ~ 60 Inhaltsanbieter, ~ 80.000 Treffer pro Tag.

Ursprünglich habe ich ein Modul erstellt, das blockiert ist Drupal Seite wird geladen, bis die Dateisynchronisierung abgeschlossen ist, aber wir haben festgestellt, dass dies nicht erforderlich ist.

4

Die Kernaggregation von Drupal funktioniert in einem Cluster nicht, da die Aggregate während des Renderns der Seite erstellt werden. Sobald die Seite im Cache gespeichert ist, liest ein anderer Server des Pools aus dem Cache, sodass die Seite nicht erneut gerendert wird, was bedeutet, dass die CSS- oder JS-Aggregation nicht lokal durchgeführt wird.

Um dieses Problem zu lösen, habe ich eine NFS-Freigabe zwischen den Servern nur für die Ordner "css" und "js" erstellt. Es lief eine Weile in Ordnung, aber unter hoher Last Drupal erzeugte manchmal leere Dateien (2 Server erstellten die Datei gleichzeitig). Selbst die Synchronisierung der Server ist also eindeutig keine Lösung .

Aber genau wie Beebee sagte, können Sie das Modul Advanced CSS/JS Aggregation verwenden. Dieser ist clever genug, um ein Aggregat nur über die URL neu erstellen zu können, da er eine Zuordnung der Dateien, die Teil des Aggregats sind, in der Datenbank speichert.

Advagg kann auch Gruppen aggregierter Dateien verarbeiten. Dies kann Ihre Bandbreitennutzung reduzieren, wenn Ihre Besucher über verschiedene Seiten navigieren, da die gemeinsamen Dateien in einem separaten Aggregat und die Delta-Dateien in einem anderen Aggregat zusammengeführt werden können.

4
Patrick Janser