Erstellen und Konfigurieren einer Verfügbarkeitsgruppe für SQL Server für Linux

Gilt für:SQL Server unter Linux

In diesem Lernprogramm wird gezeigt, wie Sie eine Verfügbarkeitsgruppe (AG) für SQL Server unter Linux erstellen und konfigurieren. Im Gegensatz zu SQL Server 2016 (13.x) und früheren Versionen unter Windows können Sie eine Verfügbarkeitsgruppe aktivieren, ohne zuvor den zugrunde liegenden Pacemaker-Cluster erstellen zu müssen. Die Integration mit dem Cluster erfolgt bei Bedarf später.

Im Tutorial werden die folgenden Aufgaben behandelt:

  • Aktivieren von Verfügbarkeitsgruppen
  • Erstellen von Verfügbarkeitsgruppenendpunkten und -zertifikaten
  • Verwenden von SQL Server Management Studio (SSMS) oder Transact-SQL zum Erstellen einer Verfügbarkeitsgruppe
  • Erstellen des SQL Server-Anmeldenamens und der Berechtigungen für Pacemaker
  • Erstellen von Verfügbarkeitsgruppenressourcen in einem Pacemaker-Cluster (nur externer Typ)

Voraussetzungen

Setzen Sie den Pacemaker-Hochverfügbarkeitscluster ein. Weitere Informationen finden Sie unter Deploy a Pacemaker cluster for SQL Server für Linux.

Aktivieren der Verfügbarkeitsgruppenfunktion

Anders als unter Windows können Sie PowerShell oder SQL Server-Konfigurations-Manager nicht verwenden, um die Verfügbarkeitsgruppenfunktion (AG) zu aktivieren. Unter Linux können Sie das Verfügbarkeitsgruppenfeature auf zwei Arten aktivieren: Verwenden Sie das mssql-conf Hilfsprogramm, oder bearbeiten Sie die mssql.conf Datei manuell.

Important

Sie müssen das AG-Feature für nur Konfigurationsreplikate aktivieren, auch in SQL Server Express.

Nutzen Sie das mssql-conf Dienstprogramm

Führen Sie in einer Eingabeaufforderung den folgenden Befehl aus:

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

Bearbeiten der mssql.conf-Datei

Sie können die mssql.conf Datei auch ändern, die sich unter dem /var/opt/mssql Ordner befindet. Fügen Sie die folgenden Zeilen hinzu:

[hadr]

hadr.hadrenabled = 1

SQL Server neu starten

Nach dem Aktivieren von Verfügbarkeitsgruppen müssen Sie SQL Server neu starten. Verwenden Sie den folgenden Befehl:

sudo systemctl restart mssql-server

Erstellen der Verfügbarkeitsgruppenendpunkte und -zertifikate

Eine Verfügbarkeitsgruppe verwendet TCP-Endpunkte für die Kommunikation. Unter Linux unterstützt SQL Server Endpunkte für eine AG nur, wenn Sie Zertifikate für die Authentifizierung verwenden. Sie müssen das Zertifikat von einer Instanz auf allen anderen Instanzen wiederherstellen, die als Repliken in derselben Verfügbarkeitsgruppe teilnehmen. Sie benötigen den Zertifikatsprozess auch für ein reines Konfigurationsreplikat.

Du kannst Endpunkte nur mit Transact-SQL erstellen und Zertifikate wiederherstellen. Sie können auch Nicht-SQL Server-generierte Zertifikate verwenden. Außerdem benötigen Sie einen Prozess zum Verwalten und Ersetzen von Zertifikaten, die ablaufen.

Important

Wenn Sie den SQL Server Management Studio-Assistenten zum Erstellen der Verfügbarkeitsgruppe verwenden möchten, müssen Sie die Zertifikate mithilfe von Transact-SQL unter Linux erstellen und wiederherstellen.

Vollständige Syntax zu den optionen, die für die verschiedenen Befehle (einschließlich Sicherheit) verfügbar sind, finden Sie unter:

Note

Obwohl du eine Verfügbarkeitsgruppe erstellst, verwendet FOR DATABASE_MIRRORINGder Endpunkttyp , weil der Endpunkttyp zugrundeliegende Aspekte mit dieser inzwischen veralteten Funktion teilt.

In diesem Beispiel werden Zertifikate für eine Konfiguration mit drei Knoten erstellt. Die Instanznamen sind LinAGN1, LinAGN2 und LinAGN3.

  1. Führen Sie auf LinAGN1 das folgende Skript aus, um den Hauptschlüssel, das Zertifikat und den Endpunkt zu erstellen, und sichern Sie das Zertifikat. In diesem Beispiel verwendet der Endpunkt den typischen TCP-Port 5022.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
    WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN1_Cert,
        ROLE = ALL
    );
    GO
    
  2. Machen Sie das Gleiche auf LinAGN2:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL
    );
    GO
    
  3. Führen Sie schließlich die gleiche Sequenz auf LinAGN3 aus:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN3_Cert,
        ROLE = ALL
    );
    GO
    
  4. Nutze scp oder ein anderes Tool, um die Backups des Zertifikats auf jeden Knoten zu kopieren, zu dem du Teil der AG haben möchtest.

    In diesem Beispiel:

    • Kopieren Sie LinAGN1_Cert.cer in LinAGN2 und LinAGN3.
    • Kopieren Sie LinAGN2_Cert.cer in LinAGN1 und LinAGN3.
    • Kopieren Sie LinAGN3_Cert.cer in LinAGN1 und LinAGN2.
  5. Ändern Sie den Besitzer und die Gruppe, die mit den kopierten Zertifikatsdateien verbunden sind, auf mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Erstellen Sie die Anmeldenamen auf Instanzebene und die Benutzer, die LinAGN2 und LinAGN3 auf LinAGN1 zugeordnet sind.

    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    

    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.

  7. Stellen Sie LinAGN2_Cert und LinAGN3_Cert auf LinAGN1 wieder her. Die Zertifikate der anderen Repliken sind für die Kommunikation und Sicherheit der AGs unerlässlich.

    CREATE CERTIFICATE LinAGN2_Cert
        AUTHORIZATION LinAGN2_User
        FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        AUTHORIZATION LinAGN3_User
        FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. Erteilen Sie den Anmeldungen, die LinAGN2 und LinAGN3 zugeordnet sind, die Berechtigung, sich mit dem Endpunkt auf LinAGN1 zu verbinden.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  9. Erstellen Sie die Anmeldenamen auf Instanzebene und die Benutzer, die LinAGN1 und LinAGN3 auf LinAGN2 zugeordnet sind.

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    
  10. Stellen Sie LinAGN1_Cert und LinAGN3_Cert auf LinAGN2 wieder her.

    CREATE CERTIFICATE LinAGN1_Cert
        AUTHORIZATION LinAGN1_User
        FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        AUTHORIZATION LinAGN3_User
        FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. Erteilen Sie den Anmeldungen, die LinAGN1 und LinAGN3 zugeordnet sind, die Berechtigung, sich mit dem Endpunkt auf LinAGN2 zu verbinden.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Erstellen Sie die Anmeldenamen auf Instanzebene und die Benutzer, die LinAGN1 und LinAGN2 auf LinAGN3 zugeordnet sind.

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
  13. Stellen Sie LinAGN1_Cert und LinAGN2_Cert auf LinAGN3 wieder her.

    CREATE CERTIFICATE LinAGN1_Cert
        AUTHORIZATION LinAGN1_User
        FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
        AUTHORIZATION LinAGN2_User
        FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. Erteilen Sie den Anmeldungen, die LinAGN1 und LinAGN2 zugeordnet sind, die Berechtigung, sich mit dem Endpunkt auf LinAGN3 zu verbinden.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Erstellen der Verfügbarkeitsgruppe

