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.
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.