Was ist Hochverfügbarkeit?

Einführung

Angesichts der zunehmenden Nachfrage nach zuverlässigen und leistungsfähigen Infrastrukturen für kritische Systeme könnten die Begriffe Skalierbarkeit und Hochverfügbarkeit nicht beliebter sein. Während der Umgang mit erhöhter Systemlast ein häufiges Anliegen ist, sind die Verringerung der Ausfallzeiten und die Beseitigung einzelner Fehlerquellen ebenso wichtig. Hochverfügbarkeit ist eine Qualität des Infrastrukturdesigns in großem Maßstab, die diese letzteren Überlegungen berücksichtigt.

In diesem Handbuch wird erläutert, was genau Hochverfügbarkeit bedeutet und wie die Zuverlässigkeit Ihrer Infrastruktur verbessert werden kann.

Was ist Hochverfügbarkeit?

In der Datenverarbeitung wird der Begriff Verfügbarkeit verwendet, um den Zeitraum zu beschreiben, in dem ein Dienst verfügbar ist, sowie die Zeit, die ein System benötigt, um auf eine Anfrage eines Benutzers zu antworten. Hochverfügbarkeit ist die Qualität eines Systems oder einer Komponente, die eine hohe Betriebsleistung für einen bestimmten Zeitraum gewährleistet.

Verfügbarkeit messen

Die Verfügbarkeit wird häufig als Prozentsatz angegeben, der angibt, wie viel Betriebszeit von einem bestimmten System oder einer bestimmten Komponente in einem bestimmten Zeitraum erwartet wird. Ein Wert von 100% bedeutet, dass das System niemals ausfällt. Zum Beispiel kann ein System, das 99% der Verfügbarkeit in einem Zeitraum von einem Jahr garantiert, bis zu 3,65 Tage Ausfallzeit haben (1%).

Diese Werte werden auf der Grundlage verschiedener Faktoren berechnet, einschließlich geplanter und außerplanmäßiger Wartungsperioden sowie der Zeit bis zur Wiederherstellung nach einem möglichen Systemausfall.

Wie funktioniert Hochverfügbarkeit?

Hochverfügbarkeit fungiert als Fehlerreaktionsmechanismus für die Infrastruktur. Die Funktionsweise ist konzeptionell recht einfach, erfordert jedoch in der Regel eine spezielle Software und Konfiguration.

Wann ist Hochverfügbarkeit wichtig?

Beim Aufbau robuster Produktionssysteme hat die Minimierung von Ausfallzeiten und Betriebsunterbrechungen oft eine hohe Priorität. Unabhängig davon, wie zuverlässig Ihre Systeme und Software sind, können Probleme auftreten, die Ihre Anwendungen oder Server zum Absturz bringen können. ++ Die Implementierung einer hohen Verfügbarkeit für Ihre Infrastruktur ist eine nützliche Strategie, um die Auswirkungen dieser Art von Ereignissen zu reduzieren. Hochverfügbare Systeme können sich automatisch von einem Server- oder Komponentenausfall erholen.

Was macht ein System hoch verfügbar?

Eines der Ziele einer hohen Verfügbarkeit besteht darin, einzelne Fehlerquellen in Ihrer Infrastruktur zu beseitigen. Ein einzelner Fehlerpunkt ist eine Komponente Ihres Technologie-Stacks, die bei Nichtverfügbarkeit eine Dienstunterbrechung verursachen würde. Daher wird jede Komponente, die für die ordnungsgemäße Funktionalität Ihrer Anwendung erforderlich ist und keine Redundanz aufweist, als Single Point of Failure angesehen. ++ Um einzelne Fehlerstellen zu beseitigen, muss jede Schicht Ihres Stacks für Redundanz vorbereitet sein. Stellen Sie sich zum Beispiel vor, Sie hätten eine Infrastruktur bestehend aus zwei identischen, redundanten Webservern hinter einem Load Balancer. Der von den Clients kommende Datenverkehr wird gleichmäßig auf die Webserver verteilt. Wenn jedoch einer der Server ausfällt, leitet der Load Balancer den gesamten Datenverkehr an den verbleibenden Onlineserver weiter.

