Dela via


Skapa och konfigurera en tillgänglighetsgrupp för SQL Server i Linux

gäller för:SQL Server – Linux

Den här självstudien beskriver hur du skapar och konfigurerar en tillgänglighetsgrupp (AG) för SQL Server i Linux. Till skillnad från SQL Server 2016 (13.x) och tidigare versioner i Windows kan du aktivera en AG (tillgänglighetsgrupp) antingen genom att först skapa det underliggande Pacemaker-klustret eller utan att skapa det först. Integrering med klustret görs vid behov inte förrän senare.

Handledningen innehåller följande uppgifter:

  • Aktivera tillgänglighetsgrupper.
  • Skapa slutpunkter och certifikat för tillgänglighetsgrupper.
  • Använd SQL Server Management Studio (SSMS) eller Transact-SQL för att skapa en tillgänglighetsgrupp.
  • Skapa SQL Server-inloggning och behörigheter för Pacemaker.
  • Skapa resurser för tillgänglighetsgrupp i ett Pacemaker-kluster (endast extern typ).

Förutsättningar

Distribuera pacemakerklustret med hög tillgänglighet enligt beskrivningen i Distribuera ett Pacemaker-kluster för SQL Server på Linux.

Aktivera funktionen tillgänglighetsgrupper

Till skillnad från i Windows kan du inte använda PowerShell eller SQL Server Configuration Manager för att aktivera tillgänglighetsgrupper (AG). Under Linux måste du använda mssql-conf för att aktivera funktionen. Det finns två sätt att aktivera funktionen tillgänglighetsgrupper: använd verktyget mssql-conf eller redigera mssql.conf filen manuellt.

Viktig

Ag-funktionen måste vara aktiverad för repliker med endast konfiguration, även på SQL Server Express.

Använda verktyget mssql-conf

I en prompt utfärdar du följande kommando:

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

Redigera filen mssql.conf

Du kan också ändra filen mssql.conf, som finns under mappen /var/opt/mssql, för att lägga till följande rader:

[hadr]

hadr.hadrenabled = 1

Starta om SQL Server

När du har aktiverat tillgänglighetsgrupper, som i Windows, måste du starta om SQL Server med följande kommando:

sudo systemctl restart mssql-server

Skapa tillgänglighetsgruppens slutpunkter och certifikat

En tillgänglighetsgrupp använder TCP-slutpunkter för kommunikation. Under Linux stöds slutpunkter för en AG endast om certifikat används för autentisering. Du måste återställa certifikatet från en instans på alla andra instanser som kommer att delta som repliker i samma tillgänglighetsgrupp. Certifikatprocessen krävs även för en replika som endast är för konfiguration.

Det går bara att skapa slutpunkter och återställa certifikat via Transact-SQL. Du kan också använda icke-SQL Server-genererade certifikat. Du behöver också en process för att hantera och ersätta eventuella certifikat som upphör att gälla.

Viktig

Om du planerar att använda SQL Server Management Studio-guiden för att skapa disponibilitetsgruppen måste du fortfarande skapa och återställa certifikaten med hjälp av Transact-SQL i Linux.

Fullständig syntax för de alternativ som är tillgängliga för de olika kommandona (inklusive säkerhet) finns i:

Not

Även om du skapar en tillgänglighetsgrupp använder slutpunkttypen FOR DATABASE_MIRRORING, eftersom vissa underliggande aspekter en gång delades med den numera föråldrade funktionen.

