Apache – Hohe Verfügbarkeit

Apache – Hohe Verfügbarkeit

Ich suche nach einer Möglichkeit, Apache hochverfügbar einzurichten. Die Idee ist, einen Cluster aus 2+ Apache-Servern zu haben, die dieselben Websites bedienen. Ich kann die IP-Adresse jedes Servers mit Round-Robin-DNS einrichten, sodass jede Anfrage zufällig an einen der Server im Cluster gesendet wird (ich mache mir im Moment noch keine großen Gedanken über Lastenausgleich, aber das könnte später eine Rolle spielen).

Ich habe es bereits eingerichtet und arbeite mit mehreren Apache-VM-Servern (verteilt auf mehrere physische Server), die Websites und Round-Robin-DNS bereitstellen, und das funktioniert gut. Die SQL-Datenbank ist mit MariaDB in einem Hochverfügbarkeitscluster eingerichtet, die Webdaten (HTML, JS, PHP-Skripte, Bilder, andere Assets) sind in LizardFS gespeichert und die Sitzungen sind ebenfalls an einem gemeinsamen Speicherort gespeichert. Das funktioniert alles gut, bis einer der Server im Cluster aus irgendeinem Grund nicht mehr erreichbar ist. Dann bleibt ein Prozentsatz der Anfragen (ungefähr die Anzahl der ausgefallenen Server geteilt durch die Anzahl der gesamten Server im Cluster) unbeantwortet. Hier sind die Optionen, die ich in Betracht gezogen habe:

Automatische DNS-Updates

Verwenden Sie einen Prozess, der die Funktionalität der Webserver überwacht und alle ausgefallenen Server aus dem DNS entfernt. Dies hat zwei Probleme:

  • Erstens: Obwohl wir unsere TTL auf einen sehr niedrigen Wert (z. B. 5 Sekunden) einstellen können, habe ich gehört, dass eine Handvoll DNS-Server eine höhere Mindest-TTL als unsere erzwingen. Und einige Browser (insbesondere Chrome) cachen DNS unabhängig von den TTL-Einstellungen für mindestens 60 Sekunden. Auch wenn wir also auf unserer Seite gut vorgehen, können einige Clients im Falle eines DNS-Updates möglicherweise einige Zeit lang keine Websites erreichen.

  • Zweitens wird das Programm, das die Funktionalität des Clusters überwacht
    und DNS-Einträge aktualisiert, zu einem neuen Single Point of Failure. Wir
    können dies möglicherweise umgehen, indem wir mehr als einen Monitor über mehrere

Systeme, denn wenn beide ein Problem erkennen und beide die gleichen DNS-Änderungen vornehmen, sollte das keine Probleme verursachen.

uCarp/Herzschlag

Machen Sie die IP-Adressen, auf die zugegriffen wird und die sich im Round-Robin-DNS befinden, virtuell und lassen Sie sie im Falle eines Serverausfalls von inaktiven Servern auf aktive Server umverteilen. Beispielsweise ist die VIP von Server1 192.168.0.101 und die VIP von Server2 192.168.0.102. Wenn Server1 ausfällt, wird 192.168.1.102 zu einer zusätzlichen IP auf Server2. Dies hat zwei Probleme:

  • Erstens überwacht uCarp/Heartbeat meines Wissens nach seine Peers speziell auf Unerreichbarkeit, beispielsweise wenn der Peer nicht angepingt werden kann. In diesem Fall übernimmt es die IP des ausgefallenen Peers. Dies ist ein Problem, da es mehr Gründe dafür gibt, dass ein Webserver Anfragen nicht bedienen kann, als nur, dass er im Netzwerk nicht erreichbar ist. Apache ist möglicherweise abgestürzt, es liegt ein Konfigurationsfehler vor oder es gibt einen anderen Grund. Ich würde mir wünschen, dass das Kriterium „der Server stellt die Seiten nicht wie erforderlich bereit“ lautet und nicht „der Server ist nicht pingbar“. Ich glaube nicht, dass ich das in uCarp/Heartbeat definieren kann.

  • Zweitens funktioniert dies nicht über Rechenzentren hinweg, da jeder Serversatz in den Rechenzentren unterschiedliche IP-Adressblöcke hat. Ich kann keinen virtuellen IP-Float zwischen Rechenzentren haben. Die Anforderung, über Rechenzentren hinweg zu funktionieren (ja, mein verteiltes Dateisystem und mein Datenbankcluster sind über Rechenzentren hinweg verfügbar), ist nicht erforderlich, wäre aber ein nettes Plus.

Frage

Gibt es also Ideen, wie man damit umgehen kann? Im Grunde der heilige Gral der Hochverfügbarkeit: Keine einzelnen Ausfallpunkte (weder im Server, noch im Lastenausgleich oder im Rechenzentrum) und praktisch keine Ausfallzeiten im Falle einer Umstellung.

Antwort1

Wenn ich HA und Lastverteilung möchte, verwende ich Keepalived und konfiguriere es mit zwei VIPs. Standardmäßig ist VIP1 Server1 und VIP2 Server2 zugewiesen. Wenn ein Server ausfällt, übernimmt der andere Server beide VIPs.

Keepalived kümmert sich um HA, indem es den anderen Server überwacht. Wenn ein Server nicht erreichbar ist oder eine Schnittstelle ausfällt, ändert sich der FAULTStatus. VIP wird von einem anderen Server übernommen. Um Ihren Dienst zu überwachen, können Sie track_scriptdie Option verwenden.

Wenn Sie einen weiteren Cluster in einem anderen Rechenzentrum hinzufügen möchten, können Sie zwei weitere Server hinzufügen und dieselbe Konfiguration vornehmen. Jetzt können Sie den Datenverkehr zwischen Rechenzentren mithilfe von DNS-Round-Robin verteilen. In diesem Fall ist kein DNS-Update erforderlich.

verwandte Informationen