Die Webserverschicht in diesem Szenario ist kein einzelner Fehlerpunkt, da:

  • redundante Komponenten für die gleiche Aufgabe sind vorhanden

  • Der Mechanismus auf dieser Ebene (der Load Balancer) kann Fehler in den Komponenten erkennen und sein Verhalten für eine rechtzeitige Wiederherstellung anpassen

Aber was passiert, wenn der Load Balancer offline geht?

Mit dem beschriebenen Szenario, das im wirklichen Leben keine Seltenheit ist, bleibt die Lastausgleichsschicht selbst ein einziger Fehlerpunkt. Die Beseitigung dieser verbleibenden einzelnen Fehlerquelle kann jedoch eine Herausforderung darstellen. Obwohl Sie problemlos einen zusätzlichen Load Balancer konfigurieren können, um Redundanz zu erreichen, gibt es über den Load Balancern keinen offensichtlichen Grund, um die Fehlererkennung und -wiederherstellung zu implementieren.

Redundanz allein kann keine hohe Verfügbarkeit garantieren. Es muss ein Mechanismus vorhanden sein, um Fehler zu erkennen und Maßnahmen zu ergreifen, wenn eine der Komponenten Ihres Stacks nicht mehr verfügbar ist.

Die Fehlererkennung und -wiederherstellung für redundante Systeme kann von oben nach unten implementiert werden: Die oberste Ebene überwacht die unmittelbar darunter liegende Ebene auf Fehler. In unserem vorherigen Beispielszenario ist der Lastenausgleich die oberste Ebene. Wenn einer der Webserver (unterste Ebene) nicht mehr verfügbar ist, beendet der Lastenausgleich die Umleitung von Anforderungen für diesen bestimmten Server.

image: https://assets.digitalocean.com/articles/high-availability/Diagram_2.png [Diagramm 01: Load Balancers / Von oben nach unten]

Dieser Ansatz ist in der Regel einfacher, weist jedoch Einschränkungen auf: In Ihrer Infrastruktur gibt es einen Punkt, an dem eine oberste Ebene entweder nicht vorhanden oder nicht erreichbar ist, wie dies bei der Ebene für den Lastenausgleich der Fall ist. Durch das Erstellen eines Fehlererkennungsdienstes für den Lastenausgleich auf einem externen Server wird einfach ein neuer einzelner Fehlerpunkt erstellt.

In einem solchen Szenario ist ein verteilter Ansatz erforderlich. Mehrere redundante Knoten müssen zu einem Cluster zusammengeschaltet werden, wobei jeder Knoten in der Lage sein sollte, Fehler zu erkennen und zu beheben.

Für den Lastausgleichsfall ergibt sich jedoch aufgrund der Funktionsweise von Nameservern eine zusätzliche Komplikation. Die Wiederherstellung nach einem Load-Balancer-Fehler bedeutet in der Regel ein Failover auf einen redundanten Load-Balancer. Dies bedeutet, dass eine DNS-Änderung vorgenommen werden muss, um einen Domänennamen auf die IP-Adresse des redundanten Load-Balancers zu verweisen. Eine solche Änderung kann eine beträchtliche Zeit in Anspruch nehmen, um im Internet verbreitet zu werden, was zu ernsthaften Ausfallzeiten für dieses System führen würde.

Eine mögliche Lösung ist die Verwendung von DNS Round-Robin Load Balancing. Dieser Ansatz ist jedoch nicht zuverlässig, da ein Failover für die clientseitige Anwendung verbleibt.

Eine robustere und zuverlässigere Lösung ist die Verwendung von Systemen, die eine flexible Neuzuordnung von IP-Adressen ermöglichen, z. B. floating IPs . Die Neuzuordnung von IP-Adressen bei Bedarf beseitigt die mit DNS-Änderungen verbundenen Probleme bei der Weitergabe und Zwischenspeicherung, indem eine statische IP-Adresse bereitgestellt wird, die bei Bedarf problemlos neu zugeordnet werden kann. Der Domänenname kann mit derselben IP-Adresse verknüpft bleiben, während die IP-Adresse selbst zwischen Servern verschoben wird.

So sieht eine hochverfügbare Infrastruktur mit Floating IPs aus:

Welche Systemkomponenten sind für eine hohe Verfügbarkeit erforderlich?

Es gibt mehrere Komponenten, die für die Implementierung einer hohen Verfügbarkeit in der Praxis sorgfältig berücksichtigt werden müssen. Hochverfügbarkeit ist weit mehr als nur eine Software-Implementierung und hängt von folgenden Faktoren ab:

  • * Umgebung: * Wenn sich alle Ihre Server in demselben geografischen Gebiet befinden, kann eine Umgebungsbedingung wie ein Erdbeben oder eine Überschwemmung Ihr gesamtes System zum Erliegen bringen. Durch redundante Server in verschiedenen Rechenzentren und geografischen Gebieten wird die Zuverlässigkeit erhöht.

  • * Hardware: * Hochverfügbare Server sollten widerstandsfähig gegen Stromausfälle und Hardwareausfälle sein, einschließlich Festplatten und Netzwerkschnittstellen.

  • * Software: * Der gesamte Software-Stack, einschließlich des Betriebssystems und der Anwendung, muss für den Umgang mit unerwarteten Fehlern vorbereitet sein, die beispielsweise einen Neustart des Systems erfordern könnten.

  • * Daten: * Datenverlust und -inkonsistenz können durch verschiedene Faktoren verursacht werden und sind nicht auf Festplattenfehler beschränkt. Hochverfügbare Systeme müssen im Fehlerfall die Datensicherheit gewährleisten.

  • * Netzwerk: * ungeplante Netzwerkausfälle stellen eine weitere mögliche Fehlerquelle für hochverfügbare Systeme dar. Es ist wichtig, dass eine redundante Netzwerkstrategie für mögliche Fehler vorhanden ist.

Mit welcher Software kann die Hochverfügbarkeit konfiguriert werden?

Jede Schicht eines hochverfügbaren Systems hat unterschiedliche Anforderungen in Bezug auf Software und Konfiguration. Auf Anwendungsebene sind Load Balancer jedoch eine wichtige Software für die Erstellung von Hochverfügbarkeits-Setups.

HAProxy (Hochverfügbarkeitsproxy) ist eine häufige Wahl für den Lastausgleich, da es die Last verarbeiten kann Ausgleich auf mehreren Ebenen und für verschiedene Arten von Servern, einschließlich https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing—​3 [ Datenbankserver].

Wenn Sie in den Systemstapel aufsteigen, ist es wichtig, eine zuverlässige redundante Lösung für Ihren Anwendungseinstiegspunkt, normalerweise den Load Balancer, zu implementieren. Um diesen Single Point of Failure zu beseitigen, müssen wir, wie bereits erwähnt, einen Cluster von Load Balancern hinter einer Floating IP implementieren. Corosync und Pacemaker sind beliebte Optionen für die Erstellung eines solchen Setups. Sie finden sie unter https://www.digitalocean.com/community/tutorials/anleitungen zum Erstellen eines Setups für hohe Verfügbarkeit mit einem Corosync-Schrittmacher und einem Schrittmacher. floating-ips-on-ubuntu-14-04 [Ubuntu] und https://www.digitalocean.com/community/tutorials/ wie-ein-hohes-Verfügbarkeits-Setup-mit-Pacemaker-Corosync-und-herzustellen ist -floating-ips-on-centos-7 [CentOS] -Server.

Fazit

Hochverfügbarkeit ist eine wichtige Untergruppe der Zuverlässigkeitstechnik, die darauf abzielt, sicherzustellen, dass ein System oder eine Komponente in einem bestimmten Zeitraum eine hohe Betriebsleistung erbringt. Auf den ersten Blick mag die Implementierung recht komplex erscheinen. Dies kann jedoch enorme Vorteile für Systeme mit sich bringen, die eine höhere Zuverlässigkeit erfordern.