Vor ein paar Tagen hatte ich eine Anfrage zum Thema clustern.
Es ging um eine seit kurzem stark im öffentlichen Interesse stehenden Website.
Ca. Ein Jahr zuvor hatte ich der Konfiguration der Seite den Feinschliff verpasst. Lief soweit ganz gut. Nginx und Co.
Aber seit eben jenem dauerhaft erhöhten Interesse, war die Flut an Anfragen so hoch, das irgendwann alles langsamer wurde, weil die Festplatte (eine SSD wohlgemerkt) nicht mehr hinterher kam.
Daraufhin der erste Schritt: MySQL Tabelle in den RAM. Zack, alles lief wieder schnell. Jedoch ist das keine permanente/gute Lösung, da RAM flüchtig ist uns nach einem Reboot oder Stromausfall wären alle Daten weg.
Und schon wurde der zweite Server bestellt, um Lastspitzen auszugleichen.
Wunderbar. Beide gleich eingerichtet.
Nun ging es ans clustern.
Die Dateien, wie bekomme ich am effektivsten die dynamischen Dateien gesynct.
Versuch 1: Glusterfs.
Gefühlte 4 Stunden lang in ein Glusterfs Volumen kopiert. Als es live ging, fiel nach 4 Sekunden die Performance so in den Keller, das der php timeout erreicht wurde, noch bevor der Webserver mit dem IOWAIT fertig war.
Also kann man Glusterfs in die Tonne treten für Websites, auch als man das ganze als NFS gemountet hatte, was einen Performance boost bringen sollte, hat es keine Minute gedauert, bis die Website unerreichbar wurde.
Dann Unison probiert. Klappt wunderbar.
Jetzt die Frage was machen mit der MySQL DB? Zuerst einmal auf MariaDB wechseln, ganz klar. Anschließend wurde überlegt, wie man einen Ausweg aus dem ramfs Dilemma findet.
Großer Buffer von mehreren GB RAM, sowie trx commit auf 2 brachten den Erfolg, die Daten sind jetzt persistent.
Schön und gut, wie bekomme ich den zweiten Server dazu, die MySQL vom ersten zu benutzen? Socat Socket.
Cool jetzt sind die Server gesynct.
Nun geht es ans loadbalancing.
Ich habe bisher nur mit DNS loadbalancing (aka das balancing für faule) genutzt. Haproxy war mir aber auch ein Begriff, nur nicht notwendig, da ich damals 20 identische nodes für ein Cdn hatte.
Die Website jedoch hat einen starken und einen mittelmäßig starken Server. Da möchte man mit unterschiedlichen Gewichtungen arbeiten.
Es liegt hier nahe, das loadbalancing Angebot des Providers in Anspruch zu nehmen, wäre da nicht die Fußnote das man bei unterschiedlichen points of presence nicht mit Gewichtung arbeiten kann. Toll.
Also musste Plan B, haproxy her.
Vps gemietet, haproxy eingerichtet und es läuft prima.
Daher lasst euch sagen: Glusterfs ist nur was für statische Datenkraken und Unison/haproxy/MariaDB sind tolle Programme.