In diesem Abschnitt wird gezeigt, wie Sie SQL Server Management Studio (SSMS) oder Transact-SQL verwenden, um die Verfügbarkeitsgruppe für SQL Server zu erstellen.

Verwenden Sie SQL Server Management Studio

Dieser Abschnitt zeigt, wie man eine AG mit einem Clustertyp External erstellt, indem man SSMS mit dem New Availability Group Wizard verwendet.

  1. Erweitern Sie in SSMS Hochverfügbarkeit mit Always On, klicken Sie mit der rechten Maustaste auf Verfügbarkeitsgruppen, und wählen Sie dann Assistent für neue Verfügbarkeitsgruppen aus.

  2. Im Einführungsdialog wählen Sie Nächstes aus.

  3. Geben Sie im Dialogfeld 'Verfügbarkeitsgruppenoptionen angeben' einen Namen für die AG ein, und wählen Sie einen Clustertyp EXTERNAL oder NONE in der Dropdownliste aus. Verwenden Sie EXTERNAL, wenn Sie Pacemaker bereitstellen. Verwenden Sie NONE für spezielle Szenarien, wie z. B. horizontales Skalieren beim Lesen. Die Auswahl der Option für die Zustandsüberwachung auf Datenbankebene ist optional. Weitere Informationen zu dieser Option finden Sie unter Failover-Option für die Zustandsüberwachung auf Datenbankebene in Verfügbarkeitsgruppen. Wählen Sie Weiteraus.

    Screenshot von „Verfügbarkeitsgruppe erstellen“, der den Clustertyp zeigt.

  4. Im Dialogfeld "Datenbanken auswählen" wählen Sie die Datenbanken aus, an denen Sie an der AG teilnehmen möchten. Jede Datenbank muss über eine vollständige Sicherung verfügen, bevor Sie sie einer AG hinzufügen können. Wählen Sie Weiteraus.

  5. Im Dialog Replicas angeben wählen Sie Replica hinzufügen.

  6. Im Dialog "Zum Server verbinden" geben Sie den Namen der Linux-Instanz von SQL Server für die sekundäre Replik sowie die Zugangsdaten für die Verbindung ein. Wählen Sie Verbinden aus.

  7. Wiederholen Sie die vorherigen beiden Schritte für die Instanz, die ein Replikat im Modus „Nur Konfiguration“ oder ein anderes sekundäres Replikat enthalten soll.

  8. Alle drei Instanzen erscheinen im Dialog "Replicas angeben ". Wenn du einen Cluster-Typ von Extern verwendest, stelle für die sekundäre Replik, die eine echte sekundäre ist, sicher, dass der Verfügbarkeitsmodus mit dem der primären Replik übereinstimmt, und setze den Failover-Modus auf Extern. Wählen Sie für das nur zur Konfiguration verwendete Replikat den Verfügbarkeitsmodus "Nur Konfiguration" aus.

    Das folgende Beispiel zeigt eine Verfügbarkeitsgruppe mit zwei Replikaten, den Clustertyp „Extern“ und ein Replikat im Modus „Nur Konfiguration“.

    Screenshot von „Verfügbarkeitsgruppe erstellen“, der die Option für das lesbare sekundäre Replikat zeigt.

    Das folgende Beispiel zeigt eine Verfügbarkeitsgruppe mit zwei Replikaten, den Clustertyp „Keine“ und ein Replikat im Modus „Nur Konfiguration“.

    Screenshot von „Verfügbarkeitsgruppe erstellen“, der die Seite „Replikate“ zeigt.

  9. Wenn du die Backup-Einstellungen ändern möchtest, wähle den Reiter Backup-Einstellungen aus. Weitere Informationen zu Backup-Präferenzen mit AGs finden Sie unter Backups konfigurieren auf sekundären Repliken einer Always On-Verfügbarkeitsgruppe.

  10. Wenn Sie lesbare Sekundärinstanzen verwenden oder eine Verfügbarkeitsgruppe mit dem Clustertyp „Keine“ für Read-Scale erstellen, können Sie einen Listener erstellen, indem Sie die Registerkarte Listener auswählen. Sie können einen Listener auch später hinzufügen. Um einen Zuhörer zu erstellen, wählen Sie die Option "Einen Verfügbarkeitsgruppen-Listener erstellen " und geben Sie einen Namen, einen TCP/IP-Port sowie die Verwendung einer statischen oder automatisch zugewiesenen DHCP-IP-Adresse ein. Für einen AG mit einem Clustertyp None verwenden Sie eine statische IP, die mit der IP-Adresse des Primäranbieters übereinstimmt.

    Screenshot von „Verfügbarkeitsgruppe erstellen“, der die Option „Listener“ zeigt.

  11. Wenn du einen Listener für lesbare Szenarien erstellst, erlaubt SSMS die Erstellung von Nur-Lese-Routing im Wizard. Du kannst es später auch mit SSMS oder Transact-SQL hinzufügen. So fügen Sie das schreibgeschützte Routing jetzt hinzu:

    1. Wählen Sie den ReiterRead-Only Routing .

    2. Geben Sie die URLs für die schreibgeschützten Replikate ein. Diese URLs ähneln den Endpunkten, mit dem Unterschied, dass sie anstelle des Endpunkts den Port der Instanz verwenden.

      1. Wählen Sie die einzelnen URLs und weiter unten die lesbaren Replikate aus. Um mehrere Elemente auszuwählen, halten Sie die Umschalt-Taste gedrückt oder wählen Sie die Elemente durch Ziehen aus.
  12. Wählen Sie Weiteraus.

  13. Wählen Sie aus, wie die sekundären Replikate initialisiert werden sollen. Standardmäßig wird das automatische Seeding verwendet, das denselben Pfad auf allen an der Verfügbarkeitsgruppe beteiligten Server benötigt. Sie können den Assistenten nutzen, um eine Sicherung, Kopie und Wiederherstellung auszuführen (zweite Option); oder ihn beauftragen, sich zu verbinden, wenn Sie die Datenbank manuell gesichert, kopiert und auf den Replikaten wiederhergestellt haben (dritte Option); oder die Datenbank später hinzufügen (letzte Option). Wie bei Zertifikaten, wenn Sie Sicherungen manuell erstellen und kopieren, legen Sie Berechtigungen für die Sicherungsdateien für die anderen Replikate fest. Wählen Sie Weiteraus.

  14. Im Validierungsdialog , falls der Zauberer für alle Prüfungen keinen Erfolg zurückgibt, untersuchen Sie weiter. Einige Warnungen sind akzeptabel und nicht fatal, wie beispielsweise wenn Sie keinen Listener erstellen. Wählen Sie Weiteraus.

  15. Im Zusammenfassungs-Dialog wählen Sie Beenden. Der Prozess zur Erstellung der AG beginnt.

  16. Wenn die AG-Erstellung abgeschlossen ist, wählen Sie auf der ErgebnisseiteSchließen. Jetzt können Sie in der dynamischen Verwaltungssicht und unter dem Ordner „Hochverfügbarkeit mit Always On“ in SSMS die Verfügbarkeitsgruppe auf den Replikaten sehen.

Verwenden von Transact-SQL

Dieser Abschnitt zeigt Beispiele für die Erstellung einer AG mittels Transact-SQL. Sie können den Listener und das schreibgeschützte Routing nach der Erstellung der AG konfigurieren. Sie können die AG selbst mit ALTER AVAILABILITY GROUP ändern, aber Sie können den Clustertyp in SQL Server 2017 (14.x) nicht ändern. Wenn Sie keine Verfügbarkeitsgruppe mit dem Clustertyp „Extern“ erstellen wollten, müssen Sie sie löschen, und neu mit dem Clustertyp „Keine“ erstellen.

Weitere Informationen und weitere Optionen finden Sie hier:

Beispiel A: Zwei Replikate mit einem Replikat im Modus „Nur Konfiguration“ (externer Clustertyp)

Dieses Beispiel zeigt, wie Sie eine Verfügbarkeitsgruppe mit zwei Replikaten erstellen, die ein Replikat im Modus „Nur Konfiguration“ verwendet.

  1. Führen Sie die folgende Anweisung auf dem primären Replikknoten aus, der die Lese-/Schreibkopie der Datenbanken enthält. In diesem Beispiel wird das automatische Seeding verwendet.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON
    N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT
    ),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC
    ),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY
    );
    GO
    
  2. In einem Abfragefenster, das mit der anderen Replik verbunden ist, führen Sie die folgende Anweisung aus, um die Replik mit der AG zu verbinden, und beginnen Sie mit dem Seeding von der primären zur sekundären Replik.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. In einem Abfragefenster, das mit der nur konfigurationsbasierten Replik verbunden ist, führen Sie die folgende Anweisung aus, um sie mit der AG zu verbinden.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

Beispiel B: Drei Replikate mit schreibgeschütztem Routing (externer Clustertyp)

Dieses Beispiel zeigt Ihnen, wie Sie das Read-Only-Routing als Teil der initialen AG-Erstellung für drei vollständige Repliken konfigurieren können.

  1. Führen Sie die folgende Anweisung auf dem Knoten aus, der als primäres Replikat fungiert und eine vollständige Kopie der Datenbanken mit Lese- und Schreibzugriff enthält. In diesem Beispiel wird das automatische Seeding verwendet.

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    Bei dieser Konfiguration sind einige Punkte zu beachten:

    • AGName ist der Name der AG (Aktiengesellschaft).
    • DBName ist der Name der Datenbank, die Sie mit der AG verwenden. Es kann auch eine kommagetrennte Liste von Namen sein.
    • ListenerName ist ein Name, der sich von allen zugrundeliegenden Servern oder Knoten unterscheidet. Du registrierst es im DNS zusammen mit IPAddress.
    • IPAddress ist die IP-Adresse für ListenerName. Es ist auch einzigartig und passt zu keinem der Server oder Knoten. Anwendungen und Endbenutzer verwenden entweder ListenerName oder IPAddress, um eine Anbindung an die AG herzustellen.
      • SubnetMask ist die Subnetzmaske von IPAddress. In SQL Server 2019 (15.x) und früheren Versionen ist dieser Wert 255.255.255.255. In SQL Server 2022 (16.x) und höheren Versionen lautet 0.0.0.0dieser Wert .
  2. Führen Sie in einem Abfragefenster, das mit dem anderen Replikat verbunden ist, die folgende Anweisung aus, um das Replikat mit der AG zu verbinden und den Seedingprozess vom primären zum sekundären Replikat zu initiieren.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. Wiederholen Sie Schritt 2 für das dritte Replikat.

Beispiel C: Zwei Replikate mit schreibgeschütztem Routing (Clustertyp „Keine“)

