[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: HA für LAMP - wie?



Hallo,

> ich darf und soll ein Setup designen, bauen und administrieren für
> eine LAMP-Anwendung (Nextcloud) mit dem Fokus auf Verfügbarkeit.
> Skalierbarkeit spielt keine Rolle.
> 
> Ich habe an ein Design mit zwei Knoten gedacht. Das Setup soll in
> einem Rechenzentrum gehostet werden, kann aber auch bei Bedarf auf
> zwei verteilt (Stichwort: drbd und Shared-Nothing-Cluster).

> Was empfehlt ihr, wie würdet ihr das bauen?

Für Nextcloud braucht man einen Filespace, in dem die Dateien liegen,
und eine Datenbank. Wenn man ein nahtloses Failover erreichen will,
außerdem noch einen redundanten Speicherplatz für die PHP Session IDs.

Den Filespace kann man auf ein DRBD legen, das mit Pacemaker/Corosync
gesteuert wird. Einfacher ist aber wahrscheinlich ein GlusterFS; dafür
braucht man keine separate Clustersoftware. Für größere Installationen würde
ich CephFS nehmen.

Die höchste DB-Verfügbarkeit erreicht man in der MySQL/MariaDB Welt mit
einem Galera Cluster oder MySQL Group Replication. Beides setzt allerdings
mindestens drei Knoten voraus. Wenn es zwingend auf zwei Knoten laufen
muss, bleibt nur ein Master-/Slave-Replikationsszenario mit einer mehr
oder weniger komplexen Umschaltstrategie.

PHP 5 in Debian 8 hat mit mysqlnd_ms einen eingebauten Load Balancer für
MySQL-kompatible Master/Master Datenbanken, so dass man keinen separaten
Load Balancer wie haproxy mehr braucht. Allerdings scheint das in Debian 9
weggefallen zu sein.

Die PHP Session IDs kann man mit ins gemeinsame Filesystem legen (einfacher)
oder einen Redis Cluster dafür aufbauen (performanter). Auch Redis-Zugriffe
kann PHP mit phpredis direkt auf die Knoten verteilen, ohne einen separaten
Load Balancer zu benötigen.

Die eigentliche Anwendung (Nextcloud) kann man ohne Shared Storage lokal
auf die Webserver-Knoten installieren. Vor den Webservern braucht man
einen Load Balancer oder zumindest eine automatisch schwenkende virtuelle
IP-Adresse für das Failover. Ich würde hier keepalived nehmen, alternativ
geht aber auch Pacemaker+Corosync und optional haproxy oder ldirectord.

Gruß, Harald


Reply to: