Failover-Cluster-Instanz unter Linux betreiben

Gilt für:SQL Server unter Linux

In diesem Artikel wird erläutert, wie Sie eine SQL Server-Failoverclusterinstanz (FCI) unter Linux ausführen. Zum Erstellen einer SQL Server-FCI unter Linux lesen Sie Failoverclusterinstanz unter Linux (RHEL) konfigurieren.

Beschreibung der Architektur

Die Clustering-Schicht basiert auf dem Red Hat Enterprise Linux (RHEL) HA-Add-on, das auf Pacemaker basiert. Corosync und Pacemaker koordinieren die Clusterkommunikation und die Ressourcenverwaltung. Die SQL Server-Instanz ist jeweils auf einem Knoten aktiv.

Das folgende Diagramm veranschaulicht die Komponenten in einem Linux-Cluster mit SQL Server.

Diagramm eines Shared-Disk-SQL Server-Failover-Clusters unter Linux.

Für weitere Informationen zur Clusterkonfiguration, Ressourcenagentenoptionen und Verwaltung besuchen Sie die RHEL-Referenzdokumentation.

Failover

Failover für FCIs ähnelt einem Windows Server-Failovercluster (WSFC). Tritt auf dem Clusterknoten, der als Host für die FCI fungiert, ein Fehler auf, sollte die FCI automatisch einen Failover zu einem anderen Knoten ausführen. Anders als bei einem WSFC gibt es keine Möglichkeit, bevorzugte Besitzer festzulegen. Daher wählt Pacemaker den Knoten aus, der als neuer Host für die FCI fungieren soll.

Manchmal möchten Sie möglicherweise ein manuelles Failover der FCI auf einen anderen Knoten durchführen. Der Prozess ist nicht derselbe wie bei FCIs in einem WSFC. In einem WSFC führen Sie ein Failover für Ressourcen auf Rollenebene aus. Im Pacemaker wählt man eine Ressource aus, die man bewegt, und wenn alle Einschränkungen stimmen, bewegt sich auch alles andere.

Die Vorgehensweise für das Failover hängt von der Linux-Distribution ab. Befolge die Anweisungen für deine Linux-Distribution.

Manuelles Failover (RHEL oder Ubuntu)

Führen Sie für ein manuelles Failover auf einem RHEL- (Red Hat Enterprise Linux) oder Ubuntu-Server die folgenden Schritte aus.

  1. Führen Sie den folgenden Befehl aus:

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>ist der Name der Pacemaker-Ressource für das SQL Server FCI und <NewHostNode> der Name des Cluster-Knotens, den Sie als FCI hosten möchten.

  2. Während eines manuellen Failovers erstellt Pacemaker eine Speicherorteinschränkung für die Ressource, die zur manuellen Verschiebung ausgewählt wurde. Führen Sie sudo pcs constraint aus, um diese Einschränkung anzuzeigen.

  3. Nach Abschluss des Failovers entfernen Sie die Einschränkung:

    sudo pcs resource clear <FCIResourceName>
    

Manuelles Failover (SLES)

Note

Ab SQL Server 2025 (17.x) wird SUSE Linux Enterprise Server (SLES) nicht unterstützt. Für SQL Server 2022 (16.x) und frühere Versionen wird nur SLES 15 unterstützt.

Verwenden Sie in SUSE Linux Enterprise Server (SLES) den migrate-Befehl, um ein manuelles Failover für eine SQL Server-FCI durchzuführen. Beispiel:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> ist der Ressourcenname für die Failover-Cluster-Instanz und <NewHostNode> der Name des neuen Zielhosts.

Überwachen Sie einen Failover-Cluster

Anzeigen des aktuellen Clusterstatus:

sudo pcs status

Sehen Sie sich den Live-Status des Clusters und der Ressourcen an:

sudo crm_mon

Sehen Sie sich die Resource Agent-Logs unter /var/log/cluster/corosync.log.

Hinzufügen eines Knotens zu einem Cluster

  1. Überprüfen Sie die IP-Adresse jedes Knotens. Das folgende Skript zeigt die IP-Adresse des aktuellen Knotens an.

    ip addr show
    
  2. Der neue Knoten benötigt einen einzigartigen Namen, der 15 Zeichen oder weniger umfasst. Legen Sie den Computernamen fest, indem Sie diesen zu /etc/hosts hinzufügen. Mithilfe des folgenden Skripts können Sie /etc/hosts mit vi bearbeiten.

    sudo vi /etc/hosts
    

    Das folgende Beispiel zeigt /etc/hosts mit Ergänzungen für drei Knoten mit den Namen sqlfcivm1, sqlfcivm2 und sqlfcivm3.

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  sqlfcivm1
    10.128.16.77   sqlfcivm2
    10.128.14.26   sqlfcivm3
    

    Die Datei sollte auf jedem Knoten dieselbe sein.

  3. Beenden Sie den SQL Server-Dienst auf dem neuen Knoten.

  4. Befolgen Sie die Anweisungen, um das Datenbankverzeichnis an den gemeinsamen Speicherort einzubinden.

    Vom NFS-Server aus installieren Sie nfs-utils:

    sudo yum -y install nfs-utils
    

    Öffnen Sie die Firewall auf Clients und NFS-Server:

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

    Bearbeiten Sie die Datei /etc/fstab so, dass sie den Einbindungsbefehl enthält:

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    Führen Sie mount -a aus, damit die Änderungen wirksam werden.

  5. Erstellen Sie auf dem neuen Knoten eine Datei zum Speichern von Benutzername und Kennwort für SQL Server für die Pacemaker-Anmeldung. Der folgende Code erstellt und füllt diese Tabelle:

    sudo touch /var/opt/mssql/secrets/passwd
    echo "<loginName>" | sudo tee -a /var/opt/mssql/secrets/passwd
    echo "<password>" | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Caution

    Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Standardmäßig muss das Kennwort mindestens acht Zeichen lang sein und Zeichen aus drei der folgenden vier Sätze enthalten: Großbuchstaben, Kleinbuchstaben, Basis-10 Ziffern und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.

  6. Öffnen Sie auf dem neuen Knoten 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 Sie eine andere Firewall verwenden, die keine integrierte High-Availability-Konfiguration hat, öffnen Sie die folgenden Ports, damit Pacemaker mit anderen Knoten im Cluster kommunizieren kann:

    • TCP: Ports 2224, 3121, 21064
    • UDP: Port 5405
  7. Installieren Sie Pacemaker-Pakete auf dem neuen Knoten.

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

    sudo passwd hacluster
    
  9. Aktivieren und starten Sie den pcsd-Dienst und Pacemaker. Der neue Knoten kann nach einem Neustart wieder dem Cluster beitreten. Führen Sie den folgenden Befehl auf dem neuen Knoten aus.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. Installieren Sie den FCI-Ressourcenagent für SQL Server. Führen Sie den folgenden Befehl auf dem neuen Knoten aus.

    sudo yum install mssql-server-ha
    
  11. Auf einem bestehenden Knoten im Cluster authentifizieren Sie den neuen Knoten und fügen Sie ihn dem Cluster hinzu:

    sudo pcs cluster auth <nodeName3> -u hacluster
    sudo pcs cluster node add <nodeName3>
    

Entfernen von Knoten aus einem Cluster

Führen Sie den folgenden Befehl aus, um einen Knoten aus einem Cluster zu entfernen:

sudo pcs cluster node remove <nodeName>

Ändern Sie die Frequenz der Ressourcenüberwachung

sudo pcs resource op monitor interval=<interval>s <sqlResourceName>

Das folgende Beispiel setzt das Überwachungsintervall für die Ressource mssqlha auf 2 Sekunden:

sudo pcs resource op monitor interval=2s mssqlha

Problembehandlung

Bei der Fehlersuche im Cluster ist es hilfreich zu verstehen, wie die drei Daemons bei der Verwaltung der Clusterressourcen zusammenarbeiten.

Daemon Description
Corosync Stellt die Quorum-Mitgliedschaft und die Nachrichtenübermittlung zwischen Clusterknoten bereit.
Pacemaker Baut auf Corosync auf und bietet Zustandsautomaten für Ressourcen
PCSD Verwaltet Pacemaker und Corosync über die pcs-Tools.

PCSD muss ausgeführt werden, damit die pcs-Tools verwendet werden können.

Aktueller Clusterstatus

sudo pcs status gibt grundlegende Informationen zu Cluster, Quorum, Knoten, Ressourcen und Daemonstatus für jeden Knoten zurück.

Das folgende Beispiel zeigt eine fehlerfreie Pacemaker-Quorum-Ausgabe:

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2024  Last change: Wed Oct 31 11:00:00 2024 by root via crm_resource on sqlvmnode1
Stack: corosync
Current DC: sqlvmnode1  (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
3 nodes and 1 resource configured

Online: [ sqlvmnode1 sqlvmnode2 sqlvmnode3 ]

Full list of resources:

mssqlha (ocf::sql:fci): Started sqlvmnode1

PCSD Status:
sqlvmnode1: Online
sqlvmnode2: Online
sqlvmnode3: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/enabled

In diesem Beispiel bedeutet das, partition with quorum dass die Mehrheit der Knoten online ist. Wenn der Cluster die Quorumsmehrheit der Knoten verliert, gibt pcs statuspartition WITHOUT quorum zurück, und alle Ressourcen werden gestoppt.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] gibt die Namen aller Knoten zurück, die aktuell am Cluster beteiligt sind. Wenn ein oder mehrere Knoten nicht beteiligt sind, gibt pcs statusOFFLINE: [<nodename>] zurück.

PCSD Status zeigt den Clusterstatus für jeden Knoten an.

Gründe, warum ein Knoten offline sein kann

Überprüfen Sie Folgendes, wenn ein Knoten offline ist:

  • Firewall

    Öffnen Sie die folgenden Ports an allen Knoten, damit der Pacemaker kommunizieren kann:

    • TCP: Ports 2224, 3121, 21064
    • UDP: Port 5405
  • Pacemaker- oder Corosync-Dienste laufen

  • Knotenkommunikation

  • Zuordnungen von Knotennamen