Dieses Beispiel erzeugt eine Konfiguration mit zwei Repliken, die den Clustertyp None verwendet. Verwenden Sie diese Konfiguration für das Read-Scale-Szenario, bei dem Sie kein Failover erwarten. Dieser Schritt erzeugt den Listener, der die primäre Replik ist, und konfiguriert das Nur-Lese-Routing mit Round-Robin-Funktionalität.

  1. Führen Sie die folgende Anweisung auf dem Knoten aus, der als primäres Replikat fungiert und eine vollständige Kopie der Datenbanken mit Lese- und Schreibzugriff enthält. In diesem Beispiel wird das automatische Seeding verwendet.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = NONE)
    FOR DATABASE <DBName> REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
            FAILOVER_MODE = MANUAL,
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(
                ALLOW_CONNECTIONS = READ_WRITE,
                READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
            ),
            SECONDARY_ROLE(
                ALLOW_CONNECTIONS = ALL,
                READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
            )
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                     ('LinAGN1.FullyQualified.Name',
                        'LinAGN2.FullyQualified.Name')
                     )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
        ),
        LISTENER '<ListenerName>' (WITH IP = (
                 '<PrimaryReplicaIPAddress>',
                 '<SubnetMask>'),
                Port = <PortOfListener>
        );
    GO
    

    In diesem Beispiel:

    • AGName ist der Name der AG (Aktiengesellschaft).
    • DBName ist der Name der Datenbank, die Sie mit der AG verwenden. Es kann auch eine kommagetrennte Liste von Namen sein.
    • PortOfEndpoint ist die Portnummer des von dir erstellten Endpunkts.
      • PortOfInstanceist die Portnummer für die Instanz von SQL Server.
    • ListenerName ist ein Platzhalter-Name, der sich von den zugrundeliegenden Repliken unterscheidet.
    • PrimaryReplicaIPAddress ist die IP-Adresse des primären Replikats.
      • SubnetMask ist die Subnetzmaske von IPAddress. In SQL Server 2019 (15.x) und früheren Versionen ist dieser Wert 255.255.255.255. In SQL Server 2022 (16.x) und höheren Versionen lautet 0.0.0.0dieser Wert .
  2. Verknüpfen Sie das sekundäre Replikat mit der Verfügbarkeitsgruppe, und initiieren Sie das automatische Seeding.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    

Erstellen des SQL Server-Anmeldenamens und der Berechtigungen für Pacemaker

Ein Pacemaker-Cluster für Hochverfügbarkeit, der SQL Server unter Linux nutzt, hat die Anforderung an Zugriff auf die SQL Server-Instanz sowie an Berechtigungen für die Verfügbarkeitsgruppe selbst. Diese Schritte erstellen die Anmeldung und die zugehörigen Berechtigungen sowie eine Datei, die Pacemaker angibt, wie sie sich bei SQL Server authentifizieren können.

  1. Führen Sie in einem Abfragefenster, das mit dem ersten Replikat verbunden ist, das folgende Skript aus:

    CREATE LOGIN PMLogin
        WITH PASSWORD = '<password>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION
    ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. Auf Knoten 1 fügen Sie die folgenden zwei Zeilen zur /var/opt/mssql/secrets/passwd Datei hinzu:

    PMLogin
    
    <password>
    

    Du musst vielleicht deine Berechtigungen erhöhen, um sudo diese Datei zu bearbeiten.

  3. Die Datei sperren:

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    
  4. Wiederholen Sie die Schritte 1 bis 5 auf den anderen Servern, die als Replikate dienen.

Erstellen der Verfügbarkeitsgruppenressourcen im Pacemaker-Cluster (nur „Extern“)

Nachdem Sie eine AG in SQL Server erstellt haben, müssen Sie die entsprechenden Ressourcen in Pacemaker erstellen, wenn Sie einen Clustertyp "External" angeben. Eine AG benötigt zwei Ressourcen: die Verfügbarkeitsgruppenressource und eine IP-Adressressource. Das Konfigurieren der IP-Adressressource ist optional, wenn Sie keinen Listener verwenden. Es ist jedoch ratsam, wenn Sie Zuhörerfunktionen benötigen.

Die von Ihnen erstellte AG-Ressource ist ein Ressourcentyp, der als Klon bezeichnet wird. Die AG-Ressource hat Kopien auf jedem Knoten und eine kontrollierende Ressource, die als promovierte Ressource bezeichnet wird. Die beförderte Ressource entspricht dem Server, der die primäre Replik hostet. Die anderen Ressourcen beherbergen sekundäre Replikate (regulär oder nur konfigurationsfähig) und können im Rahmen eines Failovers befördert werden.

Note

In SQL Server 2025 (17.x) mit kumulativem Update (CU) 3 und höher ist Pacemaker HA Agent v2 (Preview) für Red Hat Enterprise Linux (RHEL) und Ubuntu über das mssql-server-ha Paket verfügbar. Du kannst den Pacemaker HA-Agent v2 in nicht-produktiven Einsätzen evaluieren. Der bestehende Pacemaker HA-Agent (v1) wird weiterhin vollständig für Produktionseinsätze unterstützt. Weitere Informationen finden Sie unter Pacemaker HA Agent v2 (Vorschau).

Pacemaker HA Agent v1

  1. Erstellen Sie die AG-Ressource in Pacemaker mithilfe des Pacemaker HA-Agents (v1): (ocf:mssql:ag)

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s promotable notify=true
    

    In diesem Beispiel ist NameForAGResource der eindeutige Name, den Sie dieser Clusterressource für die AG zuweisen, und AGName ist der Name der AG, die Sie erstellt haben.

  2. Erstellen Sie die IP-Adressressource für das Application Gateway (AG), die Sie der Listener-Funktionalität zuordnen.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    In diesem Beispiel steht NameForIPResource für den eindeutigen Namen der IP-Ressource, und IPAddress ist die statische IP-Adresse, die Sie der Ressource zuweisen.

  3. Um sicherzustellen, dass die IP-Adresse und die AG-Ressource auf demselben Knoten ausgeführt werden, konfigurieren Sie eine Colocation-Einschränkung.

    sudo pcs constraint colocation add <NameForIPResource> with promoted <NameForAGResource>-clone INFINITY
    

    In diesem Beispiel NameForIPResource ist der Name der IP-Ressource und NameForAGResource der Name für die AG-Ressource.

  4. Erstelle eine Ordnungsbedingung, um sicherzustellen, dass die AG-Ressource vor der IP-Adresse läuft. Während die Colocation-Einschränkung eine Sortiereinschränkung impliziert, erzwingt dieser Schritt sie.

    sudo pcs constraint order promote <NameForAGResource>-clone then start <NameForIPResource>
    

    In diesem Beispiel NameForIPResource ist der Name der IP-Ressource und NameForAGResource der Name für die AG-Ressource.

Pacemaker HA Agent v2 (Vorschau)

Der Herzschrittmacher-HA-Agent v2 verwendet eine dienstbasierte Architektur. Der Agent arbeitet als deditierter Systemdienst namens mssql-pcsag, der für die SQL Server-spezifische Hochverfügbarkeitsoperationen und die Kommunikation mit Pacemaker verantwortlich ist.

Sie verwalten den mssql-pcsag Service durch standardisierte Systemservice-Steuerungen. Starten, stoppen, neu starten und den Status dieses Dienstes nach Bedarf mit den folgenden Befehlen überprüfen:

sudo systemctl start mssql-pcsag  # Start the Pacemaker HA agent v2 (mssql-pcsag) service
sudo systemctl stop mssql-pcsag  # Stop the Pacemaker HA agent v2 (mssql-pcsag) service
sudo systemctl restart mssql-pcsag  # Restart the Pacemaker HA agent v2 (mssql-pcsag) service
sudo systemctl status mssql-pcsag  # Check the status of the Pacemaker HA agent v2 (mssql-pcsag) service

Pacemaker interagiert über den mssql-pcsag Dienst mit SQL Server-Verfügbarkeitsgruppen. Damit verfügbarkeitsgruppenüberwachung und Failover ordnungsgemäß funktionieren:

  • Der Pacemaker-Cluster muss ausgeführt werden.
  • Der mssql-pcsag Dienst muss ausgeführt werden.

Obwohl Pacemaker und mssql-pcsag separate Komponenten sind, arbeiten sie zur Laufzeit zusammen. Wenn entweder der Pacemaker oder der Service mssql-pcsag stoppt, funktionieren die Failover-Operationen der Verfügbarkeitsgruppe nicht wie erwartet.

Note

Durch den Neustart des mssql-pcsag Diensts wird SQL Server nicht neu gestartet. Ebenso startet der Neustart von SQL Server den Pacemaker HA-Agent nicht automatisch neu. Überprüfen Sie, ob beide Dienste während der Problembehandlung ausgeführt werden.

Pacemaker HA Agent v2 führt Zuverlässigkeits- und Leistungsverbesserungen gegenüber dem vorherigen Agenten ein, darunter:

  • Verbesserte Failoverleistung, um geplante und ungeplante Failoverzeiten zu reduzieren.

  • Unterstützung für flexible automatische Failover-Richtlinien, einschließlich Konfiguration der Ausfallbedingungsebene und des Timeouts zur Gesundheitsprüfung.

    Beispiel: Die folgende Transact-SQL Anweisung ändert die Fehlerbedingungsebene einer vorhandenen Verfügbarkeitsgruppe mit dem Namen AG1 auf Ebene 2:

    ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 2);
    

    Beispiel: Die folgende Transact-SQL-Anweisung ändert den Timeoutschwellenwert für die Integritätsprüfung einer vorhandenen Verfügbarkeitsgruppe mit dem Namen AG1 auf 60.000 Millisekunden (60 Sekunden).

    ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);
    

    Beispiel: Nach dem Anwenden der Konfiguration verwenden Sie die folgende Transact-SQL-Anweisung, um die konfigurierte Fehlerzustandsstufe und das Integritätsprüfungs-Timeout für Verfügbarkeitsgruppen zu überprüfen.

    SELECT failure_condition_level,
           health_check_timeout
    FROM sys.availability_groups;
    
  • Unterstützung für TLS 1.3 für die Kommunikation zwischen dem Pacemaker-Cluster und SQL Server.

  1. Erstellen Sie die AG-Ressource in Pacemaker mithilfe des Pacemaker HA-Agents v2: (ocf:mssql:agv2)

    sudo pcs resource create <NameForAGResource> ocf:mssql:agv2 ag_name=<AGName> meta failure-timeout=30s promotable notify=true
    

    Wenn Sie ein Upgrade von Pacemaker HA Agent v1 auf v2 durchführen, entfernen Sie die vorhandene AG-Ressource, bevor Sie die agv2 Ressource erstellen:

    sudo pcs resource delete <NameForAGResource>
    

    Durch diesen Vorgang wird die AG-Synchronisierung vorübergehend beendet, während die Ressource neu erstellt wird. Das Löschen und erneutes Erstellen der Pacemaker-AG-Ressource löscht die AG nicht. Nachdem die Ressource neu erstellt wurde, setzt Pacemaker die Management- und AG-Synchronisierung automatisch fort.

  2. Erstellen Sie die IP-Adressressource für das Application Gateway (AG), die Sie der Listener-Funktionalität zuordnen.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    In diesem Beispiel steht NameForIPResource für den eindeutigen Namen der IP-Ressource, und IPAddress ist die statische IP-Adresse, die Sie der Ressource zuweisen.

  3. Um sicherzustellen, dass die IP-Adresse und die AG-Ressource auf demselben Knoten ausgeführt werden, konfigurieren Sie eine Colocation-Einschränkung.

    sudo pcs constraint colocation add <NameForIPResource> with promoted <NameForAGResource>-clone INFINITY
    

    In diesem Beispiel NameForIPResource ist der Name der IP-Ressource und NameForAGResource der Name für die AG-Ressource.

  4. Erstellen Sie eine Sortierungseinschränkung, um sicherzustellen, dass die Verfügbarkeitsgruppenressource vor der IP-Adresse ausgeführt wird. Während die Colocation-Einschränkung eine Sortiereinschränkung impliziert, erzwingt dieser Schritt sie.

    sudo pcs constraint order promote <NameForAGResource>-clone then start <NameForIPResource>
    

    In diesem Beispiel NameForIPResource ist der Name der IP-Ressource und NameForAGResource der Name für die AG-Ressource.