Der beste Weg, um ein Verzeichnis zum Hochladen von Dateien auf horizontal skalierenden Webservern freizugeben

9

Ich versuche derzeit, einen horizontal skalierbaren Cluster für eine Drupal-basierte Web-App zu erstellen, die ungefähr so ​​aussieht wie das bunte Diagramm unten:

Der Load Balancer implementiert Sticky-Sitzungen, sodass ein Benutzer den Status beibehält, sobald ihm ein Server zugewiesen wurde, mit dem er arbeiten kann.

Jeder App-Server verfügt über Folgendes:

  • Lack vorne
  • Drupal 6 in der Mitte läuft auf dem Lampenstapel
  • auf der Rückseite memcached

Die beiden MySQL-Datenbankserver befinden sich auf einer gemeinsam genutzten IP-Adresse und befinden sich in einem HA-Cluster mit DRBD und Hearbeat, sodass der Verlust eines Servers nicht die gesamte Plattform zum Erliegen bringt.

Geben Sie hier die Bildbeschreibung ein

Es gibt einige Dinge, bei denen ich mir nicht sicher bin, ob ich Ihre Meinung zu schätzen würde:

Wie sollte der Dateispeicher horizontal skaliert werden?

Ich denke darüber nach, NFS zu verwenden, um ein freigegebenes Dateiverzeichnis auf jedem App-Server bereitzustellen, sodass eine Datei, die an einer Stelle hochgeladen wurde, auf allen verfügbar ist. Ich denke an NFS, weil es das schon seit Ewigkeiten gibt und ich keine Erfahrung mit MogileFS oder GlusterFS habe. Wir haben es bereits verwendet, daher sind wir damit besser vertraut.

Gibt es Richtlinien, um herauszufinden, wie viele Server es sinnvoll ist, ein Verzeichnis auf diese Weise über NFS freizugeben?

Wie soll HA hier im gemeinsam genutzten Dateispeicher bereitgestellt werden?

Ein Problem hierbei ist, dass der NFS-Server ein einzelner Fehlerpunkt ist.

Wir verwenden bereits Heartbeat und DRBD auf den MySQL-Servern, und ich würde es vorziehen, die Anzahl der an einem Stack beteiligten Technologien so gering wie möglich zu halten - welche Fallstricke würde es geben, wenn ich dieselbe HA-Strategie für die Datei verwenden würde Server auch?

Ein alternativer Ansatz

Dies gilt für eine intern ausgerichtete Site mit einer begrenzten Anzahl von Benutzern, die die Site gelegentlich für kurze Zeit sehr intensiv nutzen, wenn eine interne Initiative aktiv ist. Dies muss also nicht wie bei einem Startup unendlich skaliert werden.

Angesichts dessen

  • Es gibt eine Obergrenze für den Verkehr, die wir erwarten können
  • Das Hinzufügen von HA zu den Dateiservern und das Entwerfen eines Setups für eine solche horizontale Skalierung führt zu einer erheblichen Komplexität

Ich denke auch darüber nach, die beiden Webserver nur noch leistungsfähiger zu machen, damit sie die Spitzenlast zwischen ihnen bewältigen können, und unisono oder rsync zwischen den beiden bei einem Cron-Job einzurichten, damit:

  • Die Dateien sind noch synchron (Sticky-Sessions halten einen Benutzer auf demselben Server, auf den er eine Datei hochgeladen hat).
  • Wenn Sie eine verlieren, ist die Site noch betriebsbereit.

Klingt dies nach einer Möglichkeit, mögliche Probleme mit der Komplexität von NFS / DRBD HA zu umgehen?

Vielen Dank,

C.

Chris Adams
quelle

Antworten:

3

Der NFS-Server muss mindestens die gleiche Bereitstellung wie der MySQL-Server haben, da er im Grunde die gleichen Funktionen und Einschränkungen hat (beide sind Orte, an die Sie Daten schreiben). Ich mag die Idee, mehrere Autoren für NFS zu verwenden, nicht, da die Verwaltung von Dateisperren sehr komplex ist und meine Erfahrungen in diesem Punkt nicht sehr gut waren.

Mein Vorschlag wäre, alle Schreibvorgänge auf einen der App-Server zu konzentrieren (möglicherweise einen App-Server, der für das Schreiben auf dem NFS-Server vorgesehen ist) und mehrere Leser-App-Server, die ihn schreibgeschützt bereitstellen (ich weiß, dass Drupal einige dynamische Miniaturansichten benötigt) geschrieben werden, aber Sie können das meiste davon auf einem RO fs) behalten. Sie benötigen mindestens einen zweiten NFS-Server (DRBD ist hier die beste Wahl, wenn Sie keinen gemeinsam genutzten Speicher wie ein SAN haben), um HA sicherzustellen.

Schauen Sie sich zum Schluss Gluster und andere verteilte Systeme an.

Core-Dump
quelle
0

Sie können mogileFS ausprobieren. Ich hatte es in einem unserer Projekte verwendet. Es ist einfach zu bedienen und zu konfigurieren und kann skaliert werden, und es gibt keine einzelnen Fehlerquellen.

http://danga.com/mogilefs/

Sameer
quelle
0

Der beste Weg ist, eine gute Speicherlösung zu finden. Je nach Umfang und Art der Anwendung können Sie ein gutes NAS mit Unterstützung für NFS und mindestens zwei Gigabit-Ports und Stromversorgungen verwenden (siehe einige Unternehmenslösungen).

Wenn Sie Ihre Anwendung wirklich ernst nehmen, überprüfen Sie am besten einige SAN-Lösungen. Dies kann jedoch sehr teuer sein, da spezielle Hardware erforderlich ist (dies kann mit Standardhardware erfolgen, ist jedoch möglicherweise zu langsam).

André S.
quelle