Delen via


Een beschikbaarheidsgroep maken en configureren voor SQL Server in Linux

van toepassing op:SQL Server- - Linux

In deze zelfstudie wordt beschreven hoe u een beschikbaarheidsgroep (AG) maakt en configureert voor SQL Server in Linux. In tegenstelling tot SQL Server 2016 (13.x) en eerder in Windows, kunt u een AG inschakelen met of zonder eerst het onderliggende Pacemaker-cluster te maken. Integratie met het cluster wordt, indien nodig, pas later uitgevoerd.

De zelfstudie bevat de volgende taken:

  • Beschikbaarheidsgroepen inschakelen.
  • Eindpunten en certificaten voor beschikbaarheidsgroepen maken.
  • Gebruik SQL Server Management Studio (SSMS) of Transact-SQL om een beschikbaarheidsgroep te maken.
  • Maak de sql Server-aanmelding en -machtigingen voor Pacemaker.
  • Resources voor beschikbaarheidsgroepen maken in een Pacemaker-cluster (alleen extern type).

Voorwaarden

Implementeer het Pacemaker-cluster met hoge beschikbaarheid, zoals beschreven in Implementeer een Pacemaker-cluster voor SQL Server op Linux.

De functie beschikbaarheidsgroepen inschakelen

In tegenstelling tot Windows kunt u PowerShell of SQL Server Configuration Manager niet gebruiken om de functie beschikbaarheidsgroepen (AG) in te schakelen. Onder Linux moet u mssql-conf gebruiken om de functie in te schakelen. Er zijn twee manieren om de functie beschikbaarheidsgroepen in te schakelen: gebruik het hulpprogramma mssql-conf of bewerk het mssql.conf bestand handmatig.

Belangrijk

De AG-functie moet ingeschakeld zijn voor replica's die alleen voor configuratie zijn, zelfs op SQL Server Express.

Het hulpprogramma mssql-conf gebruiken

Geef bij een prompt de volgende opdracht op:

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

Het bestand mssql.conf bewerken

U kunt het mssql.conf bestand, dat zich onder de map /var/opt/mssql bevindt, ook wijzigen om de volgende regels toe te voegen:

[hadr]

hadr.hadrenabled = 1

SQL Server opnieuw starten

Nadat u beschikbaarheidsgroepen hebt ingeschakeld, zoals in Windows, moet u SQL Server opnieuw starten met behulp van de volgende opdracht:

sudo systemctl restart mssql-server

De eindpunten en certificaten van de beschikbaarheidsgroep maken

Een beschikbaarheidsgroep maakt gebruik van TCP-eindpunten voor communicatie. Onder Linux worden eindpunten voor een beschikbaarheidsgroep (AG) alleen ondersteund als certificaten worden gebruikt voor authenticatie. U moet het certificaat herstellen van het ene exemplaar op alle andere exemplaren die deelnemen als replica's in dezelfde beschikbaarheidsgroep. Het certificaatproces is vereist, zelfs voor een replica alleen voor configuratie.

Het maken van eindpunten en het herstellen van certificaten kan alleen worden uitgevoerd via Transact-SQL. U kunt ook niet-SQL Server-gegenereerde certificaten gebruiken. U hebt ook een proces nodig voor het beheren en vervangen van certificaten die verlopen.

Belangrijk

Als u van plan bent om de SQL Server Management Studio-wizard te gebruiken om de AG (beschikbaarheidsgroep) te maken, moet u de certificaten nog steeds maken en terugzetten met behulp van Transact-SQL op Linux.

Raadpleeg voor volledige syntaxis over de opties die beschikbaar zijn voor de verschillende opdrachten (inclusief beveiliging):

Notitie

Hoewel u een beschikbaarheidsgroep maakt, gebruikt het type eindpunt FOR DATABASE_MIRRORING, omdat sommige onderliggende aspecten ooit gedeeld waren met die nu verouderde functie.

In dit voorbeeld worden certificaten gemaakt voor een configuratie met drie knooppunten. De instantienamen zijn LinAGN1, LinAGN2en LinAGN3.

  1. Voer het volgende script uit op LinAGN1 om de hoofdsleutel, het certificaat en het eindpunt te maken en een back-up van het certificaat te maken. In dit voorbeeld wordt de typische TCP-poort van 5022 gebruikt voor het eindpunt.

    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. Doe hetzelfde op 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. Voer ten slotte dezelfde reeks uit op LinAGN3:

    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. Gebruik scp of een ander hulpprogramma om de back-ups van het certificaat te kopiëren naar elk knooppunt dat deel uitmaakt van de beschikbaarheidsgroep AG.

    Voor dit voorbeeld:

    • Kopieer LinAGN1_Cert.cer naar LinAGN2 en LinAGN3.
    • Kopieer LinAGN2_Cert.cer naar LinAGN1 en LinAGN3.
    • Kopieer LinAGN3_Cert.cer naar LinAGN1 en LinAGN2.
  5. Wijzig het eigendom en de groep die is gekoppeld aan de gekopieerde certificaatbestanden in mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Maak de aanmeldingen op exemplaarniveau en gebruikers die zijn gekoppeld aan LinAGN2 en LinAGN3 op LinAGN1.

    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
    

    Voorzichtigheid

    Uw wachtwoord moet voldoen aan het standaardbeleid voor SQL Server wachtwoordbeleid. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.

  7. Herstel LinAGN2_Cert en LinAGN3_Cert op LinAGN1. Het hebben van de certificaten van de andere replica's is een belangrijk aspect van AG-communicatie en -beveiliging.

    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. Verleen de aanmeldingen die zijn gekoppeld aan LinAG2 en LinAGN3 toestemming om verbinding te maken met het eindpunt op LinAGN1.

    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. Maak de logins en gebruikers op exemplaarniveau aan die zijn gekoppeld aan LinAGN1 en LinAGN3 op LinAGN2.

    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. Herstel LinAGN1_Cert en LinAGN3_Cert op LinAGN2.

    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. Geef de logins verbonden aan LinAG1 en LinAGN3 toestemming om verbinding te maken met het eindpunt op LinAGN2.

    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Maak de aanmeldingen en gebruikers op exemplaarniveau die zijn gekoppeld aan LinAGN1 en LinAGN2 op LinAGN3.

    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. Herstel LinAGN1_Cert en LinAGN2_Cert op LinAGN3.

    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. Geef de aanmeldingen die aan LinAG1 en LinAGN2 zijn gekoppeld de toestemming om verbinding te maken met het eindpunt op LinAGN3.

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

De beschikbaarheidsgroep maken

In deze sectie wordt beschreven hoe u SQL Server Management Studio (SSMS) of Transact-SQL gebruikt om de beschikbaarheidsgroep voor SQL Server te maken.

SQL Server Management Studio gebruiken

In deze sectie wordt beschreven hoe u een beschikbaarheidsgroep maakt met een clustertype Extern met behulp van SSMS met de wizard Nieuwe beschikbaarheidsgroep.

  1. Vouw in SSMS AlwaysOn High Availabilityuit, klik met de rechtermuisknop op Beschikbaarheidsgroepenen selecteer wizard Nieuwe beschikbaarheidsgroep.

  2. Klik in het dialoogvenster Inleiding op Volgende.

  3. In het dialoogvenster "Beschikbaarheidsgroepopties opgeven" voert u een naam in voor de beschikbaarheidsgroep en selecteert u een clustertype EXTERNAL of NONE in de vervolgkeuzelijst. Extern moet worden gebruikt wanneer Pacemaker wordt geïmplementeerd. Geen is bedoeld voor gespecialiseerde scenario's, zoals uitschalen van leesbewerkingen. Het selecteren van de optie voor statusdetectie op databaseniveau is optioneel. Zie voor meer informatie over deze optie de failoveroptie voor gezondheidsdetectie op het databaseniveau van een beschikbaarheidsgroep. Selecteer Volgende.

    Screenshot van Create Availability Group met weergave van clustertype.

  4. Selecteer in het dialoogvenster 'Databases selecteren' de databases die zullen deelnemen aan de beschikbaarheidsgroep. Elke database moet een volledige back-up hebben voordat deze kan worden toegevoegd aan een beschikbaarheidsgroep. Selecteer Volgende.

  5. Selecteer in het dialoogvenster Replica's specificeren de optie Replica toevoegen.

  6. Voer in het dialoogvenster Verbinding maken met server de naam in van het Linux-exemplaar van SQL Server dat de secundaire replica is en de referenties om verbinding te maken. Selecteer Verbind.

  7. Herhaal de vorige twee stappen voor het exemplaar dat een alleen-configuratiereplica of een andere secundaire replica bevat.

  8. Alle drie de exemplaren moeten nu worden weergegeven in het dialoogvenster Replica's specificeren. Als u een clustertype Extern gebruikt, moet u voor de secundaire replica die een echte secundaire replica is, ervoor zorgen dat de beschikbaarheidsmodus overeenkomt met die van de primaire replica en failovermodus is ingesteld op Extern. Voor de alleen-configuratiereplica selecteert u alleen een beschikbaarheidsmodus van Configuratie.

    ** In het volgende voorbeeld ziet u een AG met twee replica's, een clustertype van Extern, en een configuratie-replica.

    Schermopname van Create Availability Group met de leesbare secundaire optie.

    In het volgende voorbeeld ziet u een beschikbaarheidsgroep (AG) met twee replica's, een clustertype van Geen, en een configuratie-alleen-replica.

    Schermopname van Maak Beschikbaarheidsgroep met de pagina Replica's.

  9. Als u de back-upvoorkeuren wilt wijzigen, selecteert u het tabblad Voorkeuren voor back-up. Zie Back-ups configureren op secundaire replica's van een AlwaysOn-beschikbaarheidsgroepvoor meer informatie over back-upvoorkeuren met AG's.

  10. Als u leesbare secundaire bestanden gebruikt of een beschikbaarheidsgroep maakt met het clustertype Geen voor leesschaal, kunt u een listener maken door het tabblad Listener te selecteren. Een listener kan ook later worden toegevoegd. Als u een listener wilt maken, kiest u de optie Een listener voor een beschikbaarheidsgroep maken en voert u een naam, een TCP/IP-poort in en of u een statisch of automatisch toegewezen DHCP-IP-adres wilt gebruiken. Houd er rekening mee dat voor een AG met het clustertype Geen het IP-adres statisch moet zijn en moet worden ingesteld op het IP-adres van de primaire groep.

    Schermopname van beschikbaarheidsgroep maken met de listeneroptie.

  11. Als er een listener is gemaakt voor leesbare scenario's, staat SSMS 17.3 of hoger het maken van de alleen-lezen routering in de wizard toe. Het kan ook later worden toegevoegd via SSMS of Transact-SQL. Als u nu alleen-lezenroutering wilt toevoegen:

    1. Selecteer het tabblad Read-Only Routering.

    2. Voer de URL's in voor de alleen-lezen replica's. Deze URL's zijn vergelijkbaar met de eindpunten, behalve dat ze de poort van het exemplaar gebruiken, niet het eindpunt.

    3. Kies elke URL en selecteer onderaan de leesbare kopieën. Als u meerdere selecties wilt uitvoeren, houdt u Shift ingedrukt of sleept u deze.

  12. Selecteer Volgende.

  13. Kies hoe de secundaire replica's worden geïnitialiseerd. De standaardinstelling is het gebruik van automatische seeding, waarvoor hetzelfde pad vereist is op alle servers die deelnemen in de AG. U kunt de wizard ook een back-up laten maken, kopiëren en herstellen (de tweede optie); de wizard laten deelnemen als u handmatig een back-up gemaakt, gekopieerd en hersteld hebt van de database op de replica's (derde optie); of de database later toevoegen (laatste optie). Net als bij certificaten, moet u handmatig back-ups maken en kopiëren, en de machtigingen voor de back-upbestanden instellen op de andere replica's. Selecteer Volgende.

  14. Onderzoek in het dialoogvenster Validatie, als alles niet terugkomt als Geslaagd. Sommige waarschuwingen zijn acceptabel en niet fataal, bijvoorbeeld als u geen listener maakt. Selecteer Volgende.

  15. Selecteer in het dialoogvenster Samenvatting Voltooien. Het proces om de beschikbaarheidsgroep te creëren begint nu.

  16. Wanneer het maken van de beschikbaarheidsgroep is voltooid, selecteert u in de resultaten Sluiten. U ziet nu de AG op de replica's in de dynamische beheerweergaven en onder de map Always On High Availability in SSMS.

Gebruik Transact-SQL

In deze sectie ziet u voorbeelden van het maken van een AG met behulp van Transact-SQL. De listener en alleen-lezenroutering kunnen worden geconfigureerd nadat de beschikbaarheidsgroep is gemaakt. De AG zelf kan worden gewijzigd met ALTER AVAILABILITY GROUP, maar het clustertype kan niet worden gewijzigd in SQL Server 2017 (14.x). Als u geen AG met een clustertype Extern wilt maken, moet u deze verwijderen en opnieuw maken met het clustertype Geen. Meer informatie en andere opties vindt u op de volgende koppelingen:

Voorbeeld A: Twee replica's met een alleen voor configuratie replica (extern clustertype)

In dit voorbeeld ziet u hoe u een AG met twee replica's maakt die gebruikmaakt van een configuration-only replica.

  1. Voer uit op het knooppunt dat de primaire replica is die de volledig lees- en schrijfklaar kopie van de databases bevat. In dit voorbeeld wordt automatische seeding gebruikt.

    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. Voer het volgende uit in een queryvenster dat is aangesloten op de andere replica om de replica aan de AG te koppelen en het seedingproces van de primaire naar de secundaire replica te starten.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. In een queryvenster dat is verbonden met de enige replica van de configuratie, voegt u deze toe aan de beschikbaarheidsgroep.

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

Voorbeeld B: Drie replica's met alleen-lezen-routering (extern cluster type)

In dit voorbeeld ziet u drie volledige replica's en hoe alleen-lezenroutering kan worden geconfigureerd in het kader van het maken van de initiële beschikbaarheidsgroep.

  1. Voer de actie uit op het knooppunt dat de primaire replica zal zijn en de volledig lees-/schrijfkopie van de databases bevat. In dit voorbeeld wordt automatische seeding gebruikt.

    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
    

    Enkele dingen die u moet weten over deze configuratie:

    • AGName is de naam van de beschikbaarheidsgroep.
    • DBName is de naam van de database die wordt gebruikt met de beschikbaarheidsgroep. Het kan ook een lijst met namen zijn, gescheiden door komma's.
    • ListenerName is een andere naam dan een van de onderliggende servers/knooppunten. Het wordt geregistreerd in DNS, samen met IPAddress.
    • IPAddress is een IP-adres dat is gekoppeld aan ListenerName. Het is ook uniek en niet hetzelfde als een van de servers/knooppunten. Toepassingen en eindgebruikers gebruiken ListenerName of IPAddress om verbinding te maken met de AG.
    • SubnetMask is het subnetmasker van IPAddress. In SQL Server 2019 (15.x) en vorige versies is dit 255.255.255.255. In SQL Server 2022 (16.x) en latere versies is dit 0.0.0.0.
  2. Voer in een queryvenster dat is verbonden met de andere replica het volgende uit om de replica aan de beschikbaarheidsgroep te koppelen en het seedingproces te starten van de primaire naar de secundaire replica.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. Herhaal stap 2 voor de derde replica.

Voorbeeld C: Twee replica's met alleen-lezenroutering (geen clustertype)

In dit voorbeeld ziet u hoe u een configuratie met twee replica's maakt met behulp van het clustertype None. Het wordt gebruikt voor scenario's met schaalbare leesopties, waarbij geen failover wordt verwacht. Hiermee maakt u de listener die feitelijk de primaire replica is, en verzorgt de alleen-lezenroutering met behulp van de round robin-functionaliteit.

  1. Voer de operatie uit op het knooppunt dat de primaire replica is, die de volledig lees- en schrijfbare kopie van de databases bevat. In dit voorbeeld wordt automatische seeding gebruikt.
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

Waar:

  • AGName is de naam van de beschikbaarheidsgroep.
  • DBName is de naam van de database die wordt gebruikt met de beschikbaarheidsgroep. Het kan ook een lijst met namen zijn, gescheiden door komma's.
  • PortOfEndpoint is het poortnummer dat wordt gebruikt door het eindpunt dat is gemaakt.
  • PortOfInstance is het poortnummer dat wordt gebruikt door het exemplaar van SQL Server.
  • ListenerName is een andere naam dan een van de onderliggende replica's, maar wordt niet daadwerkelijk gebruikt.
  • PrimaryReplicaIPAddress is het IP-adres van de primaire replica.
  • SubnetMask is het subnetmasker van IPAddress. In SQL Server 2019 (15.x) en vorige versies is dit 255.255.255.255. In SQL Server 2022 (16.x) en latere versies is dit 0.0.0.0.
  1. Koppel de secundaire replica aan de AG en initieer automatische seeding.

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

De sql Server-aanmelding en -machtigingen voor Pacemaker maken

Een Pacemaker-cluster met hoge beschikbaarheid onder SQL Server op Linux heeft toegang nodig tot het SQL Server-exemplaar en machtigingen voor de beschikbaarheidsgroep zelf. Met deze stappen maakt u de aanmelding en de bijbehorende machtigingen, samen met een bestand dat Pacemaker vertelt hoe u zich aanmeldt bij SQL Server.

  1. Voer in een queryvenster dat is verbonden met de eerste replica het volgende script uit:

    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. Voer op Node 1 de opdracht in

    sudo emacs /var/opt/mssql/secrets/passwd
    

    Hiermee opent u de Emacs-editor.

  3. Voer de volgende twee regels in de editor in:

    PMLogin
    
    <password>
    
  4. Houd de Ctrl toets ingedrukt en druk op Xen Com het bestand af te sluiten en op te slaan.

  5. Uitvoeren

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    om het bestand te vergrendelen.

  6. Herhaal stap 1-5 op de andere servers die als replica's fungeren.

De resources voor de beschikbaarheidsgroep maken in het Pacemaker-cluster (alleen extern)

Nadat een beschikbaarheidsgroep is gemaakt in SQL Server, moeten de bijbehorende resources worden gemaakt in Pacemaker wanneer een clustertype Extern is opgegeven. Er zijn twee resources gekoppeld aan een AG: de AG zelf en een IP-adres. Het configureren van de IP-adresresource is optioneel als u de listenerfunctionaliteit niet gebruikt, maar wordt aanbevolen.

De AG-resource die u hebt gemaakt, is een type resource dat een kloonwordt genoemd. De AG-resource bevat in wezen kopieën op elk knooppunt en er is één beheerresource met de naam hoofd-. De hoofdserver is gekoppeld aan de server die als host fungeert voor de primaire replica. De andere resources hosten secundaire replica's (normaal of alleen voor configuraties) en kunnen worden gepromoveerd naar master in een failover.

Notitie

Communicatie zonder vooroordelen

Dit artikel bevat verwijzingen naar de term slave, een term die Microsoft aanstootgevend acht wanneer deze in deze context wordt gebruikt. De term wordt weergegeven in dit artikel omdat deze momenteel in de software wordt weergegeven. Wanneer de term uit de software wordt verwijderd, wordt deze uit het artikel verwijderd.

  1. Maak de AG-resource met de volgende syntaxis:

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

    Waar NameForAGResource de unieke naam is die aan deze clusterresource voor de AG wordt gegeven en AGName de naam is van de AG die is gemaakt.

    Op RHEL 7.7 en Ubuntu 18.04 en latere versies kunt u een waarschuwing tegenkomen met het gebruik van --masterof een fout zoals sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Gebruik het volgende om deze situatie te voorkomen:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
    
  2. Maak de IP-adresbron voor de AG die geassocieerd zal worden met de luisteraar-functionaliteit.

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

    Waar NameForIPResource de unieke naam voor de IP-resource is en IPAddress het statische IP-adres is dat aan de resource is toegewezen.

  3. Om ervoor te zorgen dat het IP-adres en de AG-resource op hetzelfde knooppunt worden uitgevoerd, moet er een colocatiebeperking worden geconfigureerd.

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    Waar NameForIPResource de naam voor de IP-resource is en NameForAGResource de naam voor de AG-resource is.

  4. Maak een volgorde beperking om ervoor te zorgen dat de AG-resource operationeel is voordat het IP-adres beschikbaar is. Hoewel de colocatiebeperking een bestelbeperking impliceert, wordt dit afgedwongen.

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

    Waar NameForIPResource de naam voor de IP-resource is en NameForAGResource de naam voor de AG-resource is.

Volgende stap

In deze zelfstudie hebt u geleerd hoe u een beschikbaarheidsgroep maakt en configureert voor SQL Server in Linux. U hebt geleerd hoe u het volgende kunt doen:

  • Beschikbaarheidsgroepen inschakelen.
  • Ag-eindpunten en -certificaten maken.
  • Gebruik SQL Server Management Studio (SSMS) of Transact-SQL om een AG te maken.
  • Maak de sql Server-aanmelding en -machtigingen voor Pacemaker.
  • Maak AG-resources binnen een Pacemaker-cluster.

Voor de meeste AG-beheertaken, waaronder upgrades en failover, raadpleegt u: