Konfigurieren von Pacemaker-Clustern für SQL Server-Verfügbarkeitsgruppen

Gilt für: SQL Server – Linux

In diesem Artikel wird erläutert, wie ein Cluster mit drei Knoten unter Linux mithilfe von Pacemaker erstellt und eine zuvor erstellte Verfügbarkeitsgruppe als Ressource im Cluster hinzugefügt wird. Zur Gewährleistung von Hochverfügbarkeit benötigt eine Verfügbarkeitsgruppe unter Linux drei Knoten. Weitere Informationen hierzu finden Sie unter Hochverfügbarkeit und Schutz von Daten für Verfügbarkeitsgruppenkonfigurationen.

Hinweis

Vorurteilsfreie Kommunikation

In diesem Artikel wird der Begriff Slave (Sklave) verwendet, der in diesem Kontext von Microsoft als beleidigend eingestuft wird. Der Begriff wird in diesem Artikel verwendet, weil er derzeit in der Software verwendet wird. Sobald der Begriff aus der Software entfernt wird, wird er auch aus dem Artikel entfernt.

SQL Server ist unter Linux nicht so eng in Pacemaker integriert wie beim Windows Server-Failoverclustering (WSFC). Das Cluster ist keiner SQL-Serverinstanz bekannt, und die gesamte Orchestrierung erfolgt von außen. Pacemaker bietet eine Clusterressourcenorchestrierung. Der virtuelle Netzwerkname ist außerdem spezifisch für das Windows Server-Failoverclustering. In Pacemaker gibt es hierfür keine Entsprechung. Dynamische Verwaltungssichten der Verfügbarkeitsgruppen (DMVs), die Clusterinformationen abfragen, geben in Pacemaker leere Zeilen zurück. Registrieren Sie in DNS den Listenernamen manuell mit der zum Erstellen der virtuellen IP-Ressource verwendeten IP-Adresse, um nach einem Failover einen Listener für eine transparente Neuverbindung zu erstellen.

Sie können weiterhin einen Listener erstellen, um ihn nach einem Failover für eine transparente erneute Verbindung zu verwenden. Sie müssen jedoch den Listenernamen im DNS-Server manuell mit der IP-Adresse registrieren, die zum Erstellen der virtuellen IP-Ressource verwendet wurde (eine Erläuterung hierzu finden Sie in den folgenden Abschnitten).

In den folgenden Abschnitten werden die Schritte zum Einrichten eines Pacemaker-Clusters und Hinzufügen einer Verfügbarkeitsgruppe für jede unterstützte Linux-Verteilung als Ressource im Cluster für Hochverfügbarkeit beschrieben.

Die Clusteringebene basiert auf einem Hochverfügbarkeits-Add-On für Red Hat Enterprise Linux (RHEL), das auf Pacemaker aufbaut.

Hinweis

Für den Zugriff auf die vollständige Red Hat-Dokumentation ist ein gültiges Abonnement erforderlich.

Weitere Informationen zur Clusterkonfiguration, den Optionen für Ressourcen-Agents und der Verwaltung finden Sie in der Referenzdokumentation von RHEL.

Roadmap

Die Schritte zum Erstellen einer Verfügbarkeitsgruppe auf Linux-Servern für Hochverfügbarkeit unterscheiden sich von den Schritten in Windows Server-Failoverclustern. Die allgemeinen Schritte werden in der folgenden Liste beschrieben:

  1. Konfigurieren Sie SQL Server in den Clusterknoten.

  2. Erstellen Sie die Verfügbarkeitsgruppe.

  3. Konfigurieren Sie einen Cluster Resource Manager wie Pacemaker. Diese Anweisungen finden Sie in diesem Artikel.

    Die Art und Weise des Konfigurierens eines Clusterressourcen-Managers hängt von der jeweiligen Linux-Distribution ab.

    Wichtig

    In Produktionsumgebungen wird zur Gewährleistung von Hochverfügbarkeit ein Fencing-Agent benötigt. In den Demos dieser Dokumentation werden keine Fencing-Agents verwendet. Die Demos dienen lediglich zu Testzwecken und Überprüfungen. Ein Linux-Cluster verwendet Fencing, um den Cluster in einen bekannten Zustand zurückzusetzen. Wie das Fencing konfiguriert wird, hängt von der Verteilung und der Umgebung ab. Derzeit ist Fencing in einigen Cloudumgebungen nicht verfügbar. Weitere Informationen finden Sie unter Supportrichtlinien für RHEL-Hochverfügbarkeitscluster – Virtualisierungsplattformen.

  4. Fügen Sie die Verfügbarkeitsgruppe als Ressource im Cluster hinzu.

Konfigurieren der Hochverfügbarkeit für RHEL

Aktivieren Sie das Hochverfügbarkeitsabonnement, und konfigurieren Sie dann Pacemaker, um die Hochverfügbarkeit für RHEL zu konfigurieren.

Aktivieren des Hochverfügbarkeitsabonnements für RHEL

Jeder Knoten im Cluster muss über ein entsprechendes Abonnement für RHEL und das Hochverfügbarkeits-Add-On verfügen. Überprüfen Sie die Anforderungen unter Installieren von Hochverfügbarkeitsclusterpaketen in Red Hat Enterprise Linux. Führen Sie die folgenden Schritte aus, um das Abonnement un die Repositorys zu konfigurieren:

  1. Registrieren Sie das System.

    sudo subscription-manager register
    

    Geben Sie Ihren Benutzernamen und Ihr Kennwort ein.

  2. Listen Sie die verfügbaren Pools für die Registrierung auf.

    sudo subscription-manager list --available
    

    Notieren Sie sich aus der Liste der verfügbaren Pools die Pool-ID für das Hochverfügbarkeitsabonnement.

  3. Aktualisieren Sie das folgende Skript. Ersetzen Sie <pool id> durch die Pool-ID für Hochverfügbarkeit aus dem vorherigen Schritt. Führen Sie das Skript aus, um das Abonnement anzufügen.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Aktivieren Sie das Repository.

    RHEL 7

    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    

    RHEL 8

    sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
    

Weitere Informationen finden Sie unter Pacemaker – der hochverfügbare Open-Source-Cluster.

Führen Sie nach dem Konfigurieren des Abonnements die folgenden Schritte aus, um Pacemaker zu konfigurieren:

Konfigurieren von Pacemaker

Führen Sie die folgenden Schritte aus, um nach der Registrierung des Abonnements Pacemaker zu konfigurieren:

  1. Öffnen Sie auf allen Clusterknoten die Pacemaker-Firewallports. Führen Sie zum Öffnen dieser Ports mit firewalld folgenden Befehl aus:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Wenn die Firewall nicht über eine integrierte Konfiguration mit hoher Verfügbarkeit verfügt, öffnen Sie die folgenden Ports für Pacemaker.

    • TCP: Ports 2224, 3121, 21064
    • UDP: Port 5405
  2. Installieren Sie Pacemaker-Pakete auf allen Knoten.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  3. Legen Sie das Kennwort für den Standardbenutzer fest, der beim Installieren von Pacemaker und Corosync-Paketen erstellt wird. Verwenden Sie auf allen Knoten dasselbe Kennwort.

    sudo passwd hacluster
    
  4. Aktivieren und starten Sie den pcsd-Dienst und Pacemaker, um den Knoten nach dem Neustart einen erneuten Beitritt zum Cluster zu erlauben. Führen Sie den folgenden Befehl auf allen Knoten aus.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Erstellen Sie den Cluster. Führen Sie den folgenden Befehl aus, um den Cluster zu erstellen:

    RHEL 7

    sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
    sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL 8

    Bei RHEL 8 müssen Sie die Knoten separat authentifizieren. Geben Sie den Benutzernamen und das Kennwort für „hacluster“ manuell ein, wenn Sie dazu aufgefordert werden.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    Hinweis

    Wenn Sie vorher einen Cluster auf denselben Knoten konfiguriert haben, müssen Sie die Option --force verwenden, wenn Sie pcs cluster setup ausführen. Diese Option entspricht der Ausführung von pcs cluster destroy. Führen Sie sudo systemctl enable pacemaker aus, um Pacemaker erneut zu aktivieren.

  6. Installieren Sie den SQL Server-Ressourcenagent für SQL Server. Führen Sie die folgenden Befehle auf allen Knoten aus.

    sudo yum install mssql-server-ha
    

Verwenden Sie nach dem Konfigurieren von Pacemaker pcs, um mit dem Cluster zu interagieren. Führen Sie alle Befehle auf einem Knoten aus dem Cluster aus.

Überlegungen zu mehreren Netzwerkschnittstellen (NICs)

Folgen Sie den folgenden Vorschlägen, wenn Sie hohe Verfügbarkeit auf Servern mit mehreren NICs einrichten:

  • Stellen Sie sicher, dass die hosts Datei so eingerichtet ist, dass die Server-IP-Adressen für die verschiedenen NICs auf dem Hostnamen des Linux-Servers auf jedem Knoten aufgelöst werden.

  • Wenn Sie den Cluster mithilfe von Pacemaker einrichten, sollte zur Verwendung des Hostnamens des Servers Corosync konfiguriert werden, um die Konfiguration für alle NICs festzulegen. Wir wollen nur die Pacemaker/Corosync-Kommunikation über eine einzelne NIC. Nachdem der Pacemaker-Cluster konfiguriert wurde, ändern Sie die Konfiguration in der Datei corosync.conf, und aktualisieren Sie die IP-Adresse für die dedizierte NIC, die Sie für die Pacemaker/Corosync-Kommunikation verwenden möchten.

  • Der <hostname> in der Datei corosync.conf sollte mit der Ausgabe identisch sein, die beim umgekehrten Nachschlagen (ping -a <ip_address>) erfolgt. Außerdem sollte es der auf dem Host konfigurierte kurze Name sein. Stellen Sie sicher, dass die Date hosts auch die richtige IP-Adresse für die Namensauflösung darstellt.

Die Änderungen am corosync.conf-Dateibeispiel sind nachfolgend markiert:

  nodelist {
    node {
        ring0_addr: <ip_address_of_node1_NIC1>
        name: <hostname_of_node1>
        nodeid: 1
    }
    node {
        ring0_addr: <ip_address_of_node2_NIC1>
        name: <hostname_of_node2>
        nodeid: 2
    }
    node {
        ring0_addr: <ip_address_of_node3_NIC1>
        name: <hostname_of_node3>
        nodeid: 3
    }
  }

Konfigurieren eines Fencinggeräts

Bei Anbietern von Pacemaker-Clustern muss ein ausgefallener Knoten mit einem Fencinggerät, das für eine unterstützte Clustereinrichtung konfiguriert ist, gesichert werden. Wenn der Clusterressourcen-Manager den Status eines Knotens oder einer Ressource auf einem Knoten nicht ermitteln kann, wird der Cluster mithilfe von Fencing wieder in einen bekannten Status versetzt.

Ein Fencinggerät stellt einen Fencing-Agent bereit. Ein Beispiel für das Erstellen eines Fencinggeräts für diesen Cluster in Azure finden Sie unter Einrichten von Pacemaker unter Red Hat Enterprise Linux in Azure. Ändern Sie die Anweisungen für Ihre Umgebung.

Durch Fencing auf Ressourcenebene wird sichergestellt, dass bei einem Ausfall durch die Konfiguration einer Ressource keine Daten beschädigt werden. Sie können Fencing auf Ressourcenebene beispielsweise dazu verwenden, den Datenträger auf einem Knoten bei einem Ausfall der Kommunikationsverbindung als veraltet zu markieren.

Mit dem Fencing auf Knotenebene wird sichergestellt, dass ein Knoten keine Ressourcen ausführt. Dies erfolgt durch Zurücksetzen des Knotens. Pacemaker unterstützt eine Vielzahl von Fencinggeräten. Beispiele hierfür sind eine unterbrechungsfreie Stromversorgung oder Verwaltungsschnittstellenkarten für Server.

Weitere Informationen zum Fencing für fehlerhafte Knoten finden Sie in den folgenden Artikeln:

Hinweis

Da die Fencingkonfiguration auf Knotenebene stark von Ihrer Umgebung abhängt, wird sie für dieses Tutorial deaktiviert (sie kann später konfiguriert werden). Mit dem folgenden Skript wird Fencing auf Knotenebene deaktiviert:

sudo pcs property set stonith-enabled=false

Das Fencing wird lediglich zu Testzwecken deaktiviert. Wenn Sie Pacemaker in einer Produktionsumgebung verwenden möchten, sollten Sie je nach Ihrer Umgebung eine Fencingimplementierung planen und immer aktivieren.

Festlegen der Clustereigenschaft „cluster-recheck-interval“

cluster-recheck-interval gibt das Abrufintervall an, mit dem der Cluster prüft, ob Änderungen in den Ressourcenparametern, Einschränkungen oder anderen Clusteroptionen vorliegen. Wenn ein Replikat ausfällt, versucht der Cluster, das Replikat in einem Intervall neu zu starten, das durch den Wert failure-timeout und den Wert cluster-recheck-interval gebunden ist. Wenn failure-timeout beispielsweise auf 60 Sekunden und cluster-recheck-interval auf 120 Sekunden festgelegt ist, wird der Neustart in einem Intervall versucht, das größer als 60 Sekunden, aber kleiner als 120 Sekunden ist. Es wird empfohlen, „failure-timeout“ auf 60 Sekunden und cluster-recheck-interval auf einen Wert größer als 60 Sekunden festzulegen. cluster-recheck-interval auf einen kleinen Wert festzulegen, wird nicht empfohlen.

So aktualisieren Sie den Eigenschaftswert auf ein Ausführungsintervall von 2 minutes:

sudo pcs property set cluster-recheck-interval=2min

Wenn Sie bereits über eine Verfügbarkeitsgruppenressource verfügen, die von einem Pacemaker-Cluster verwaltet wird, hat das Pacemaker-Paket 1.1.18-11.el7 einen Behavior Change für die Clustereinstellung start-failure-is-fatal für den Fall eingeführt, dass ihr Wert false ist. Diese Änderung wirkt sich auf den Failoverworkflow aus. Wenn ein primäres Replikat ausfällt, wird für den Cluster ein Failover auf eines der verfügbaren sekundären Replikate erwartet. Stattdessen werden die Benutzer bemerken, dass der Cluster weiterhin versucht, das ausgefallene primäre Replikat zu starten. Wenn dieses primäre Replikat (aufgrund eines dauerhaften Ausfalls) nicht online geschaltet wird, führt der Cluster kein Failover zu einem anderen verfügbaren sekundären Replikat durch. Aufgrund dieser Änderung ist eine zuvor empfohlene Konfiguration zum Festlegen von start-failure-is-fatal nicht mehr gültig, und für die Einstellung muss der Standardwert true wiederhergestellt werden.

Darüber hinaus muss die Verfügbarkeitsgruppenressource aktualisiert werden, um die Eigenschaft failure-timeout einzubeziehen.

So aktualisieren Sie den Eigenschaftswert auf ein Ausführungsintervall von true:

sudo pcs property set start-failure-is-fatal=true

So aktualisieren Sie die ag_cluster-Ressourceneigenschaft failure-timeout auf 60s:

pcs resource update ag_cluster meta failure-timeout=60s

Weitere Informationen zu Pacemaker-Clustereigenschaften finden Sie unter Pacemaker-Clustereigenschaften.

Erstellen einer SQL Server-Anmeldung für Pacemaker

  1. Erstellen Sie in allen SQL Server-Instanzen eine Server-Anmeldung für Pacemaker.

    Die folgende Transact-SQL erstellt eine Anmeldung:

    USE [master]
    GO
    CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
    

    Für die Erstellung der Verfügbarkeitsgruppe benötigt der Pacemaker-Benutzer die Berechtigungen ALTER, CONTROL und VIEW DEFINITION für die Verfügbarkeitsgruppe, nachdem diese erstellt wurde, aber bevor ihr irgendwelche Knoten hinzugefügt werden.

  2. Speichern Sie in allen SQL Server-Instanzen die Anmeldeinformationen für die SQL Server-Anmeldung.

    echo 'pacemakerLogin' >> ~/pacemaker-passwd
    echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd
    sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
    

Erstellen von Verfügbarkeitsgruppenressourcen

Verwenden Sie den Befehl pcs resource create, und legen Sie die Ressourceneigenschaften fest, um die Verfügbarkeitsgruppenressource zu erstellen. Mit dem folgenden Befehl wird eine ocf:mssql:ag-Ressource vom Typ Master/untergeordnet für die Verfügbarkeitsgruppe mit dem Namen ag1 erstellt.

RHEL 7

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true

RHEL 8

Mit der Verfügbarkeit von RHEL 8 hat sich die Syntax für das Erstellen geändert. Wenn Sie RHEL 8 verwenden, ist die Terminologie nun nicht mehr master, sondern promotable. Verwenden Sie anstelle des obigen Befehls den folgenden Befehl zum Erstellen:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s promotable notify=true

Hinweis

Wenn Sie die Ressource erstellen und danach der Pacemaker-Ressourcenagent in regelmäßigen Abständen den Wert von REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT automatisch auf die Verfügbarkeitsgruppe basierend auf der Konfiguration der Verfügbarkeitsgruppe festlegt. Wenn die Verfügbarkeitsgruppe z.B. über drei synchrone Replikate verfügt, wird der Agent REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT auf 1 festlegen. Details und weitere Konfigurationsoptionen finden Sie unter High availability and data protection for availability group configurations (Hohe Verfügbarkeit und Schutz von Daten für Verfügbarkeitsgruppenkonfigurationen).

Erstellen einer virtuellen IP-Ressource

Führen Sie den folgenden Befehl auf einem Knoten aus, um die virtuelle IP-Adressressource zu erstellen. Verwenden Sie eine verfügbare statische IP-Adresse aus dem Netzwerk. Ersetzen Sie die IP-Adresse zwischen <10.128.16.240> durch eine gültige IP-Adresse.

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>

In Pacemaker ist der Name eines virtuellen Servers nicht gleichwertig. Registrieren Sie die virtuelle IP-Ressourcenadresse und den gewünschten Namen des virtuellen Servers in DNS, wenn Sie anstelle einer IP-Adresse eine Verbindungszeichenfolge verwenden möchten, die auf einen Zeichenfolgenservernamen verweist. Registrieren Sie für Notfallwiederherstellungskonfigurationen den gewünschten Namen des virtuellen Servers und die IP-Adresse bei den DNS-Servern am primären Standort und dem Standort für die Notfallwiederherstellung.

Hinzufügen einer Kollokationseinschränkung

Fast jede Entscheidung in einem Pacemaker-Cluster, wie etwa die Auswahl des Orts, an dem eine Ressource ausgeführt werden soll, erfolgt durch Vergleichen von Bewertungen. Die Bewertungen werden pro Ressource berechnet. Der Clusterressourcen-Manager wählt den Knoten mit der höchsten Bewertung für eine bestimmte Ressource aus. Wenn ein Knoten eine negative Bewertung für eine Ressource aufweist, kann die Ressource auf diesem Knoten nicht ausgeführt werden.

Auf einem Pacemaker-Cluster können Sie die Entscheidungen des Clusters mit Einschränkungen beeinflussen. Einschränkungen weisen eine Bewertung auf. Wenn eine Einschränkung eine Bewertung unter INFINITY aufweist, wird diese von Pacemaker lediglich als Empfehlung angesehen. Eine Bewertung von INFINITY ist obligatorisch.

Definieren Sie eine Kollokationseinschränkung mit der Bewertung INFINITY, um sicherzustellen, dass das primäre Replikat und die virtuellen IP-Ressourcen auf demselben Host ausgeführt werden. Führen Sie den folgenden Befehl auf einem Knoten aus, um eine Kollokationseinschränkung hinzuzufügen.

RHEL 7

Beim Erstellen der ag_cluster-Ressource in RHEL 7 wird die Ressource als ag_cluster-master erstellt. Verwenden Sie den folgenden Befehl für RHEL 7:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

RHEL 8

Beim Erstellen der ag_cluster-Ressource in RHEL 8 wird die Ressource als ag_cluster-clone erstellt. Verwenden Sie den folgenden Befehl für RHEL 8:

sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master

Hinzufügen einer Sortierungseinschränkung

Die Kollokationseinschränkung weist eine implizite Sortierungseinschränkung auf. Damit wird die virtuelle IP-Adressressource verschoben, bevor diese die Verfügbarkeitsgruppenressource verschiebt. Die Ereignisse laufen standardmäßig wie folgt ab:

  1. Der Benutzer gibt den Befehl pcs resource move aus, um die primäre Verfügbarkeitsgruppe von node1 zu node2 zu verschieben.

  2. Die virtuelle IP-Ressource wird auf Knoten 1 angehalten.

  3. Die virtuelle IP-Ressource wird auf Knoten 2 gestartet.

    Hinweis

    Zu diesem Zeitpunkt verweist die IP-Adresse vorübergehend auf Knoten 2, während Knoten 2 noch ein sekundäres Replikat vor dem Failover darstellt.

  4. Die primäre Verfügbarkeitsgruppe auf Knoten 1 wird auf sekundär herabgestuft.

  5. Die sekundäre Verfügbarkeitsgruppe auf Knoten 2 wird auf primär heraufgestuft.

Fügen Sie eine Sortierungseinschränkung hinzu, um zu vermeiden, dass die IP-Adresse vorübergehend auf den Knoten mit dem sekundären Replikat vor dem Failover verweist.

Führen Sie den folgenden Befehl auf einem Knoten aus, um eine Sortierungseinschränkung hinzuzufügen:

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Wichtig

Nachdem Sie den Cluster konfiguriert und die Verfügbarkeitsgruppe als Clusterressource hinzugefügt haben, können Sie ein Failover der Verfügbarkeitsgruppenressourcen nicht mehr mit Transact-SQL durchführen. SQL Server-Clusterressourcen unter Linux sind nicht so eng mit dem Betriebssystem gekoppelt wie in einem Windows Server-Failovercluster (WSFC). Der SQL Server-Dienst kann das Vorhandensein des Clusters nicht erkennen. Die gesamte Orchestrierung erfolgt über die Clusterverwaltungstools. Verwenden Sie in RHEL oder unter Ubuntu pcs-Tools und in SLES crm-Tools.

Führen Sie für die Verfügbarkeitsgruppe ein Failover mit pcs aus. Initiieren Sie kein Failover mit Transact-SQL. Anweisungen finden Sie unter Failover.