Tutorial: Einrichten einer Always On-Verfügbarkeitsgruppe mit drei Knoten mit HPE Serviceguard für Linux

Gilt für:SQL Server – Linux

In diesem Tutorial wird erläutert, wie Sie SQL Server-Verfügbarkeitsgruppen mit HPE Serviceguard für Linux konfigurieren, die auf lokalen oder Azure-basierten virtuellen Computern ausgeführt werden.

Eine Übersicht über die HPE Serviceguard-Cluster finden Sie unter HPE Serviceguard-Cluster.

Hinweis

Microsoft unterstützt die Datenverschiebung, die Verfügbarkeitsgruppe und die SQL Server-Komponente. Wenden Sie sich an HPE, um Unterstützung im Zusammenhang mit der Dokumentation der HPE Serviceguard-Clusterverwaltung und -Quorumverwaltung zu erhalten

Dieses Tutorial umfasst die folgenden Aufgaben:

  • SQL Server auf allen drei VMs installieren, die Teil der Verfügbarkeitsgruppe sind
  • HPE Serviceguard auf den VMs installieren
  • HPE-Serviceguard-Cluster erstellen
  • Erstellen des Lastenausgleichs im Azure-Portal
  • Verfügbarkeitsgruppe erstellen und eine Beispieldatenbank zur Verfügbarkeitsgruppe hinzufügen
  • Die SQL Server-Arbeitsauslastung in der Verfügbarkeitsgruppe über den Serviceguard-Cluster-Manager bereitstellen
  • Ein automatisches Failover ausführen und den Knoten mit dem Cluster verknüpfen

Voraussetzungen

  • Erstellen Sie in Azure drei Linux-basierte VMs. Informationen zum Erstellen von Linux-basierten VMs in Azure finden Sie im Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Stellen Sie beim Bereitstellen der VMs sicher, dass von HPE Serviceguard unterstützte Linux-Distributionen verwendet werden. Sie können die VMs auch lokal in einer lokalen Umgebung bereitstellen, wenn Sie dies bevorzugen.

    Ein Beispiel für eine unterstützte Distribution finden Sie unter HPE Serviceguard für Linux. Wenden Sie sich an HPE, wenn Sie weitere Informationen zur Unterstützung öffentlicher Cloudumgebungen benötigen.

    Die Anweisungen in diesem Tutorial werden auf der Seite „HPE Serviceguard für Linux“ überprüft. Eine Testversion kann über HPE heruntergeladen werden.

  • SQL Server-Datenbankdateien zum Einbinden des Logical Volume (LVM) für alle VMs. Weitere Informationen finden Sie unter Quick start guide for Serviceguard Linux (HPE) (Schnellstartleitfaden für Serviceguard für Linux (HPE)).

  • Stellen Sie sicher, dass auf den VMs eine OpenJDK-Java-Runtime installiert ist. Das IBM Java SDK wird nicht unterstützt.

Installieren von SQL Server

Führen Sie auf allen drei VMs einen der unten aufgeführten Schritte basierend auf der Linux-Distribution aus, die Sie für dieses Tutorial ausgewählt haben, um SQL Server und die Tools zu installieren.

Red Hat Enterprise Linux (RHEL)

SUSE Linux Enterprise Server (SLES)

Nachdem Sie diesen Schritt ausgeführt haben, sollten Sie den SQL Server-Dienst und die Tools auf allen drei VMs installiert haben, die an der Verfügbarkeitsgruppe teilnehmen sollen.

Installieren von HPE Serviceguard auf den VMs

In diesem Schritt installieren Sie HPE Serviceguard für Linux auf allen drei VMs. In der folgenden Tabelle werden die Rollen beschrieben, die jeder Server im Cluster hat.

Number of VMs (Anzahl von VMs) HPE Serviceguard-Rolle Replikatrolle der Microsoft SQL Server-Verfügbarkeitsgruppe
1 HPE Serviceguard-Clusterknoten Primäres Replikat
Mindestens 1 HPE Serviceguard-Clusterknoten Sekundäres Replikat
1 HPE Serviceguard-Quorumserver Konfigurationsreplikat

Hinweis

In diesem Video von HPE erfahren Sie, wie Sie einen HPE Serviceguard Cluster über die Benutzeroberfläche installieren und konfigurieren.

Verwenden Sie die cminstaller-Methode, um Serviceguard zu installieren. Spezifische Anweisungen finden Sie unter den folgenden Links:

Nach Abschluss der Installation des HPE Serviceguard-Clusters können Sie das Clusterverwaltungsportal auf dem TCP-Port 5522 auf dem primären Replikatknoten aktivieren. Mit den folgenden Schritten wird der Firewall eine Regel hinzugefügt, um 5522 zuzulassen. Der folgende Befehl gilt für Red Hat Enterprise Linux (RHEL). Sie müssen ähnliche Befehle für andere Distributionen ausführen:

sudo firewall-cmd --zone=public --add-port=5522/tcp --permanent
sudo firewall-cmd --reload

Erstellen eines HPE Serviceguard-Clusters

Halten Sie sich an die folgenden Anweisungen, um den HPE Serviceguard-Cluster zu konfigurieren und zu erstellen. In diesem Schritt wird auch der Quorumserver konfiguriert.

  1. Configure the Serviceguard quorum server on the third node (Konfigurieren des Serviceguard-Quorumservers auf dem dritten Knoten). Weitere Informationen finden Sie im Abschnitt Configure_QS.
  2. Configure and create Serviceguard cluster on the other two nodes (Konfigurieren und Erstellen des Serviceguard-Clusters auf den beiden anderen Knoten). Weitere Informationen finden Sie im Abschnitt Configure_and_create_Cluster.

Hinweis

Sie können die manuelle Installation Ihres HPE Serviceguard-Clusters und Quorums umgehen, indem Sie die HPE SGLX-Erweiterung (HPE Serviceguard für Linux) aus dem Azure-VM-Marketplace hinzufügen, wenn Sie Ihren virtuellen Computer erstellen.

Erstellen der Verfügbarkeitsgruppe und Hinzufügen einer Beispieldatenbank

Erstellen Sie in diesem Schritt eine Verfügbarkeitsgruppe mit mindestens zwei synchronen Replikaten und einem Konfigurationsreplikat. Dadurch kann der Schutz von Daten gewährleistet und ggf. auch Hochverfügbarkeit bereitgestellt werden. Das folgende Diagramm veranschaulicht diese Architektur:

Screenshot showing how the primary replica synchronizes user data and configuration data with the secondary replica. The primary replica only synchronizes configuration data with the configuration only replica. The configuration only replica doesn't have user data replicas.

  1. Eine synchrone Replikation von Benutzerdaten wird auf einem sekundären Replikat ausgeführt. Dieser Vorgang schließt auch Metadaten zur Konfiguration der Verfügbarkeitsgruppe ein.

  2. Eine synchrone Replikation von Metadaten zur Konfiguration der Verfügbarkeitsgruppe wird ausgeführt. Benutzerdaten sind nicht enthalten.

Weitere Informationen finden Sie unter Zwei synchrone Replikate und ein Konfigurationsreplikat.

Führen Sie die folgenden Schritte aus, um die Verfügbarkeitsgruppe zu erstellen:

  1. Aktivieren von Verfügbarkeitsgruppen und Neustarten von mssql-server auf allen VMs, einschließlich des Konfigurationsreplikats
  2. Aktivieren einer AlwaysOn_health-Ereignissitzung (optional)
  3. Erstellen eines Zertifikats auf der primären VM
  4. Erstellen des Zertifikats auf sekundären Servern
  5. Erstellen der Datenbankspiegelungsendpunkte auf allen Replikaten
  6. Erstellen einer Verfügbarkeitsgruppe
  7. Verknüpfen der sekundären Replikate
  8. Hinzufügen einer Datenbank zu einer Verfügbarkeitsgruppe

Aktivieren von Verfügbarkeitsgruppen und Neustarten von mssql-server

Aktivieren Sie Verfügbarkeitsgruppen auf allen Knoten, die eine SQL Server-Instanz hosten. Starten Sie dann „mssql-server“ neu. Führen Sie das folgende Skript auf allen drei Knoten aus:

sudo /opt/mssql/bin/mssql-conf
set hadr.hadrenabled 1 sudo systemctl restart mssql-server

Aktivieren einer AlwaysOn_health-Ereignissitzung (optional)

Optional können Sie erweiterte Ereignisse der Always On-Verfügbarkeitsgruppen aktivieren, die Ihnen bei der Ursachendiagnose helfen, wenn Sie Probleme in einer Verfügbarkeitsgruppe beheben. Führen Sie auf jeder SQL Server-Instanz den folgenden Befehl aus:

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

Erstellen eines Zertifikats auf der primären VM

Das folgende Transact-SQL-Skript erstellt einen Hauptschlüssel und ein Zertifikat. Anschließend werden das Zertifikat und die Datei mit einem privaten Schlüssel gesichert. Aktualisieren Sie das Skript durch sichere Kennwörter. Stellen Sie eine Verbindung mit der primären SQL Server-Instanz her, und führen Sie das folgende Transact-SQL-Skript aus:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';

BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY
    ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
      ENCRYPTION BY PASSWORD = '<Private_Key_Password>' );

Zu diesem Zeitpunkt weist das primäre SQL Server-Replikat ein Zertifikat unter /var/opt/mssql/data/dbm_certificate.cer und einen privaten Schlüssel unter var/opt/mssql/data/dbm_certificate.pvk auf. Kopieren Sie diese beiden Dateien auf allen Servern, die Verfügbarkeitsreplikate hosten werden, an den gleichen Speicherort. Verwenden Sie den*die mssql-Benutzer*in, oder erteilen Sie dem*r mssql-Benutzer*in Berechtigungen, um auf diese Dateien zuzugreifen.

Der folgende Befehl kopiert z.B. auf dem Quellserver die Dateien auf den Zielcomputer. Ersetzen Sie die node2-Werte durch den Namen des Hosts, auf dem die sekundäre SQL Server-Instanz ausgeführt wird. Kopieren Sie das Zertifikat auch für das Konfigurationsreplikat, und führen Sie die unten aufgeführten Befehle auch auf diesem Knoten aus.

cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/

Führen Sie jetzt auf den sekundären VMs, auf denen die sekundäre Instanz und das Konfigurationsreplikat von SQL Server ausgeführt werden, die folgenden Befehle aus, sodass der*die mssql-Benutzer*in das kopierte Zertifikat besitzen kann:

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

Erstellen des Zertifikats auf sekundären Servern

Das folgende Transact-SQL-Skript erstellt einen Hauptschlüssel und ein Zertifikat aus der Sicherung, die Sie auf dem primären SQL Server-Replikat erstellt haben. Aktualisieren Sie das Skript durch sichere Kennwörter. Das Entschlüsselungskennwort ist das gleiche Kennwort, mit dem Sie die PVK-Datei in einem vorherigen Schritt erstellt haben. Führen Sie das folgende Skript auf allen sekundären Servern mit Ausnahme des Konfigurationsreplikats aus, um das Zertifikat zu erstellen:

CREATE MASTER KEY ENCRYPTION BY PASSWORD =
'<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate FROM FILE =
'/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
DECRYPTION BY PASSWORD = '<Private_Key_Password>' );

Erstellen der Datenbankspiegelungsendpunkte auf allen Replikaten

Führen Sie auf dem primären und dem sekundären Replikat die folgenden Befehle zum Erstellen der Datenbankspiegelungsendpunkte aus:

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING
        (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

Hinweis

5022 ist der Standardport, der für den Datenbankspiegelungsendpunkt verwendet wird. Sie können ihn in jeden verfügbaren Port ändern.

Erstellen Sie auf dem Konfigurationsreplikat den Datenbankspiegelungsendpunkt mit dem unten angegebenen Befehl. Beachten Sie, dass der Wert für die Rolle hier auf WITNESS festgelegt ist, so wie für das Konfigurationsreplikat erforderlich.

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

Erstellen der Verfügbarkeitsgruppe

Führen Sie die folgenden Befehle in der primären Replikatinstanz aus. Diese Befehle erstellen eine Verfügbarkeitsgruppe mit dem Namen ag1, für die cluster_type auf EXTERNAL festgelegt ist und die der Verfügbarkeitsgruppe die Berechtigung zum Erstellen von Datenbanken gewährt.

Ersetzen Sie vor dem Ausführen der folgenden Skripts die Platzhalter <node1>, <node2> und <node3> (Konfigurationsreplikat) durch den Namen der VMs, die Sie in den vorherigen Schritten erstellt haben.

CREATE AVAILABILITY GROUP [ag1]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR REPLICA ON
    N'<node1>' WITH (
        ENDPOINT_URL = N'tcp://<node1>:<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),

    N'<node2>' WITH (
        ENDPOINT_URL = N'tcp://<node2>:\<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    
    N'<node3>' WITH (
        ENDPOINT_URL = N'tcp://<node3>:<5022>',
        AVAILABILITY_MODE = CONFIGURATION_ONLY
        );
          
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Verknüpfen der sekundären Replikate

Führen Sie die folgenden Befehle auf allen sekundären Replikaten aus. Diese Befehle verknüpfen die sekundären Replikate mit der Verfügbarkeitsgruppe ag1 mit dem primären Replikat und stellen der Verfügbarkeitsgruppe ag1 Zugriff zum Erstellen von Datenbanken bereit.

ALTER AVAILABILITY GROUP [ag1]
JOIN WITH (CLUSTER_TYPE = EXTERNAL);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO

Hinzufügen einer Datenbank zu einer Verfügbarkeitsgruppe

Stellen Sie eine Verbindung mit dem primären Replikat her, und führen Sie die folgenden T-SQL-Befehle aus, um folgende Schritte auszuführen:

  1. Erstellen Sie eine Beispieldatenbank mit dem Namen db1, die zur Verfügbarkeitsgruppe hinzugefügt wird.
  2. Legen Sie das Wiederherstellungsmodell der Datenbank auf „Vollständig“ fest. Alle Datenbanken in einer Verfügbarkeitsgruppe erfordern das vollständige Wiederherstellungsmodell.
  3. Sichern Sie die Datenbank. Eine Datenbank erfordert mindestens eine vollständige Sicherung, bevor Sie diese zu einer Verfügbarkeitsgruppe hinzufügen können.
-- creates a database named db1
CREATE DATABASE [db1];
GO

-- set the database in full recovery model
ALTER DATABASE [db1] SET RECOVERY FULL; 
GO

-- backs up the database to disk
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

-- adds the database db1 to the AG
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
GO

Nachdem Sie die vorherigen Schritte erfolgreich ausgeführt haben, sehen Sie, dass eine Verfügbarkeitsgruppe ag1 erstellt wurde und die drei VMs als Replikat mit einem primären Replikat, einem sekundären Replikat und einem Konfigurationsreplikat hinzugefügt werden. ag1 enthält eine Datenbank.

Bereitstellen der Arbeitsauslastung für die SQL Server-Verfügbarkeitsgruppe (HPE Cluster-Manager)

Stellen Sie in HPE Serviceguard die SQL Server-Arbeitsauslastung in der Verfügbarkeitsgruppe über die Benutzeroberfläche des Serviceguard-Cluster-Managers bereit.

Stellen Sie die Arbeitsauslastung der Verfügbarkeitsgruppe bereit, und aktivieren Sie die Hochverfügbarkeit und die Notfallwiederherstellung (DR) über den Serviceguard-Cluster mithilfe der Serviceguard manager graphical user interface (grafischen Benutzeroberfläche des Serviceguard-Managers). Weitere Informationen finden Sie im Abschnitt Schützen von Microsoft SQL Server für Linux für Always On-Verfügbarkeitsgruppen.

Erstellen des Lastenausgleichs im Azure-Portal

Für Bereitstellungen in der Azure-Cloud erfordert HPE Serviceguard für Linux einen Lastenausgleich, um Clientverbindungen mit dem primären Replikat zu ermöglichen und herkömmliche IP-Adressen zu ersetzen.

  1. Öffnen Sie im Azure-Portal die Ressourcengruppe mit den Serviceguard-Clusterknoten oder virtuellen Computern.

  2. Wählen Sie in der Ressourcengruppe Hinzufügen aus.

  3. Suchen Sie nach „Lastenausgleich“, und wählen Sie dann in den Suchergebnissen den von Microsoft veröffentlichten Lastenausgleich aus.

  4. Wählen Sie auf dem Blatt Lastenausgleich die Option Erstellen aus.

  5. Konfigurieren Sie den Lastenausgleich wie folgt:

    Einstellung Wert
    Name Name des Lastenausgleichs. Beispiel: SQLAvailabilityGroupLB.
    Typ Intern
    SKU „Basic“ oder „Standard“
    Virtuelles Netzwerk Für die VM-Replikate verwendetes VNet
    Subnetz Subnetz, in dem SQL Server-Instanzen gehostet werden
    IP-Adresszuweisung statischen
    Private IP-Adresse Erstellen einer privaten IP-Adresse im Subnetz
    Abonnement Auswählen des betreffenden Abonnements
    Ressourcengruppe Auswählen der betroffenen Ressourcengruppe
    Location Auswählen desselben Speicherorts wie für SQL-Knoten

Konfigurieren des Back-End-Pools

Der Back-End-Pool stellt die Adressen der beiden Instanzen dar, in denen der Serviceguard-Cluster konfiguriert ist.

  1. Wählen Sie in Ihrer Ressourcengruppe den zuvor erstellten Load Balancer aus.
  2. Navigieren Sie zu Einstellungen > Back-End-Pools, und wählen Sie Hinzufügen aus, um einen Back-End-Adresspool zu erstellen.
  3. Geben Sie im Bereich Back-End-Pool hinzufügen unter Name einen Namen für den Back-End-Pool ein.
  4. Wählen Sie unter Verknüpft mit die Option Virtueller Computer aus.
  5. Wählen Sie die virtuellen Computer in der Umgebung aus, und ordnen Sie ihnen jeweils die entsprechende IP-Adresse zu.
  6. Wählen Sie Hinzufügen.

Erstellen eines Tests

Der Test definiert, wie Azure überprüft, welcher Serviceguard-Clusterknoten das primäre Replikat ist. Azure testet den Dienst auf der Grundlage der IP-Adresse an einem Port, den Sie beim Erstellen des Tests definieren.

  1. Wählen Sie im Bereich Einstellungen für Lastenausgleich die Option Integritätstests aus.

  2. Wählen Sie im Bereich Integritätstests die Option Hinzufügen aus.

  3. Verwenden Sie dabei die folgenden Werte:

    Einstellung Wert
    Name Name für den Test. Beispiel: SQLAGPrimaryReplicaProbe.
    Protokoll TCP
    Port Sie können jeden verfügbaren Port verwenden. Beispiel: 59999.
    Intervall 5
    Fehlerhafter Schwellenwert 2
  4. Klicken Sie auf OK.

  5. Melden Sie sich bei allen Ihren virtuellen Computern an, und öffnen Sie den Testport mithilfe der folgenden Befehle:

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure erstellt den Test und verwendet ihn dann, um den Serviceguard-Knoten zu testen, auf dem die primäre Replikatinstanz der Verfügbarkeitsgruppe ausgeführt wird. Denken Sie an den konfigurierten Port (59999), der für die Bereitstellung der Verfügbarkeitsgruppe im Serviceguard-Cluster erforderlich ist.

Festlegen der Lastenausgleichsregeln

Die Lastenausgleichsregeln konfigurieren, wie der Lastenausgleich Datenverkehr an den Serviceguard-Knoten weiterleitet, der das primäre Replikat im Cluster ist. Aktivieren Sie für diesen Lastenausgleich Direct Server Return, da jeweils nur ein Serviceguard-Clusterknoten ein primäres Replikat sein kann.

  1. Wählen Sie im Bereich Einstellungen für Lastenausgleich die Option Lastenausgleichsregeln aus.

  2. Wählen Sie im Bereich Lastenausgleichsregeln die Option Hinzufügen aus.

  3. Konfigurieren Sie die Lastenausgleichsregel mit den folgenden Einstellungen:

    Einstellung Wert
    Name Name für die Lastenausgleichsregeln. Beispiel: SQLAGPrimaryReplicaListener.
    Protokoll TCP
    Port 1433
    Back-End-Port 1433. Dieser Wert wird ignoriert, da diese Regel eine Floating IP verwendet.
    Test Verwenden Sie den Namen des Tests, den Sie für diesen Load Balancer erstellt haben.
    Sitzungspersistenz Keine
    Leerlaufzeitüberschreitung (Minuten) 4
    Floating IP Aktiviert
  4. Klicken Sie auf OK.

  5. Azure konfiguriert die Lastenausgleichsregel. Jetzt ist der Lastenausgleich so konfiguriert, dass Datenverkehr an den Serviceguard-Knoten weitergeleitet wird, der die primäre Replikatinstanz im Cluster ist.

Notieren Sie sich die Front-End-IP-Adresse „LbReadWriteIP“ des Lastenausgleichs, die für die Bereitstellung der Verfügbarkeitsgruppe im Serviceguard-Cluster erforderlich ist.

Die Ressourcengruppe verfügt nun über einen mit allen Serviceguard-Computern verbundenen Lastenausgleich. Der Lastenausgleich enthält auch eine IP-Adresse für die Clients, um eine Verbindung mit der primären Replikatinstanz im Cluster herzustellen, sodass jeder Computer, der ein primäres Replikat ist, auf Anforderungen für die Verfügbarkeitsgruppe reagieren kann.

Ein automatisches Failover ausführen und den Knoten mit dem Cluster verknüpfen

Zum Testen des automatischen Failovers können Sie das primäre Replikat herunterfahren (ausschalten). Dadurch wird die plötzliche Nichtverfügbarkeit des primären Knotens repliziert. Das erwartete Verhalten sieht wie folgt aus:

  1. Der Cluster-Manager stuft eines der sekundären Replikate in der Verfügbarkeitsgruppe auf „Primär“ hoch.
  2. Das fehlgeschlagene primäre Replikat wird automatisch dem Cluster beitreten, nachdem es gesichert wurde. Der Cluster-Manager stuft ihn auf das sekundäre Replikat hoch.

Informationen zu HPE Serviceguard finden Sie im Abschnitt Testing the setup for failover readiness (Testen des Setups auf Failoverbereitschaft).