Teilen über


Konfigurieren eines freigegebenen SLES-Datenträgerclusters für SQL Server

Gilt für:SQL Server unter Linux

Dieses Handbuch enthält Anweisungen zum Erstellen eines Clusters mit zwei Knoten und gemeinsam genutztem Speicher für SQL Server auf SUSE Linux Enterprise Server (SLES). Die Clusteringebene basiert auf der SUSE High Availability Extension (HAE), die auf Pacemaker aufbaut.

Hinweis

Ab SQL Server 2025 (17.x) wird SUSE Linux Enterprise Server (SLES) nicht unterstützt.

Weitere Informationen zu Clusterkonfiguration, Ressourcen-Agent-Optionen, Verwaltung, Best Practices und Empfehlungen finden Sie unter SUSE Linux Enterprise High Availability Extension 12 SP5.

Voraussetzungen

Für das folgende End-to-End-Szenario benötigen Sie zwei Computer, um den Cluster mit zwei Knoten und einen weiteren Server zum Konfigurieren der NFS-Freigabe bereitzustellen. In den folgenden Schritten wird beschrieben, wie Sie diese Server konfigurieren.

Einrichten und Konfigurieren des Betriebssystems auf den einzelnen Clusterknoten

Der erste Schritt besteht darin, das Betriebssystem auf den Clusterknoten zu konfigurieren. Verwenden Sie für diese Schritt-für-Schritt-Anleitung SLES mit einem gültigen Abonnement für die HA-Erweiterung.

Installieren und Konfigurieren der SQL Server-Instanz auf den einzelnen Clusterknoten

  1. Installieren Sie SQL Server auf beiden Knoten, und richten Sie ihn ein. Ausführliche Anweisungen finden Sie unter Leitfaden für die Installation von SQL Server unter Linux.

  2. Legen Sie für die Konfiguration einen Knoten als primär und den anderen als sekundär fest. Verwenden Sie diese Begriffe für den weiteren Verlauf dieses Leitfadens.

  3. Beenden und deaktivieren Sie SQL Server auf dem sekundären Knoten. Im folgenden Beispiel wird SQL Server beendet und deaktiviert:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

    Hinweis

    Zur Einrichtungszeit wird ein Servermasterschlüssel (SMK) für die SQL Server-Instanz generiert und angesetzt /var/opt/mssql/secrets/machine-key. Unter Linux wird SQL Server immer als lokales Konto mit dem Namen mssql ausgeführt. Da es sich um ein lokales Konto handelt, wird dessen Identität nicht knotenübergreifend freigegeben. Sie müssen den Verschlüsselungsschlüssel vom primären Knoten in jeden sekundären Knoten kopieren, damit jedes lokale mssql Konto darauf zugreifen kann, um die SMK zu entschlüsseln.

  4. Erstellen Sie auf dem primären Knoten eine SQL Server-Anmeldung für Pacemaker, und erteilen Sie dem Anmeldenamen die Berechtigung zum Ausführen von sp_server_diagnostics. Pacemaker verwendet dieses Konto, um zu überprüfen, welcher Knoten auf SQL Server ausgeführt wird.

    sudo systemctl start mssql-server
    

    Stellen Sie eine Verbindung mit der SQL Server-Datenbank master mit dem sa Konto her, und führen Sie das folgende Skript aus:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>] with PASSWORD = N'<password>';
    GRANT VIEW SERVER STATE TO <loginName>;
    

    Achtung

    Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Ein Standardkennwort enthält mindestens acht Zeichen, die aus drei der folgenden vier Kategorien stammen müssen: Großbuchstaben, Kleinbuchstaben, Grundzahlen (0–9) und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.

  5. Beenden und deaktivieren Sie SQL Server auf dem primären Knoten.

  6. Befolgen Sie die Anweisungen in der SUSE-Dokumentation, um die hosts-Datei für die einzelnen Clusterknoten zu konfigurieren und zu aktualisieren. Die Datei hosts muss die IP-Adresse und den Namen jedes Clusterknotens enthalten.

    So überprüfen Sie die IP-Adresse des aktuellen Knotens:

    sudo ip addr show
    

    Legen Sie den Computernamen auf jedem Knoten fest. Geben Sie jedem Knoten einen eindeutigen Namen, der höchstens 15 Zeichen lang ist. Legen Sie den Computernamen fest, indem Sie ihn /etc/hostname mithilfe von YAST oder manuell hinzufügen.

    Das folgende Beispiel zeigt /etc/hosts mit Ergänzungen für zwei Knoten mit den Namen SLES1 und SLES2.

    127.0.0.1      localhost
    10.128.18.128  SLES1
    10.128.16.77   SLES2
    

    Alle Clusterknoten müssen über kennwortlosen SSH-Zugriff aufeinander verfügen. Andernfalls können Tools wie hb_report, crm_report und Hawk’s History Explorer nur Daten vom lokalen Knoten sammeln. Wenn Sie einen nicht standardmäßigen SSH-Port verwenden, verwenden Sie die -X Option (siehe weitere Anforderungen und Empfehlungen). Wenn Ihr SSH-Port z. B. 3479 ist, rufen Sie crm_report mit Folgendem auf:

    crm_report -X "-p 3479" [...]
    

    Weitere Informationen finden Sie im Administratorhandbuch.

Im nächsten Abschnitt konfigurieren Sie freigegebenen Speicher und verschieben Ihre Datenbankdateien in diesen Speicher.

Konfigurieren von freigegebenem Speicher und Verschieben von Datenbankdateien

Sie können verschiedene Lösungen verwenden, um gemeinsam genutzten Speicher bereitzustellen. Diese exemplarische Vorgehensweise veranschaulicht das Konfigurieren von freigegebenem Speicher mit NFS. Befolgen Sie bewährte Methoden, und verwenden Sie Kerberos zum Sichern von NFS:

Wenn Sie diese Anleitung nicht befolgen, kann jeder, der auf Ihr Netzwerk zugreifen und die IP-Adresse eines SQL-Knotens spooft, auf Ihre Datendateien zugreifen. Führen Sie wie immer die Bedrohungsmodellierung auf Ihrem System aus, bevor Sie sie in der Produktion verwenden.

Eine andere Speicheroption ist die Verwendung der SMB-Dateifreigabe:

Konfigurieren eines NFS-Servers

Informationen zum Konfigurieren eines NFS-Servers finden Sie in den folgenden Schritten in der SUSE-Dokumentation: Configuring NFS Server (Konfigurieren des NFS-Servers).

Konfigurieren aller Clusterknoten für die Verbindung mit dem freigegebenen NFS-Speicher

Stellen Sie vor dem Konfigurieren des Client-NFS zum Bereitstellen des SQL Server-Datenbankdateienpfads sicher, dass Sie die Datenbankdateien an einem temporären Speicherort speichern, damit Sie sie später in die Freigabe kopieren können:

  1. Speichern Sie die Datenbankdateien nur auf dem primären Knoten an einem temporären Speicherort. Das folgende Skript erstellt ein neues temporäres Verzeichnis, kopiert die Datenbankdateien in das neue Verzeichnis und entfernt die alten Datenbankdateien. Da SQL Server als lokaler Benutzer mssql ausgeführt wird, müssen Sie sicherstellen, dass der lokale Benutzer nach der Datenübertragung zur eingebundenen Freigabe Lese- und Schreibzugriff auf die Freigabe hat.

    su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    

    Konfigurieren Sie den NFS-Client auf allen Clusterknoten:

    Hinweis

    Bewährte Methoden und Empfehlungen von SUSE bezüglich hochverwendbarem NFS-Speicher finden Sie unter Hoch verfügbare NFS-Speicher mit DRBD und Pacemaker.

  2. Überprüfen Sie auf jedem Knoten, ob SQL Server erfolgreich mit dem neuen Dateipfad gestartet wird. Zu diesem Zeitpunkt sollte nur ein Knoten SQL Server gleichzeitig ausführen. Beide können nicht gleichzeitig ausgeführt werden, da beide versuchen, gleichzeitig auf die Datendateien zuzugreifen.

    Um zu verhindern, dass SQL Server auf beiden Knoten gestartet wird, verwenden Sie eine Dateisystemclusterressource, um sicherzustellen, dass die Freigabe jeweils nur von einem Knoten bereitgestellt wird.

    Die folgenden Befehle starten SQL Server, überprüfen den Status und beenden SQL Server dann.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

An diesem Punkt sind beide Instanzen von SQL Server so konfiguriert, dass sie mit den Datenbankdateien im freigegebenen Speicher ausgeführt werden. Der nächste Schritt besteht darin, SQL Server für Pacemaker zu konfigurieren.