Det här exemplet skapar certifikat för en konfiguration med tre noder. Instansnamnen är LinAGN1, LinAGN2och LinAGN3.

  1. Kör följande skript på LinAGN1 för att skapa huvudnyckeln, certifikatet och slutpunkten och säkerhetskopiera certifikatet. I det här exemplet används den typiska TCP-porten 5022 för slutpunkten.

    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. Gör samma sak på 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. Utför slutligen samma sekvens på 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. Med hjälp av scp eller något annat verktyg kopierar du säkerhetskopiorna av certifikatet till varje nod som ska ingå i tillgänglighetsgruppen.

    I det här exemplet:

    • Kopiera LinAGN1_Cert.cer till LinAGN2 och LinAGN3.
    • Kopiera LinAGN2_Cert.cer till LinAGN1 och LinAGN3.
    • Kopiera LinAGN3_Cert.cer till LinAGN1 och LinAGN2.
  5. Ändra ägarskap och gruppen som är associerad med de kopierade certifikatfilerna till mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Skapa inloggningar på instansnivå och användare som är associerade med LinAGN2 och LinAGN3LinAGN1.

    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
    

    Försiktighet

    Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.

  7. Återställ LinAGN2_Cert och LinAGN3_CertLinAGN1. Att ha de andra replikernas certifikat är en viktig aspekt av AGs kommunikation och säkerhet.

    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. Bevilja inloggningarna som är associerade med LinAG2 och LinAGN3 behörighet att ansluta till slutpunkten på LinAGN1.

    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. Skapa inloggningar på instansnivå och användare som är associerade med LinAGN1 och LinAGN3LinAGN2.

    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. Återställ LinAGN1_Cert och LinAGN3_CertLinAGN2.

    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. Bevilja inloggningarna som är associerade med LinAG1 och LinAGN3 behörighet att ansluta till slutpunkten på LinAGN2.

    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Skapa inloggningar på instansnivå och användare som är associerade med LinAGN1 och LinAGN2LinAGN3.

    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. Återställ LinAGN1_Cert och LinAGN2_CertLinAGN3.

    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. Bevilja inloggningarna som är associerade med LinAG1 och LinAGN2 behörighet att ansluta till slutpunkten på LinAGN3.

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

Skapa tillgänglighetsgruppen

Det här avsnittet beskriver hur du använder SQL Server Management Studio (SSMS) eller Transact-SQL för att skapa tillgänglighetsgruppen för SQL Server.

Använda SQL Server Management Studio

Det här avsnittet visar hur du skapar en tillgänglighetsgrupp med en klustertyp av extern med hjälp av SSMS med guiden Ny tillgänglighetsgrupp.

  1. I SSMS utökar du Always On High Availability, högerklickar på Tillgänglighetsgrupperoch väljer Ny Tillgänglighetsgruppsguiden.

  2. I dialogrutan Introduktion väljer du Nästa.

  3. I dialogrutan Ange alternativ för tillgänglighetsgrupp anger du ett namn för tillgänglighetsgruppen och väljer en klustertyp av EXTERNAL eller NONE i listrutan. När Pacemaker kommer att distribueras, ska extern användas. Ingen är avsedd för specialiserade scenarier, till exempel utskalning av läsning. Det är valfritt att välja alternativet för hälsoidentifiering på databasnivå. Mer information om det här alternativet finns i alternativet för hälsoidentifiering på databasnivå för tillgänglighetsgrupp. Välj Nästa.

    Skärmbild av Skapa tillgänglighetsgrupp som visar klustertyp.

  4. I dialogrutan Välj databaser väljer du de databaser som ska delta i tillgänglighetsgruppen. Varje databas måste ha en fullständig säkerhetskopia innan den kan läggas till i en tillgänglighetsgrupp (AG). Välj Nästa.

  5. I dialogrutan Ange repliker väljer du Lägg till replik.

  6. I dialogrutan Anslut till server anger du namnet på Den Linux-instans av SQL Server som ska vara den sekundära repliken och autentiseringsuppgifterna för att ansluta. Välj Anslut.

  7. Upprepa de föregående två stegen för den instans som ska innehålla enbart en konfigurationsreplik eller en annan sekundär replik.

  8. Alla tre instanserna bör nu visas i dialogrutan Ange repliker. Om du använder en klustertyp av Extern kontrollerar du att tillgänglighetsläget matchar den primära repliken och redundansläget är inställt på Externt för den sekundära repliken som ska vara en sann sekundär replik. För konfigurationsrepliken väljer du ett tillgänglighetsläge för endast konfiguration.

    I följande exempel visas en AG med två repliker, den externa klustertypen och en replik som endast är konfiguration.

    Skärmbild av Skapa tillgänglighetsgrupp som visar det läsbara sekundära alternativet.

    I följande exempel visas en tillgänglighetsgrupp med två repliker, utan klustertyp, och endast en konfigurationsreplik.

    Skärmbild av

  9. Om du vill ändra inställningarna för säkerhetskopiering väljer du fliken Inställningar för säkerhetskopiering. Mer information om säkerhetskopieringsinställningar med AG:er finns i Konfigurera säkerhetskopior på sekundära repliker i en AlwaysOn-tillgänglighetsgrupp.

  10. Om du använder läsbara sekundärrepliker eller skapar en tillgänglighetsgrupp (AG) med klustertypen Ingen för lässkala, kan du skapa en lyssnare genom att välja fliken Listener. En lyssnare kan också läggas till senare. Om du vill skapa en lyssnare väljer du alternativet Skapa en tillgänglighetsgruppslyssnare och anger ett namn, en TCP/IP-port och om du vill använda en statisk eller automatiskt tilldelad DHCP IP-adress. Kom ihåg att för en tillgänglighetsgrupp med klustertypen Ingen ska IP-adressen vara statisk och ställas in på den primära IP-adressen.

    Skärmbild av Skapa tillgänglighetsgrupp som visar lyssnaralternativet.

  11. Om en lyssnare skapas för läsbara scenarier kan SSMS 17.3 eller senare skapa skrivskyddad routning i guiden. Det kan också läggas till senare via SSMS eller Transact-SQL. Så här lägger du till skrivskyddad routning nu:

    1. Välj fliken Read-Only Routning.

    2. Ange URL:erna för de skrivskyddade replikerna. Dessa URL:er liknar slutpunkterna, förutom att de använder porten för instansen, inte slutpunkten.

    3. Välj varje URL och välj de läsbara replikerna längst ned. Håll ned SKIFT eller select-drag om du vill välja flera val.

  12. Välj Nästa.

  13. Välj hur de sekundära replikerna ska initieras. Standardvärdet är att använda automatisk seeding, som kräver samma sökväg på alla servrar som deltar i tillgänglighetsgruppen. Du kan också låta guiden göra en säkerhetskopia, kopiera och återställa (det andra alternativet); ha det anslutet om du manuellt har säkerhetskopierat, kopierat och återställt databasen på replikerna (tredje alternativet); eller lägg till databasen senare (sista alternativet). Precis som med certifikat måste behörigheter för säkerhetskopieringsfilerna anges på de andra replikerna om du manuellt gör säkerhetskopior och kopierar dem. Välj Nästa.

  14. Om inte allt kommer tillbaka som lyckat i valideringsdialogrutan, undersök vad som har gått fel. Vissa varningar är acceptabla och inte dödliga, till exempel om du inte skapar en lyssnare. Välj Nästa.

  15. I dialogrutan Sammanfattning väljer du Slutför. Processen för att skapa tillgänglighetsgruppen börjar nu.

  16. När AG-skapandet är klart väljer du Stäng i resultaten. Nu kan du se AG på replikerna i de dynamiska hanteringsvyerna och under mappen Always On High Availability i SSMS.

Använd Transact-SQL

Det här avsnittet visar exempel på hur du skapar en AG (tillgänglighetsgrupp) med hjälp av Transact-SQL. Lyssnaren och skrivskyddad routning kan konfigureras när tillgänglighetsgruppen har skapats. Tillgänglighetsgruppen (AG) kan ändras med ALTER AVAILABILITY GROUP, men det går inte att ändra klustertypen i SQL Server 2017 (14.x). Om du inte menade att skapa en tillgänglighetsgrupp med klustertypen Extern måste du ta bort den och återskapa den med klustertypen Ingen. Mer information och andra alternativ finns på följande länkar:

Exempel A: Två repliker med enbart en konfigurationsreplik (extern klustertyp)

Det här exemplet visar hur du skapar en AG med två repliker som använder en replik som bara har konfiguration.

  1. Kör på den nod som ska vara den primära repliken som innehåller den fullständigt lästa/skrivbara kopian av databaserna. I det här exemplet används automatisk seeding.

    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. I ett frågefönster som är anslutet till den andra repliken kör du följande för att ansluta repliken till tillgänglighetsgruppen och starta seedingprocessen från den primära repliken till den sekundära repliken.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. I ett frågefönster som är anslutet till den enda konfigurationsrepliken ansluter du den till tillgänglighetsgruppen.

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

Exempel B: Tre repliker med skrivskyddad routning (extern klustertyp)

Det här exemplet visar tre kompletta repliker och hur endast-läsbar routning kan konfigureras som en del av den initiala skapandet av tillgänglighetsgruppen.

  1. Kör på den nod som ska vara den primära repliken och som innehåller den fullständiga läs- och skrivbara kopian av databaserna. I det här exemplet används automatisk seeding.

    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
    

    Några saker att notera om den här konfigurationen:

    • AGName är namnet på tillgänglighetsgruppen.
    • DBName är namnet på databasen som används med tillgänglighetsgruppen. Det kan också vara en lista med namn avgränsade med kommatecken.
    • ListenerName är ett namn som skiljer sig från någon av de underliggande servrarna/noderna. Den registreras i DNS tillsammans med IPAddress.
    • IPAddress är en IP-adress som är associerad med ListenerName. Det är också unikt och inte detsamma som någon av servrarna/noderna. Applikationer och slutanvändare använder antingen ListenerName eller IPAddress för att ansluta till AG.
    • SubnetMask är nätmasken för IPAddress. I SQL Server 2019 (15.x) och tidigare versioner är detta 255.255.255.255. I SQL Server 2022 (16.x) och senare versioner är detta 0.0.0.0.
  2. I ett frågefönster som är anslutet till den andra repliken, kör du följande för att ansluta repliken till tillgänglighetsgruppen (AG) och initiera seeding från den primära till den sekundära repliken.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. Upprepa steg 2 för den tredje repliken.

Exempel C: Två repliker med skrivskyddad routing (utan klustertyp)

Det här exemplet visar skapandet av en konfiguration med två repliker med en klustertyp av Ingen. Den används för scenariot med lässkala där ingen felövergång förväntas. Detta skapar lyssnaren som faktiskt är den primära replikan och implementerar skrivskyddad routing med hjälp av rundtursfunktionaliteten.

  1. Kör på den nod som ska vara den primära repliken som innehåller den fullständigt lästa/skrivbara kopian av databaserna. I det här exemplet används automatisk frösättning.
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

Var:

  • AGName är namnet på tillgänglighetsgruppen.
  • DBName är namnet på databasen som ska användas med tillgänglighetsgruppen. Det kan också vara en lista med namn avgränsade med kommatecken.
  • PortOfEndpoint är det portnummer som används av slutpunkten som skapas.
  • PortOfInstance är portnumret som används av instansen av SQL Server.
  • ListenerName är ett namn som skiljer sig från någon av de underliggande kopiorna men används inte faktiskt.
  • PrimaryReplicaIPAddress är IP-adressen för den primära repliken.
  • SubnetMask är nätmasken för IPAddress. I SQL Server 2019 (15.x) och tidigare versioner är detta 255.255.255.255. I SQL Server 2022 (16.x) och senare versioner är detta 0.0.0.0.
  1. Anslut den sekundära repliken till tillgänglighetsgruppen och starta automatisk sådd.

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

Skapa SQL Server-inloggning och behörigheter för Pacemaker

Ett pacemakerkluster med hög tillgänglighet som ligger bakom SQL Server i Linux behöver åtkomst till SQL Server-instansen och behörigheter för själva tillgänglighetsgruppen. De här stegen skapar inloggningen och de associerade behörigheterna, tillsammans med en fil som talar om för Pacemaker hur man loggar in på SQL Server.

  1. Kör följande skript i ett frågefönster som är anslutet till den första repliken:

    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. På nod 1 anger du kommandot

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

    Då öppnas Emacs-redigeraren.

  3. Ange följande två rader i redigeraren:

    PMLogin
    
    <password>
    
  4. Håll ned Ctrl och tryck sedan på Xoch sedan Cför att avsluta och spara filen.

  5. Utföra

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

    för att låsa filen.

  6. Upprepa steg 1–5 på de andra servrarna som ska fungera som repliker.

Skapa resurser för tillgänglighetsgrupp i Pacemaker-klustret (endast externt)

När en tillgänglighetsgrupp har skapats i SQL Server måste motsvarande resurser skapas i Pacemaker när en klustertyp av Extern har angetts. Det finns två resurser som är associerade med en AG: själva AG och en IP-adress. Det är valfritt att konfigurera IP-adressresursen om du inte använder lyssnarfunktionen, men rekommenderas.

Resursen för tillgänglighetsgruppen som du skapade är en typ av resurs som kallas klon. Tillgänglighetsgruppens resurs har i huvudsak kopior på varje nod, och det finns en styrresurs som kallas master. Huvudservern är associerad med servern som är värd för den primära repliken. De andra resurserna är värdar för sekundära repliker (vanliga eller endast konfigurationsbaserade) och kan uppgraderas till primär replik vid en failover.

Anteckning

Biasfri kommunikation

Den här artikeln innehåller referenser till termen slave, en term som Microsoft anser vara stötande när den används i den här kontexten. Termen visas i den här artikeln eftersom den för närvarande visas i programvaran. När termen tas bort från programvaran tar vi bort den från artikeln.

  1. Skapa ag-resursen med följande syntax:

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

    Där NameForAGResource är det unika namnet på den här klusterresursen för AG:n, och AGName är namnet på den AG som skapades.

    På RHEL 7.7 och Ubuntu 18.04 och senare versioner kan du stöta på en varning med hjälp av --mastereller ett fel som sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Undvik den här situationen genom att använda:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
    
  2. Skapa IP-adressresursen för AG som ska kopplas till lyssnarfunktionen.

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

    Där NameForIPResource är det unika namnet på IP-resursen och IPAddress är den statiska IP-adress som tilldelats resursen.

  3. För att säkerställa att IP-adressen och tillgänglighetsgruppens resurs körs på samma nod måste en samlokaliseringsbegränsning konfigureras.

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

    Där NameForIPResource är namnet på IP-resursen och NameForAGResource är namnet på AG-resursen.

  4. Skapa en beställningsbegränsning för att säkerställa att AG-resursen är uppe och fungerar före IP-adressen. Även om samlokaliseringsbegränsningen innebär en ordningsbegränsning, framtvingar detta den.

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

    Där NameForIPResource är namnet på IP-resursen och NameForAGResource är namnet på AG-resursen.

Nästa steg

I den här självstudien har du lärt dig hur du skapar och konfigurerar en tillgänglighetsgrupp för SQL Server i Linux. Du har lärt dig att:

  • Aktivera tillgänglighetsgrupper.
  • Skapa AG-slutpunkter och certifikat.
  • Använd SQL Server Management Studio (SSMS) eller Transact-SQL för att skapa en tillgänglighetsgrupp (AG).
  • Skapa SQL Server-inloggning och behörigheter för Pacemaker.
  • Skapa AG-resurser i ett Pacemaker-kluster.

De flesta administrationsuppgifter för AG, inklusive uppgraderingar och failover, finns i: