So erstellen Sie ein Hochverfügbarkeits-Setup mit Corosync, Pacemaker und Floating IPs unter Ubuntu 14.04

Einführung

Dieses Tutorial zeigt, wie Sie Corosync und Pacemaker mit einer Floating IP verwenden können, um eine Hochverfügbarkeitsserverinfrastruktur (HA) auf DigitalOcean zu erstellen.

Corosync ist ein Open-Source-Programm, das Client-Servern Cluster-Mitgliedschaft und Messaging-Funktionen bietet, die häufig als * Messaging * -Schicht bezeichnet werden. Pacemaker ist ein Open Source Cluster Resource Manager (CRM), ein System, das Ressourcen und Services koordiniert, die von einem Cluster verwaltet und hochverfügbar gemacht werden. Corosync ermöglicht es Servern im Wesentlichen, als Cluster zu kommunizieren, während Pacemaker die Möglichkeit bietet, das Verhalten des Clusters zu steuern.

Goal

Wenn das HA-Setup abgeschlossen ist, besteht es aus zwei Ubuntu 14.04-Servern in einer Aktiv / Passiv-Konfiguration. Dies wird erreicht, indem Sie eine Floating-IP angeben, über die Ihre Benutzer auf Ihren Webdienst zugreifen, um auf den primären (aktiven) Server zu verweisen, sofern kein Fehler festgestellt wird. Wenn Pacemaker feststellt, dass der primäre Server nicht verfügbar ist, führt der sekundäre (passive) Server automatisch ein Skript aus, das die Floating-IP über die DigitalOcean-API selbst neu zuweist. Der nachfolgende Netzwerkverkehr zur Floating IP wird daher an Ihren sekundären Server geleitet, der als aktiver Server fungiert und den eingehenden Verkehr verarbeitet.

Dieses Diagramm zeigt das Konzept des beschriebenen Aufbaus:

Um dieses Ziel zu erreichen, folgen wir diesen Schritten:

  • Erstelle 2 Tröpfchen, die Verkehr erhalten

  • Erstellen Sie Floating IP und weisen Sie es einem der Droplets zu

  • Installieren und konfigurieren Sie Corosync

  • Installieren und konfigurieren Sie Pacemaker

  • Konfigurieren Sie die Cluster-Ressource für die schwebende IP-Neuzuweisung

  • Testen Sie das Failover

  • Konfigurieren Sie die Nginx-Cluster-Ressource

Voraussetzungen

Um die Floating IP-Neuzuweisung zu automatisieren, müssen wir die DigitalOcean-API verwenden. Dies bedeutet, dass Sie ein persönliches Zugriffstoken (Personal Access Token, PAT) generieren müssen. Hierbei handelt es sich um ein API-Token, mit dem Sie sich bei Ihrem DigitalOcean-Konto mit read- und write-Zugriff authentifizieren können, indem Sie der https://www.digitalocean.com/community folgen / tutorials / how-to-use-the-digitalocean-api-v2 # wie-man-ein-persönliches-Zugriffstoken erzeugt] Abschnitt des API-Tutorials. Ihre PAT wird in einem Skript verwendet, das zu beiden Servern in Ihrem Cluster hinzugefügt wird. Bewahren Sie es daher an einem sicheren Ort auf, da der vollständige Zugriff auf Ihr DigitalOcean-Konto als Referenz dient.

Zusätzlich zur API werden in diesem Lernprogramm die folgenden DigitalOcean-Funktionen verwendet:

Bitte lesen Sie die verlinkten Tutorials, wenn Sie mehr darüber erfahren möchten.

Erstellen Sie Tröpfchen

Der erste Schritt besteht darin, zwei Ubuntu-Droplets mit aktiviertem privaten Netzwerk im selben Datencenter zu erstellen, die als primärer und sekundärer Server fungieren, wie oben beschrieben. In unserem Beispiel-Setup werden wir sie zur leichteren Bezugnahme als "primär" und "sekundär" bezeichnen. Wir werden Nginx auf beiden Droplets installieren und deren Indexseiten durch Informationen ersetzen, die sie eindeutig identifizieren. Auf diese Weise können wir auf einfache Weise demonstrieren, dass das HA-Setup funktioniert. Für ein echtes Setup sollten Ihre Server einen Webserver oder einen Load Balancer Ihrer Wahl wie Nginx oder HAProxy ausführen.

Erstelle zwei Ubuntu 14.04 Droplets, * primary * und * secondary *. Wenn Sie dem Beispiel-Setup folgen möchten, verwenden Sie dieses Bash-Skript als Benutzerdaten:

Beispiel Benutzerdaten

#!/bin/bash

apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html

Diese Benutzerdaten installieren Nginx und ersetzen den Inhalt von "+ index.html +" durch den Hostnamen und die IP-Adresse des Droplets (unter Bezugnahme auf den Metadatendienst). Wenn Sie auf eines der Droplets über seine öffentliche IP-Adresse zugreifen, wird eine einfache Webseite mit dem Hostnamen und der IP-Adresse des Droplets angezeigt. Dies ist hilfreich, um zu testen, auf welches Droplet die Floating-IP zu einem bestimmten Zeitpunkt verweist.

Erstellen Sie eine Floating IP

Klicken Sie in der DigitalOcean-Systemsteuerung im oberen Menü auf * Networking * und im seitlichen Menü auf * Floating IPs *.

image: https: //assets.digitalocean.com/site/ControlPanel/fip_no_floating_ips.png [Keine Floating-IPs]

Weisen Sie Ihrem * primären * Droplet eine Floating IP zu und klicken Sie dann auf die Schaltfläche * Assign Floating IP *.

Notieren Sie sich die IP-Adresse, nachdem die Floating IP zugewiesen wurde. Überprüfen Sie, ob Sie das zugewiesene Droplet erreichen können, indem Sie die Floating-IP-Adresse in einem Webbrowser aufrufen.

http://

Sie sollten die Indexseite Ihres primären Droplets sehen.

DNS konfigurieren (optional)

Wenn Sie über einen Domainnamen auf Ihr HA-Setup zugreifen möchten, erstellen Sie in Ihrem DNS einen * A-Eintrag *, der Ihre Domain auf Ihre Floating-IP-Adresse verweist. Wenn Ihre Domain die Nameserver von DigitalOcean verwendet, folgen Sie https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean#step-three%E2%80%94configure -Ihre-Domain [Schritt drei] im Tutorial Einrichten eines Hostnamens mit DigitalOcean. Sobald dies erfolgt ist, können Sie über den Domainnamen auf Ihren aktiven Server zugreifen.

Der von uns verwendete Beispieldomainname lautet "+ example.com +". Wenn Sie momentan keinen Domainnamen verwenden, verwenden Sie stattdessen die Floating-IP-Adresse, um auf Ihr Setup zuzugreifen.

Zeitsynchronisation konfigurieren

Wenn mehrere Server miteinander kommunizieren, insbesondere mit Clustering-Software, ist es wichtig, sicherzustellen, dass ihre Uhren synchronisiert sind. Wir werden NTP (Network Time Protocol) verwenden, um unsere Server zu synchronisieren.

Verwenden Sie diesen Befehl auf * beiden * Servern, um eine Zeitzonenauswahl zu öffnen:

sudo dpkg-reconfigure tzdata

Wählen Sie Ihre gewünschte Zeitzone. Zum Beispiel wählen wir "+ America / New_York +".

Als nächstes aktualisieren Sie apt-get:

sudo apt-get update

Dann installiere das + ntp + Paket mit diesem Befehl;

sudo apt-get -y install ntp

Ihre Serveruhren sollten jetzt über NTP synchronisiert werden. Weitere Informationen zu NTP finden Sie in diesem Lernprogramm: https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers#configure-timezones-and-network -Zeitprotokoll-Synchronisation [Zeitzonen und Netzwerkzeitprotokoll-Synchronisation konfigurieren].

Firewall konfigurieren

Corosync verwendet den UDP-Transport zwischen den Ports "+ 5404 " und " 5406 +". Wenn Sie eine Firewall ausführen, stellen Sie sicher, dass die Kommunikation an diesen Ports zwischen den Servern zulässig ist.

Wenn Sie beispielsweise "+ iptables " verwenden, können Sie mit den folgenden Befehlen Datenverkehr auf diesen Ports und " eth1 +" (der privaten Netzwerkschnittstelle) zulassen:

sudo iptables -A INPUT  -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT  -o eth1 -p udp -m multiport --sports 5404,5405,5406 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Es wird empfohlen, Firewall-Regeln zu verwenden, die restriktiver sind als das angegebene Beispiel.

Installieren Sie Corosync und Pacemaker

Installieren Sie auf * beiden * Servern Corosync und Pacemaker mit apt-get:

sudo apt-get install pacemaker

Beachten Sie, dass Corosync als eine Abhängigkeit des Pacemaker-Pakets installiert wird.

Corosync und Pacemaker sind jetzt installiert, müssen jedoch konfiguriert werden, bevor sie nützliche Funktionen ausführen können.

Konfigurieren Sie Corosync

Corosync muss so konfiguriert sein, dass unsere Server als Cluster kommunizieren können.

Erstellen Sie einen Cluster-Autorisierungsschlüssel

Damit Knoten einem Cluster beitreten können, muss jeder Knoten einen identischen Cluster-Autorisierungsschlüssel besitzen.

Installieren Sie auf dem * primären * Server das Paket + haveged +:

sudo apt-get install haveged

Mit diesem Softwarepaket können wir auf einfache Weise die Entropie auf unserem Server erhöhen, die für das Skript "+ corosync-keygen +" erforderlich ist.

Führen Sie auf dem * primären * Server das Skript + corosync-keygen + aus:

sudo corosync-keygen

Dadurch wird ein 128-Byte-Cluster-Autorisierungsschlüssel generiert und in "+ / etc / corosync / authkey +" geschrieben.

Nachdem wir das "+ haveged +" - Paket nicht mehr benötigen, entfernen wir es vom * primären * Server:

sudo apt-get remove --purge haveged
sudo apt-get clean

Kopieren Sie auf dem * primären * Server den + authkey + auf den sekundären Server:

sudo scp /etc/corosync/authkey @:/tmp

Verschieben Sie auf dem * sekundären * Server die Datei + authkey + an den richtigen Speicherort und beschränken Sie ihre Berechtigungen auf root:

sudo mv /tmp/authkey /etc/corosync
sudo chown root: /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey

Jetzt sollten beide Server einen identischen Autorisierungsschlüssel in der Datei "+ / etc / corosync / authkey +" haben.

Konfigurieren Sie den Corosync-Cluster

Um unseren gewünschten Cluster zum Laufen zu bringen, müssen wir diese einrichten

Öffnen Sie auf beiden Servern die Datei "+ corosync.conf " zur Bearbeitung in Ihrem bevorzugten Editor (wir verwenden " vi +"):

sudo vi /etc/corosync/corosync.conf

Hier ist eine Corosync-Konfigurationsdatei, mit der Ihre Server als Cluster kommunizieren können. Achten Sie darauf, die hervorgehobenen Teile durch die entsprechenden Werte zu ersetzen. + bindnetaddr + sollte auf die private IP-Adresse des Servers eingestellt sein, an dem Sie gerade arbeiten. Die beiden anderen hervorgehobenen Elemente sollten auf die private IP-Adresse des angegebenen Servers eingestellt sein. Mit Ausnahme des + bindnetaddr + sollte die Datei auf beiden Servern identisch sein.

Ersetzen Sie den Inhalt von "+ corosync.conf +" durch diese Konfiguration mit den für Ihre Umgebung spezifischen Änderungen:

/etc/corosync/corosync.conf

totem {
 version: 2
 cluster_name: lbcluster
 transport: udpu
 interface {
   ringnumber: 0
   bindnetaddr:
   broadcast: yes
   mcastport: 5405
 }
}

quorum {
 provider: corosync_votequorum
 two_node: 1
}

nodelist {
 node {
   ring0_addr:
   name: primary
   nodeid: 1
 }
 node {
   ring0_addr:
   name: secondary
   nodeid: 2
 }
}

logging {
 to_logfile: yes
 logfile: /var/log/corosync/corosync.log
 to_syslog: yes
 timestamp: on
}

Der Abschnitt * totem * (Zeilen 1-11), der sich auf das Totem-Protokoll bezieht, das Corosync für die Cluster-Mitgliedschaft verwendet, gibt an, wie die Cluster-Mitglieder miteinander kommunizieren sollen. In unserem Setup umfassen die wichtigen Einstellungen "+ transport: udpu " (gibt den Unicast-Modus an) und " bindnetaddr +" (gibt an, an welche Netzwerkadresse Corosync gebunden werden soll).

Der Abschnitt * quorum * (Zeilen 13-16) gibt an, dass dies ein Cluster mit zwei Knoten ist, sodass für das Quorum nur ein einziger Knoten erforderlich ist (+ two_node: 1 +). Dies ist eine Umgehung der Tatsache, dass zum Erreichen eines Quorums mindestens drei Knoten in einem Cluster erforderlich sind. Mit dieser Einstellung kann unser Cluster mit zwei Knoten einen Koordinator (DC) auswählen, der der Knoten ist, der den Cluster zu einem bestimmten Zeitpunkt steuert.

Der Abschnitt * nodelist * (Zeilen 18-29) gibt an, welche Knoten im Cluster vorhanden sind und wie die einzelnen Knoten erreicht werden können. Hier konfigurieren wir sowohl unseren primären als auch unseren sekundären Knoten und legen fest, dass diese über ihre jeweiligen privaten IP-Adressen erreichbar sind.

Der Abschnitt * logging * (Zeilen 31-36) gibt an, dass die Corosync-Protokolle in + / var / log / corosync / corosync.log + geschrieben werden sollen. Wenn Sie mit dem Rest dieses Tutorials auf Probleme stoßen, schauen Sie bei der Fehlerbehebung unbedingt hier nach.

Speichern und schließen.

Als Nächstes müssen wir Corosync so konfigurieren, dass der Pacemaker-Dienst zugelassen wird.

Erstellen Sie auf beiden Servern die Datei "+ pcmk " im Corosync-Dienstverzeichnis mit einem Editor. Wir verwenden " vi +":

sudo vi /etc/corosync/service.d/pcmk

Fügen Sie dann den Pacemaker-Service hinzu:

service {
 name: pacemaker
 ver: 1
}

Speichern und schließen. Dies ist in der Corosync-Konfiguration enthalten und ermöglicht es Pacemaker, Corosync für die Kommunikation mit unseren Servern zu verwenden.

Standardmäßig ist der Corosync-Dienst deaktiviert. Ändern Sie dies auf * beiden * Servern durch Bearbeiten von + / etc / default / corosync +:

sudo vi /etc/default/corosync

Ändern Sie den Wert von "+ START " in " yes +":

/ etc / default / corosync

START=

Speichern und schließen. Jetzt können wir den Corosync-Dienst starten.

Starten Sie Corosync auf * beiden * Servern mit folgendem Befehl:

sudo service corosync start

Sobald Corosync auf beiden Servern ausgeführt wird, sollten sie zusammen geclustert werden. Wir können dies überprüfen, indem wir diesen Befehl ausführen:

sudo corosync-cmapctl | grep members

Die Ausgabe sollte ungefähr so ​​aussehen, was darauf hinweist, dass der primäre (Knoten 1) und der sekundäre (Knoten 2) dem Cluster beigetreten sind:

corosync-cmapctl output:runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip()
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip()
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined

Nachdem Sie Corosync ordnungsgemäß eingerichtet haben, können Sie nun mit der Konfiguration von Pacemaker fortfahren.

Starten und konfigurieren Sie den Pacemaker

Der Schrittmacher, der von den Messaging-Funktionen von Corosync abhängt, kann nun gestartet werden und seine grundlegenden Eigenschaften können konfiguriert werden.

Aktivieren und starten Sie Pacemaker

Der Pacemaker-Dienst setzt voraus, dass Corosync ausgeführt wird, und ist daher standardmäßig deaktiviert.

Aktivieren Sie auf * beiden * Servern Pacemaker, um beim Systemstart mit dem folgenden Befehl zu starten:

sudo update-rc.d pacemaker defaults 20 01

Mit dem vorherigen Befehl setzen wir die Startpriorität von Pacemaker auf "+ 20 ". Es ist wichtig, eine Startpriorität anzugeben, die höher ist als die von Corosync (standardmäßig " 19 +"), damit Pacemaker nach Corosync startet.

Jetzt starten wir Pacemaker:

sudo service pacemaker start

Für die Interaktion mit Pacemaker verwenden wir das Hilfsprogramm + crm +.

Überprüfen Sie den Schrittmacher mit + crm +:

sudo crm status

Dies sollte ungefähr so ​​aussehen (wenn nicht, warten Sie 30 Sekunden und führen Sie den Befehl erneut aus):

crm status:Last updated: Fri Oct 16 14:38:36 2015
Last change: Fri Oct 16 14:36:01 2015 via crmd on primary
Stack: corosync
Current DC: primary (1) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured


Online: [ primary secondary ]

Zu dieser Ausgabe gibt es ein paar Dinge zu beachten. Zuerst sollte * Current DC * (Designated Coordinator) entweder auf + primary (1) + oder + secondary (2) + gesetzt werden. Zweitens sollten * 2 Knoten konfiguriert * und * 0 Ressourcen konfiguriert * sein. Drittens sollten beide Knoten als * online * markiert sein. Wenn sie als * offline * markiert sind, warten Sie 30 Sekunden und überprüfen Sie den Status erneut, um festzustellen, ob er sich selbst korrigiert.

Ab diesem Zeitpunkt möchten Sie den interaktiven CRM-Monitor möglicherweise in einem anderen SSH-Fenster ausführen (das mit einem der Clusterknoten verbunden ist). Dadurch erhalten Sie Echtzeit-Updates des Status jedes Knotens und des Standorts, an dem die einzelnen Ressourcen ausgeführt werden:

sudo crm_mon

Die Ausgabe dieses Befehls ist identisch mit der Ausgabe von "+ crm status ", außer dass sie kontinuierlich ausgeführt wird. Wenn Sie das Programm beenden möchten, drücken Sie " Ctrl-C +".

Konfigurieren Sie die Cluster-Eigenschaften

Jetzt können Sie die grundlegenden Eigenschaften von Pacemaker konfigurieren. Beachten Sie, dass alle Pacemaker-Befehle (+ crm +) von beiden Knotenservern ausgeführt werden können, da alle clusterbezogenen Änderungen auf allen Mitgliedsknoten automatisch synchronisiert werden.

Für unser gewünschtes Setup möchten wir STONITH deaktivieren, einen Modus, den viele Cluster verwenden, um fehlerhafte Knoten zu entfernen, da wir einen Cluster mit zwei Knoten einrichten. Führen Sie dazu diesen Befehl auf einem der folgenden Server aus:

sudo crm configure property stonith-enabled=false

Wir möchten auch quorumbezogene Nachrichten in den Protokollen deaktivieren:

sudo crm configure property no-quorum-policy=ignore

Auch diese Einstellung gilt nur für Cluster mit zwei Knoten.

Wenn Sie Ihre Pacemaker-Konfiguration überprüfen möchten, führen Sie diesen Befehl aus:

sudo crm configure show

Dadurch werden alle aktiven Schrittmachereinstellungen angezeigt. Derzeit sind nur zwei Knoten sowie die gerade festgelegten Eigenschaften STONITH und Quorum enthalten.

Erstellen Sie einen Floating IP Reassignment Resource Agent

Jetzt, da Pacemaker ausgeführt und konfiguriert wird, müssen wir Ressourcen für die Verwaltung hinzufügen. Wie in der Einleitung erwähnt, handelt es sich bei Ressourcen um Dienste, für deren Bereitstellung der Cluster verantwortlich ist. In Pacemaker erfordert das Hinzufügen einer Ressource die Verwendung eines * Ressourcenagenten *, der als Schnittstelle zu dem Dienst fungiert, der verwaltet wird. Pacemaker wird mit mehreren Ressourcenagenten für allgemeine Dienste ausgeliefert und ermöglicht das Hinzufügen benutzerdefinierter Ressourcenagenten.

In unserem Setup möchten wir sicherstellen, dass der von unseren Webservern (* primäre * und * sekundäre *) bereitgestellte Dienst in einem aktiven / passiven Setup hoch verfügbar ist. Daher müssen wir sicherstellen, dass unsere Floating-IP-Adresse erhalten bleibt Immer auf den verfügbaren Server zeigen. Um dies zu ermöglichen, müssen wir einen * Ressourcenagenten * einrichten, den jeder Knoten ausführen kann, um festzustellen, ob er die Floating-IP besitzt, und erforderlichenfalls ein Skript ausführen, um die Floating-IP auf sich selbst zu verweisen. Wir bezeichnen den Ressourcenagenten als "FloatIP OCF" und das Floating IP-Neuzuweisungsskript als "+ assign-ip ". Sobald der FloatIP-OCF-Ressourcenagent installiert ist, können wir die Ressource selbst definieren, die wir als " FloatIP +" bezeichnen.

Laden Sie das assign-ip-Skript herunter

Wie bereits erwähnt, benötigen wir ein Skript, das neu zuordnen kann, auf welches Droplet unsere Floating IP verweist, falls die Ressource + FloatIP + auf einen anderen Knoten verschoben werden muss. Zu diesem Zweck laden wir ein einfaches Python-Skript herunter, das einer bestimmten Droplet-ID mithilfe der DigitalOcean-API eine Floating-IP zuweist.

Laden Sie auf * beiden * Servern das Python-Skript + assign-ip + herunter:

sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip

Machen Sie es auf * beiden * Servern ausführbar:

sudo chmod +x /usr/local/bin/assign-ip

Die Verwendung des Skripts "+ assign-ip +" erfordert die folgenden Details:

  • * Floating IP: * Das erste Argument für das Skript, die Floating IP, die zugewiesen wird

  • * Droplet ID: * Das zweite Argument des Skripts, die Droplet ID, der die Floating IP zugewiesen werden soll

  • * DigitalOcean PAT (API-Token): * Übergeben als Umgebungsvariable "+ DO_TOKEN +", Ihr Lese- / Schreib-DigitalOcean-PAT

Lesen Sie den Inhalt des Skripts, bevor Sie fortfahren.

Wenn Sie dieses Skript manuell ausführen möchten, um eine Floating IP neu zuzuweisen, können Sie es folgendermaßen ausführen: + DO_TOKEN = / usr / local / bin / assign-ip +. Dieses Skript wird jedoch vom OCF-Ressourcenagenten von FloatIP aufgerufen, wenn die Ressource + FloatIP + auf einen anderen Knoten verschoben werden muss.

Lassen Sie uns als nächstes den Float IP Resource Agent installieren.

Laden Sie FloatIP OCF Resource Agent herunter

Pacemaker ermöglicht das Hinzufügen von OCF-Ressourcenagenten, indem diese in einem bestimmten Verzeichnis abgelegt werden.

Erstellen Sie auf * beiden * Servern das Ressourcenagent-Anbieterverzeichnis + digitalocean + mit dem folgenden Befehl:

sudo mkdir /usr/lib/ocf/resource.d/digitalocean

Laden Sie auf * beiden * Servern den FloatIP OCF Resource Agent herunter:

sudo curl -o /usr/lib/ocf/resource.d/digitalocean/floatip https://gist.githubusercontent.com/thisismitch/b4c91438e56bfe6b7bfb/raw/2dffe2ae52ba2df575baae46338c155adbaef678/floatip-ocf

Machen Sie es auf * beiden * Servern ausführbar:

sudo chmod +x /usr/lib/ocf/resource.d/digitalocean/floatip

Sie können den Inhalt des Ressourcenagenten überprüfen, bevor Sie fortfahren. Es ist ein Bash-Skript, das, wenn es mit dem Befehl "+ start " aufgerufen wird, die Droplet-ID des aufrufenden Knotens (über Metadaten) abruft und der Droplet-ID die Floating-IP zuweist. Außerdem antwortet es auf die Befehle " status" und "+ monitor of", indem es zurückgibt, ob dem aufrufenden Droplet eine Floating-IP zugewiesen wurde.

Es erfordert die folgenden OCF-Parameter:

  • * do_token: *: Das DigitalOcean-API-Token, das für Floating-IP-Neuzuweisungen verwendet werden soll, d. h. Ihr DigitalOcean Personal Access Token

  • * floating_ip: *: Ihre Floating IP (Adresse), falls sie neu zugewiesen werden muss

Jetzt können wir den OCF-Ressourcenagenten FloatIP verwenden, um unsere Ressource + FloatIP + zu definieren.

Fügen Sie eine FloatIP-Ressource hinzu

Mit unserem installierten FloatIP-OCF-Ressourcenagenten können wir jetzt unsere + FloatIP + - Ressource konfigurieren.

Erstellen Sie auf beiden Servern die Ressource + FloatIP + mit diesem Befehl (stellen Sie sicher, dass Sie die beiden hervorgehobenen Parameter mit Ihren eigenen Informationen angeben):

sudo crm configure primitive FloatIP ocf:digitalocean:floatip \
 params do_token= \
 floating_ip=

Auf diese Weise wird eine primitive Ressource erstellt, bei der es sich um eine generische Clusterressource namens "FloatIP" handelt, die den zuvor erstellten OCF-Ressourcenagenten "FloatIP" verwendet ("+ ocf: digitalocean: floatip "). Beachten Sie, dass das ` do_token ` und ` floating_ip +` als Parameter übergeben werden müssen. Diese werden verwendet, wenn die Floating IP neu zugewiesen werden muss.

Wenn Sie den Status Ihres Clusters überprüfen (+ sudo crm status + oder + sudo crm_mon +), sollten Sie feststellen, dass die Ressource + FloatIP + auf einem Ihrer Knoten definiert und gestartet ist:

crm_mon:...
2 Nodes configured
1 Resource configured

Online: [ primary secondary ]

FloatIP    (ocf::digitalocean:floatip):    Started

Vorausgesetzt, dass alles richtig eingerichtet wurde, sollten Sie jetzt eine aktive / passive HA-Einrichtung haben! So wie es aussieht, wird die Floating IP einem Online-Server neu zugewiesen, wenn der Knoten, auf dem + FloatIP + gestartet wurde, offline oder in den + Standby + - Modus wechselt. Im Moment weist der Cluster den * sekundären * Knoten an, die Ressource + FloatIP + zu starten und die Floating-IP-Adresse für sich selbst zu beanspruchen, wenn der aktive Knoten - * primäre *, in unserem Beispiel Ausgabe - nicht verfügbar ist. Sobald die Neuzuweisung erfolgt ist, leitet die Floating IP Benutzer an den neu aktiven * sekundären * Server weiter.

Derzeit wird das Failover (Floating IP-Neuzuweisung) nur ausgelöst, wenn der aktive Host offline geschaltet wird oder nicht mit dem Cluster kommunizieren kann. Eine bessere Version dieses Setups würde zusätzliche Ressourcen angeben, die von Pacemaker verwaltet werden sollten. Auf diese Weise kann der Cluster Fehler bei bestimmten Diensten wie Load Balancer oder Webserver-Software erkennen. Bevor Sie dies einrichten, sollten Sie sicherstellen, dass das grundlegende Failover funktioniert.

Testen Sie die Hochverfügbarkeit

Es ist wichtig zu testen, ob unser Hochverfügbarkeits-Setup funktioniert. Lassen Sie uns das jetzt tun.

Derzeit wird die Floating-IP dem einen Ihrer Knoten zugewiesen (nehmen wir an, * primary *). Wenn Sie jetzt über die IP-Adresse oder den darauf verweisenden Domainnamen auf die Floating IP zugreifen, wird einfach die Indexseite des * primären * Servers angezeigt. Wenn Sie das Beispiel-Benutzerdatenskript verwendet haben, sieht es ungefähr so ​​aus:

Floating IP is pointing to primary server:Droplet: , IP Address:

Dies zeigt an, dass die Floating-IP tatsächlich dem primären Droplet zugewiesen ist.

Öffnen wir nun ein neues lokales Terminal und verwenden Sie "+ curl +", um in einer 1-Sekunden-Schleife auf die Floating-IP zuzugreifen. Verwenden Sie dazu diesen Befehl. Ersetzen Sie jedoch die URL durch Ihre Domain oder Floating-IP-Adresse:

while true; do curl ; sleep 1; done

Derzeit werden derselbe Droplet-Name und die IP-Adresse des Primärservers ausgegeben. Wenn der primäre Server ausfällt, indem er ausgeschaltet oder der Clusterstatus des primären Knotens auf "+ Standby +" geändert wird, wird geprüft, ob die Floating IP dem sekundären Server neu zugewiesen wird.

Starten wir jetzt den * primären * Server neu. Tun Sie dies über die DigitalOcean-Systemsteuerung oder indem Sie diesen Befehl auf dem Primärserver ausführen:

sudo reboot

Nach einigen Augenblicken sollte der Primärserver nicht mehr verfügbar sein. Achten Sie auf die Ausgabe der Schleife "+ curl +", die im Terminal ausgeführt wird. Sie sollten eine Ausgabe bemerken, die so aussieht:

curl loop output:Droplet: , IP Address:
...
curl: (7) Failed to connect to  port 80: Connection refused
Droplet: , IP Address:
...

Das heißt, die Floating-IP-Adresse sollte neu zugewiesen werden, um auf die IP-Adresse des * sekundären * Servers zu verweisen. Das bedeutet, dass Ihr HA-Setup funktioniert, da ein erfolgreiches automatisches Failover stattgefunden hat.

Möglicherweise wird der Fehler "+ Verbindung abgelehnt +" angezeigt, der auftreten kann, wenn Sie versuchen, zwischen dem Ausfall des Primärservers und dem Abschluss der Neuzuweisung der Floating-IP auf die Floating-IP zuzugreifen.

Wenn Sie den Status von Pacemaker überprüfen, sollten Sie feststellen, dass die Ressource + FloatIP + auf dem * sekundären * Server gestartet wurde. Außerdem sollte der * primäre * Server vorübergehend als "+ OFFLINE" markiert sein, wird jedoch der "+ Online" -Liste hinzugefügt, sobald der Neustart abgeschlossen und der Cluster neu verbunden ist.

Fehlerbehebung beim Failover (optional)

Überspringen Sie diesen Abschnitt, wenn Ihr HA-Setup wie erwartet funktioniert. Wenn das Failover nicht wie erwartet durchgeführt wurde, sollten Sie Ihr Setup überprüfen, bevor Sie fortfahren. Stellen Sie insbesondere sicher, dass alle Verweise auf Ihr eigenes Setup vorhanden sind, z. B. die IP-Adressen der Knoten, Ihre Floating-IP und Ihr API-Token.

Nützliche Befehle zur Fehlerbehebung

Hier sind einige Befehle, die Ihnen bei der Fehlerbehebung bei der Einrichtung helfen können.

Wie bereits erwähnt, kann das Tool "+ crm_mon +" sehr hilfreich sein, um den Echtzeitstatus Ihrer Knoten und Ressourcen anzuzeigen:

sudo crm_mon

Mit diesem Befehl können Sie sich auch Ihre Cluster-Konfiguration ansehen:

sudo crm configure show

Wenn die Befehle "+ crm +" überhaupt nicht funktionieren, sollten Sie in den Corosync-Protokollen nach Hinweisen suchen:

sudo tail -f /var/log/corosync/corosync.log

Verschiedene CRM-Befehle

Diese Befehle können bei der Konfiguration Ihres Clusters hilfreich sein.

Mit dem folgenden Befehl können Sie einen Knoten in den Modus "+ Standby +" versetzen, um zu simulieren, dass ein Knoten nicht mehr verfügbar ist:

sudo crm node standby

Mit diesem Befehl können Sie den Status eines Knotens von "+ Standby" in "+ Online" ändern:

sudo crm node online

Mit dem folgenden Befehl können Sie eine Ressource bearbeiten, mit der Sie sie neu konfigurieren können:

sudo crm configure edit

Mit dem folgenden Befehl können Sie eine Ressource löschen, die vor dem Löschen gestoppt werden muss:

sudo crm resource stop
sudo crm configure delete

Zuletzt kann der Befehl + crm + von selbst ausgeführt werden, um auf eine interaktive Eingabeaufforderung + crm + zuzugreifen:

crm

Wir werden nicht auf die Verwendung der interaktiven Eingabeaufforderung "+ crm " eingehen, aber sie kann verwendet werden, um die gesamte " crm +" - Konfiguration durchzuführen, die wir bis zu diesem Zeitpunkt vorgenommen haben.

Nginx-Ressource hinzufügen (optional)

Nachdem Sie sicher sind, dass Ihr Floating IP-Failover funktioniert, möchten wir Ihrem Cluster eine neue Ressource hinzufügen. In unserem Beispiel-Setup ist Nginx der Hauptdienst, den wir hochverfügbar machen. Lassen Sie uns also daran arbeiten, ihn als Ressource hinzuzufügen, die unser Cluster verwalten wird.

Pacemaker wird mit einem Nginx-Ressourcenagenten geliefert, sodass wir Nginx problemlos als Clusterressource hinzufügen können.

Verwenden Sie diesen Befehl, um eine neue primitive Cluster-Ressource mit dem Namen "Nginx" zu erstellen:

sudo crm configure primitive Nginx ocf:heartbeat:nginx \
 params httpd="/usr/sbin/nginx" \
 op start timeout="40s" interval="0" \
 op monitor timeout="30s" interval="10s" on-fail="restart" \
 op stop timeout="60s" interval="0"

Die angegebene Ressource weist den Cluster an, Nginx alle 10 Sekunden zu überwachen und neu zu starten, wenn es nicht mehr verfügbar ist.

Überprüfen Sie den Status Ihrer Cluster-Ressourcen mit + sudo crm_mon oder` + sudo crm status`:

crm_mon:...
Online: [ primary secondary ]

FloatIP    (ocf::digitalocean:floatip):    Started
Nginx  (ocf::heartbeat:nginx): Started

Leider wird Pacemaker beschließen, die Ressourcen + Nginx + und + FloatIP + auf separaten Knoten zu starten, da wir keine Ressourcenbeschränkungen definiert haben. Dies ist ein Problem, da dies bedeutet, dass die Floating-IP auf ein Droplet verweist, während der Nginx-Dienst nur auf dem anderen Droplet ausgeführt wird. Wenn Sie auf die Floating IP zugreifen, werden Sie auf einen Server verwiesen, auf dem der Dienst nicht ausgeführt wird und der hoch verfügbar sein sollte.

Um dieses Problem zu beheben, erstellen wir eine * Klon * -Ressource, die angibt, dass eine vorhandene primitive Ressource auf mehreren Knoten gestartet werden soll.

Erstellen Sie mit diesem Befehl eine Klonressource der Ressource "+ Nginx +" mit dem Namen "Nginx-clone":

sudo crm configure clone Nginx-clone Nginx

Der Clusterstatus sollte nun ungefähr so ​​aussehen:

crm_mon:Online: [ primary secondary ]

FloatIP (ocf::digitalocean:floatip):    Started primary
Clone Set: Nginx-clone [Nginx]
    Started: [ primary secondary ]

Wie Sie sehen, wird die Klonressource "+ Nginx-clone +" jetzt auf beiden Knoten gestartet.

Der letzte Schritt ist die Konfiguration einer * Colocation * -Restraint, um anzugeben, dass die Ressource + FloatIP + auf einem Knoten mit einer aktiven Ressource + Nginx-clone + ausgeführt werden soll. Verwenden Sie diesen Befehl, um eine Colocation-Einschränkung mit dem Namen „FloatIP-Nginx“ zu erstellen:

sudo crm configure colocation FloatIP-Nginx inf: FloatIP Nginx-clone

Sie werden keinen Unterschied in der Ausgabe von "+ crm status +" sehen, aber Sie können sehen, dass die Colocation-Ressource mit diesem Befehl erstellt wurde:

sudo crm configure show

Jetzt sollte auf beiden Servern Nginx ausgeführt werden, während auf nur einem die Ressource + FloatIP + ausgeführt wird. Jetzt ist ein guter Zeitpunkt, um Ihr HA-Setup zu testen, indem Sie Ihren Nginx-Dienst beenden und Ihren * aktiven * Server neu starten oder ausschalten.

Fazit

Herzliche Glückwünsche! Sie haben jetzt ein grundlegendes HA-Server-Setup mit Corosync, Pacemaker und einer DigitalOcean Floating IP.

Der nächste Schritt besteht darin, das Beispiel-Nginx-Setup durch einen Reverse-Proxy-Load-Balancer zu ersetzen. Zu diesem Zweck können Sie Nginx oder HAProxy verwenden. Denken Sie daran, dass Sie Ihren Load Balancer an die * Anker-IP-Adresse * binden möchten, damit Ihre Benutzer nur über die Floating-IP-Adresse (und nicht über die öffentliche IP-Adresse jedes Servers) auf Ihre Server zugreifen können. Dieser Vorgang wird unter https://www.digitalocean.com/community/tutorials/how-to-create-a-high-availability-haproxy-setup-with-corosync-pacemaker-and-floating-ips-on- beschrieben. ubuntu-14-04 [Erstellen eines Hochverfügbarkeits-HAProxy-Setups mit Corosync, Pacemaker und Floating IPs unter Ubuntu 14.04] Tutorial.