Installieren und Konfigurieren von Pacemaker auf jedem Clusterknoten

  1. Erstellen Sie auf beiden Clusterknoten 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
    sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
    sudo echo '<password>' >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Achtung

    Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Ein Standardkennwort enthält mindestens acht Zeichen, die aus drei der folgenden vier Kategorien stammen müssen: Großbuchstaben, Kleinbuchstaben, Grundzahlen (0–9) und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.

  2. Alle Clusterknoten müssen über SSH aufeinander zugreifen. Tools wie hb_report oder crm_report (zur Problembehandlung) und Hawk's History Explorer erfordern kennwortlosen SSH-Zugriff zwischen den Knoten. Andernfalls können sie nur Daten aus dem aktuellen Knoten sammeln. Wenn Sie einen nicht standardmäßigen SSH-Port verwenden, verwenden Sie die -X Option (siehe man Seite). Wenn Ihr SSH-Port beispielsweise 3479 ist, rufen Sie folgendes hb_report auf:

    crm_report -X "-p 3479" [...]
    

    Weitere Informationen finden Sie unter System Requirements and Recommendations in the SUSE documentation (Systemanforderungen und Empfehlungen in der SUSE-Dokumentation).

  3. Installieren Sie die Erweiterung für hohe Verfügbarkeit. Um die Erweiterung zu installieren, folgen Sie den Schritten im folgenden SUSE-Artikel:

    Installation and Setup Quick Start (Installation und Setup – Schnellstart)

  4. Installieren Sie den FCI-Ressourcenagent für SQL Server. Führen Sie die folgenden Befehle auf beiden Knoten aus:

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server-2017.repo
    sudo zypper --gpg-auto-import-keys refresh
    sudo zypper install mssql-server-ha
    
  5. Richten Sie den ersten Knoten automatisch ein. Im nächsten Schritt wird ein ausgeführter Cluster mit einem Noten durch Konfigurieren des ersten Knotens, SLES1, eingerichtet. Befolgen Sie den Anweisungen im SUSE-Artikel Setting Up the First Node (Einrichten des ersten Knotens).

    Abschließend überprüfen Sie den Status des Clusters mit crm status:

    crm status
    

    Es zeigt, dass ein Knoten, SLES1, konfiguriert ist.

  6. Hinzufügen von Knoten zu einem vorhandenen Cluster. Verbinden Sie als Nächstes den SLES2-Knoten mit dem Cluster. Befolgen Sie den Anweisungen im SUSE-Artikel Adding the Second Node (Hinzufügen des zweiten Knotens).

    Abschließend überprüfen Sie den Status des Clusters mit crm status. Wenn Sie erfolgreich einen zweiten Knoten hinzufügen, sieht die Ausgabe dem folgenden Beispiel ähnlich aus:

    2 nodes configured
    1 resource configured
    Online: [ SLES1 SLES2 ]
    Full list of resources:
    admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
    

    Hinweis

    admin_addr ist die virtuelle IP-Clusterressource, die Sie während der anfänglichen Einrichtung eines Knotenclusters konfigurieren.

  7. Vorgehensweisen zum Entfernen. Wenn Sie einen Knoten aus dem Cluster entfernen möchten, verwenden Sie das Bootstrap-Skript ha-cluster-remove. Weitere Informationen finden Sie unter Overview of the Bootstrap Scripts (Übersicht über die Bootstrap-Skripts).

Konfigurieren der Clusterressourcen für SQL Server

In den folgenden Schritten wird erläutert, wie Sie die Clusterressource für SQL Server konfigurieren. Passen Sie die folgenden beiden Einstellungen an:

  • SQL Server-Ressourcenname: Ein Name für die gruppierte SQL Server-Ressource
  • Timeoutwert: Der Timeoutwert ist die Zeitspanne, die der Cluster wartet, während eine Ressource online geschaltet wird. Für SQL Server stellt dieser Wert die Zeit dar, zu der SQL Server die master Datenbank online bringen soll.

Aktualisieren Sie die Werte im folgenden Skript für Ihre Umgebung. Führen Sie das Skript auf einem Knoten aus, um den gruppierten Dienst zu konfigurieren und zu starten.

sudo crm configure
primitive <sqlServerResourceName> ocf:mssql:fci op start timeout=<timeout_in_seconds>
colocation <constraintName> inf: <virtualIPResourceName> <sqlServerResourceName>
show
commit
exit

Das folgende Skript erstellt beispielsweise eine gruppierte SQL Server-Ressource mit dem Namen mssqlha.

sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit

Nachdem Sie den Commit für die Konfiguration ausgeführt haben, wird SQL Server auf demselben Knoten wie die virtuelle IP-Ressource gestartet.

Weitere Informationen finden Sie unter Configuring and Managing Cluster Resources (Command Line) (Konfigurieren und Verwalten von Clusterressourcen (Befehlszeile)).

Stellen Sie sicher, dass SQL Server gestartet wird

Führen Sie den Befehl crm status aus, um zu überprüfen, ob SQL Server gestartet wurde:

crm status

Das folgende Beispiel zeigt die Ergebnisse, wenn Pacemaker erfolgreich als gruppierte Ressource gestartet wird.

2 nodes configured
2 resources configured

Online: [ SLES1 SLES2 ]

Full list of resources:

 admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
 mssqlha        (ocf::mssql:fci):       Started SLES1

Verwalten von Clusterressourcen

Informationen zum Verwalten von Clusterressourcen finden Sie im folgenden SUSE-Artikel: Managing Cluster Resources (Verwalten von Clusterressourcen)

Manuelles Failover

Obwohl Ressourcen so konfiguriert sind, dass bei Hardware- oder Softwarefehlern automatisch ein Failover ausgeführt oder zu anderen Clusterknoten migriert wird, können Sie sie auch manuell mithilfe der Pacemaker-GUI oder der Befehlszeile verschieben.

Verwenden Sie den migrate Befehl für diese Aufgabe. Um beispielsweise die SQL-Ressource zu einem Clusterknoten mit dem Namen SLES2zu migrieren, führen Sie Folgendes aus:

crm resource
migrate mssqlha SLES2