Tworzenie i konfigurowanie grupy dostępności dla programu SQL Server w systemie Linux

Dotyczy:Program SQL Server w systemie Linux

W tym samouczku pokazano, jak utworzyć i skonfigurować grupę dostępności dla programu SQL Server w systemie Linux. W przeciwieństwie do programu SQL Server 2016 (13.x) i starszych wersji działających na Windows, możesz włączyć grupę dostępności, najpierw tworząc lub nie tworząc bazowego klastra Pacemaker. Integracja z klastrem, w razie potrzeby, odbywa się później.

Samouczek obejmuje następujące zadania:

  • Włącz grupy dostępności.
  • Utwórz punkty końcowe grupy dostępności i certyfikaty.
  • Użyj programu SQL Server Management Studio (SSMS) lub Transact-SQL, aby utworzyć grupę dostępności.
  • Utwórz identyfikator logowania i uprawnienia programu SQL Server dla programu Pacemaker.
  • Utwórz zasoby grupy dostępności w klastrze Pacemaker (tylko typ zewnętrzny).

Wymagania wstępne

Wdroż klaster wysokiej dostępności Pacemaker. Aby uzyskać więcej informacji, zobacz Wdrażanie klastra Pacemaker dla programu SQL Server w systemie Linux.

Włączanie funkcji grup dostępności

W przeciwieństwie do systemu Windows nie można używać programu PowerShell ani programu SQL Server Configuration Manager w celu włączenia funkcji grup dostępności. W systemie Linux można włączyć funkcję grup dostępności na dwa sposoby: użyć mssql-conf narzędzia lub ręcznie edytować mssql.conf plik.

Ważna

Należy włączyć funkcję AG dla replik konfiguracyjnych, nawet w przypadku programu SQL Server Express.

Użyj mssql-conf narzędzia

W wierszu polecenia uruchom następujące polecenie:

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

Edytowanie pliku mssql.conf

Możesz również zmodyfikować mssql.conf plik znajdujący się w folderze /var/opt/mssql . Dodaj następujące wiersze:

[hadr]

hadr.hadrenabled = 1

Uruchom ponownie program SQL Server

Po włączeniu grup dostępności należy ponownie uruchomić program SQL Server. Użyj następującego polecenia:

sudo systemctl restart mssql-server

Utwórz punkty końcowe i certyfikaty grupy dostępności

Grupa dostępności używa punktów końcowych TCP do komunikacji. W systemie Linux program SQL Server obsługuje punkty końcowe dla grupy dostępności tylko wtedy, gdy używasz certyfikatów do uwierzytelniania. Należy przywrócić certyfikat z jednego wystąpienia we wszystkich innych wystąpieniach, które uczestniczą jako repliki w tej samej grupie dostępności. Proces certyfikacji jest potrzebny nawet dla repliki przeznaczonej wyłącznie do konfiguracji.

Można tworzyć punkty końcowe i przywracać certyfikaty tylko za pomocą Transact-SQL. Można również użyć certyfikatów niegenerowanych przez program SQL Server. Potrzebny jest również proces zarządzania i zastępowania wszystkich certyfikatów, które wygasają.

Ważna

Jeśli planujesz użyć kreatora SQL Server Management Studio do utworzenia AG, nadal musisz utworzyć i przywrócić certyfikaty, korzystając z Transact-SQL w systemie Linux.

Aby uzyskać pełną składnię dostępnych opcji dla różnych poleceń (w tym zabezpieczeń), zobacz:

Note

Chociaż tworzysz grupę dostępności, punkt końcowy ma typ FOR DATABASE_MIRRORING, ponieważ ten typ punktu końcowego ma pewne podstawowe cechy wspólne z funkcją obecnie oznaczoną jako przestarzała.

W tym przykładzie są tworzone certyfikaty dla konfiguracji z trzema węzłami. Nazwy wystąpień to LinAGN1, LinAGN2i LinAGN3.

  1. Wykonaj następujący skrypt na LinAGN1, aby utworzyć klucz główny, certyfikat i punkt końcowy oraz utworzyć kopię zapasową certyfikatu. W tym przykładzie punkt końcowy używa typowego portu TCP 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. Wykonaj to samo w 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. Na koniec wykonaj tę samą sekwencję na 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. Użyj scp lub innego narzędzia, aby skopiować kopie zapasowe certyfikatu do każdego węzła, który ma być częścią grupy AG.

    W tym przykładzie:

    • Skopiuj LinAGN1_Cert.cer do LinAGN2 i LinAGN3.
    • Skopiuj LinAGN2_Cert.cer do LinAGN1 i LinAGN3.
    • Skopiuj LinAGN3_Cert.cer do LinAGN1 i LinAGN2.
  5. Zmień własność i grupę użytkowników skojarzoną z plikami certyfikatów, które zostały skopiowane, na mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Utwórz loginy na poziomie wystąpienia oraz użytkowników powiązanych z LinAGN2 i LinAGN3 na 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
    

    Caution

    Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

  7. Przywróć LinAGN2_Cert i LinAGN3_Cert w LinAGN1. Certyfikaty pozostałych replik są niezbędne dla komunikacji i bezpieczeństwa AG.

    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. Udziel logowaniom skojarzonym z LinAGN2 i LinAGN3 uprawnienia do połączenia z punktem końcowym na LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  9. Utwórz loginy na poziomie wystąpienia oraz użytkowników powiązanych z LinAGN1 i LinAGN3 na 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. Przywróć LinAGN1_Cert i LinAGN3_Cert w 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. Udziel logowaniom skojarzonym z LinAGN1 i LinAGN3 uprawnienia do połączenia z punktem końcowym na LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Utwórz loginy na poziomie wystąpienia oraz użytkowników powiązanych z LinAGN1 i LinAGN2 na 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. Przywróć LinAGN1_Cert i LinAGN2_Cert w 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. Udziel logowaniom skojarzonym z LinAGN1 i LinAGN2 uprawnienia do połączenia z punktem końcowym na LinAGN3.

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

Tworzenie grupy dostępności

W tej sekcji pokazano, jak używać programu SQL Server Management Studio (SSMS) lub Transact-SQL do utworzenia grupy dostępności dla SQL Server.

Korzystanie z programu SQL Server Management Studio

W tej sekcji pokazano, jak utworzyć AG z typem klastra External przy użyciu kreatora New Availability Group w programie SSMS.

  1. W programie SSMS rozwiń Always On High Availability, kliknij prawym przyciskiem myszy Grupy dostępności, i wybierz Kreator Nowej Grupy Dostępności.

  2. W oknie Wprowadzenie wybierz Następny.

  3. W oknie dialogowym Określanie opcji grupy dostępności wprowadź nazwę grupy dostępności i wybierz typ klastra EXTERNAL lub NONE na liście rozwijanej. Użyj EXTERNAL podczas wdrażania programu Pacemaker. NONE służy do wyspecjalizowanych zastosowań, takich jak skalowanie poziome odczytu. Wybranie opcji wykrywania kondycji na poziomie bazy danych jest opcjonalne. Aby uzyskać więcej informacji na temat tej opcji, zobacz Opcja automatycznego przełączania awaryjnego w przypadku wykrycia stanu zdrowia na poziomie bazy danych w grupie dostępności. Wybierz Dalej.

    Zrzut ekranu z okna Tworzenia Grupy Dostępności pokazujący typ klastra.

  4. W oknie Wybierz bazy danych wybierz bazy danych, w których chcesz uczestniczyć w AG. Każda baza danych musi mieć pełną kopię zapasową, zanim będzie można dodać ją do grupy dostępności. Wybierz Dalej.

  5. W oknie Określ repliki wybierz Dodaj replikę.

  6. W oknie Connect to Server wpisz nazwę instancji Linux SQL Server dla repliki wtórnej oraz dane uwierzytelniające do połączenia. Wybierz i podłącz.

  7. Powtórz dwa poprzednie kroki dla wystąpienia, które będzie zawierać replikę tylko konfiguracyjną lub inną replikę pomocniczą.

  8. Wszystkie trzy instancje są wyświetlane w oknie dialogowym Określanie replik. Jeśli używasz typu klastra External, w przypadku repliki pomocniczej, która rzeczywiście jest repliką pomocniczą, upewnij się, że tryb dostępności odpowiada trybowi repliki podstawowej, i ustaw tryb przełączania awaryjnego na External. W przypadku repliki tylko do konfiguracji wybierz tryb dostępności: tylko Konfiguracja.

    W poniższym przykładzie przedstawiono grupę dostępności z dwiema replikami, typ klastra: External, oraz replikę przeznaczoną wyłącznie do konfiguracji.

    Zrzut ekranu przedstawiający opcję drugorzędną do odczytu w Utwórz grupę dostępności.

    W poniższym przykładzie przedstawiono AG z dwiema replikami, typem klastra 'None' i repliką przeznaczoną wyłącznie do konfiguracji.

    Zrzut ekranu przedstawiający stronę Create Availability Group pokazującą stronę Repliki.

  9. Jeśli chcesz zmienić preferencje kopii zapasowej, wybierz zakładkę Preferencje kopii zapasowej . Więcej informacji o preferencjach backupu u AG można znaleźć w artykule Konfiguruj kopie zapasowe na wtórnych replikach grupy dostępności Always On.

  10. Jeśli używasz czytelnych replik lub utworzysz grupę dostępności z typem klastra Brak na potrzeby skalowania odczytu, możesz utworzyć użytkownika, wybierając kartę Użytkownik. Możesz również dodać użytkownika później. Aby utworzyć słuchacza, wybierz opcję Utworzenie grupy dostępności i wprowadź nazwę, port TCP/IP oraz czy chcesz użyć statycznego, czy automatycznie przypisanego adresu DHCP. Dla AG z klastrowym typem None, użyj statycznego IP odpowiadającego adresowi IP głównego.

    Zrzut ekranu przedstawiający opcję Utwórz grupę dostępności z wybraną opcją nasłuchiwacza.

  11. Jeśli utworzysz słuchacz dla czytelnych scenariuszy, SSMS pozwala na utworzenie routingu tylko do odczytu w kreatorze. Możesz też dodać go później, używając SSMS lub Transact-SQL. Aby dodać teraz routing tylko do odczytu:

    1. Wybierz zakładkę Read-Only Routing .

    2. Wprowadź adresy URL replik tylko do odczytu. Te adresy URL są podobne do punktów końcowych, z wyjątkiem używania portu wystąpienia, a nie punktu końcowego.

      1. Wybierz każdy adres URL i u dołu wybierz repliki z możliwością odczytu. Aby wybrać wiele, przytrzymaj klawisze Shift lub przeciągnij.
  12. Wybierz Dalej.

  13. Wybierz sposób inicjowania replik pomocniczych. Wartością domyślną jest użycie automatycznego rozmieszczania, co wymaga tej samej ścieżki na wszystkich serwerach uczestniczących w ag. Możesz również skorzystać z kreatora, aby utworzyć kopię zapasową, skopiować i przywrócić bazę danych (druga opcja); dokonać synchronizacji, jeśli ręcznie utworzyłeś kopię zapasową, skopiowałeś i przywróciłeś bazę danych na replikach (trzecia opcja); lub dodać bazę danych później (ostatnia opcja). Podobnie jak w przypadku certyfikatów, jeśli ręcznie tworzysz kopie zapasowe i kopiujesz je, ustaw uprawnienia do plików kopii zapasowych w innych replikach. Wybierz Dalej.

  14. W oknie dialogowym Walidacja, jeśli kreator nie zwróci wartości Sukces dla wszystkich sprawdzeń, zbadaj problem dokładniej. Niektóre ostrzeżenia są dopuszczalne i niefatalne, na przykład jeśli nie utworzysz odbiornika. Wybierz Dalej.

  15. W oknie Podsumowanie wybierz Zakończ. Rozpoczyna się proces tworzenia AG.

  16. Po zakończeniu tworzenia AG wybierz Zamknij na stronie Wyniki. Grupa dostępności (AG) jest teraz widoczna w replikach w dynamicznych widokach zarządzania oraz w folderze Always On High Availability w programie SSMS (SQL Server Management Studio).

Korzystanie z Transact-SQL

Ta sekcja pokazuje przykłady tworzenia AG przy użyciu Transact-SQL. Odbiornik i routing tylko do odczytu można skonfigurować po utworzeniu grupy dostępności. AG można zmodyfikować przy użyciu polecenia ALTER AVAILABILITY GROUP, ale nie można zmienić typu klastra w programie SQL Server 2017 (14.x). Jeśli nie miałeś na myśli utworzenia grupy dostępności z typem klastra Zewnętrzne, musisz ją usunąć i ponownie utworzyć z typem klastra Brak.

Więcej informacji i inne opcje można znaleźć w następstwie:

Przykład A: Dwie repliki z repliką przeznaczoną wyłącznie do konfiguracji (typ zewnętrznego klastra)

W tym przykładzie pokazano, jak utworzyć grupę dostępności z dwiema replikami, używającą repliki wyłącznie konfiguracyjnej.

  1. Wykonaj następującą instrukcję na węźle repliki podstawowej, który zawiera kopię baz danych do odczytu i zapisu. W tym przykładzie użyto automatycznego rozmieszczania.

    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. W oknie zapytania połączonym z inną repliką wykonaj następujące polecenie, aby dołączyć replikę do AG i rozpocząć inicjowanie przesyłania danych z repliki pierwotnej do repliki wtórnej.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. W oknie zapytania połączonym z repliką tylko do konfiguracji uruchom następującą instrukcję, aby dołączyć ją do AG.

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

Przykład B: trzy repliki z routingiem tylko do odczytu (typ klastra zewnętrznego)

Ten przykład pokazuje, jak skonfigurować routing tylko do odczytu podczas początkowego tworzenia grupy dostępności (AG) dla trzech pełnych replik.

  1. Wykonaj następującą instrukcję na węźle, który działa jako główna replika i zawiera pełną kopię baz danych do odczytu i zapisu. W tym przykładzie użyto automatycznego rozmieszczania.

    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
    

    Kilka rzeczy, na które należy zwrócić uwagę w tej konfiguracji

    • AGName to nazwa spółki akcyjnej.
    • DBName to nazwa bazy danych, którą używasz z Grupą dostępności. Może to być także lista nazw oddzielona przecinkami.
    • ListenerName to nazwa różniąca się od dowolnego z bazowych serwerów lub węzłów. Rejestrujesz go w DNS wraz z IPAddress.
    • IPAddress jest adresem IP dla ListenerName. Jest też unikalny i nie pasuje do żadnego z serwerów ani węzłów. Aplikacje i użytkownicy końcowi używają ListenerName lub IPAddress do łączenia się z AG.
      • SubnetMask jest maską podsieci IPAddress. W programie SQL Server 2019 (15.x) i poprzednich wersjach ta wartość to 255.255.255.255. W programie SQL Server 2022 (16.x) i nowszych wersjach ta wartość to 0.0.0.0.
  2. W oknie zapytania połączonym z drugą repliką wykonaj następujące polecenie, aby dołączyć replikę do grupy dostępności i zainicjować proces inicjowania replikacji z repliki głównej do repliki podrzędnej.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. Powtórz krok 2 dla trzeciej repliki.

Przykład C: dwie repliki z routingiem tylko do odczytu (brak typu klastra)

Ten przykład tworzy konfigurację dwóch replik, która wykorzystuje typ klastrowy None. Użyj tej konfiguracji w scenariuszu skalowania operacji odczytu, w którym nie oczekujesz przełączenia awaryjnego. Ten krok tworzy słuchacza, który jest główną repliką, i konfiguruje routing tylko do odczytu z funkcjonalnością round-robin.

  1. Wykonaj następującą instrukcję na węźle, który działa jako główna replika i zawiera pełną kopię baz danych do odczytu i zapisu. W tym przykładzie użyto automatycznego rozmieszczania.

    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
    

    W tym przykładzie:

    • AGName to nazwa spółki akcyjnej.
    • DBName to nazwa bazy danych, którą używasz z Grupą dostępności. Może to być także lista nazw oddzielona przecinkami.
    • PortOfEndpoint to numer portu dla punktu końcowego, który tworzysz.
      • PortOfInstanceto numer portu instancji SQL Server.
    • ListenerName to nazwa zastępcza, która różni się od każdej z bazowych replik.
    • PrimaryReplicaIPAddress jest adresem IP repliki podstawowej.
      • SubnetMask jest maską podsieci IPAddress. W programie SQL Server 2019 (15.x) i poprzednich wersjach ta wartość to 255.255.255.255. W programie SQL Server 2022 (16.x) i nowszych wersjach ta wartość to 0.0.0.0.
  2. Dołącz replikę pomocniczą do grupy dostępności (AG) i zainicjuj automatyczne wypełnianie.

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

Tworzenie identyfikatora logowania i uprawnień programu SQL Server dla programu Pacemaker

Klaster o wysokiej dostępności Pacemaker korzystający z programu SQL Server w systemie Linux musi mieć dostęp do instancji SQL Server i uprawnienia do samej grupy dostępności. Te kroki umożliwiają utworzenie loginu i skojarzonych uprawnień wraz z plikiem, który informuje narzędzie Pacemaker o sposobie uwierzytelniania do SQL Server.

  1. W oknie zapytania połączonym z pierwszą repliką wykonaj następujący skrypt:

    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. Na węźle 1 dodaj do pliku /var/opt/mssql/secrets/passwd następujące dwa wiersze:

    PMLogin
    
    <password>
    

    Być może trzeba będzie podwyższyć swoje uprawnienia za pomocą sudo, aby edytować ten plik.

  3. Zablokuj plik:

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    
  4. Powtórz kroki 1–5 na innych serwerach, które służą jako repliki.

Tworzenie zasobów grupy dostępności w klastrze Pacemaker (tylko zewnętrzne)

Po utworzeniu AG (Grupy dostępności) w SQL Server należy utworzyć odpowiednie zasoby w Pacemaker przy określaniu typu klastra jako Zewnętrzny. Grupa dostępności (AG) wymaga dwóch zasobów: zasobu grupy dostępności i zasobu adresu IP. Skonfigurowanie zasobu adresu IP jest opcjonalne, jeśli nie używasz odbiornika. Zaleca się jednak, gdy potrzebujesz funkcji odbiornika.

Utworzony zasób AG jest rodzajem zasobu nazywanego klonem. Zasób AG ma kopie na każdym węźle oraz jeden zasób sterujący, nazywany zasobem promowanym. Promowany zasób odpowiada serwerowi, który hostuje główną replikę. Pozostałe zasoby obsługują repliki wtórne (zwykłe lub wyłącznie konfiguracyjne), które można awansować podczas przełączenia awaryjnego.

Note

W programie SQL Server 2025 (17.x) z aktualizacją zbiorczą (CU) 3 i w nowszych wersjach agent Pacemaker HA v2 (wersja zapoznawcza) jest dostępny dla systemów Red Hat Enterprise Linux (RHEL) i Ubuntu za pośrednictwem pakietu mssql-server-ha. Możesz ocenić Pacemaker HA agent v2 w wdrożeniach nieprodukcyjnych. Istniejący agent pacemaker HA (wersja 1) pozostaje w pełni obsługiwany w przypadku wdrożeń produkcyjnych. Więcej informacji można znaleźć w artykule Pacemaker HA agent v2 (zapowiedź).

Pacemaker HA agent v1

  1. Utwórz zasób AG w Pacemaker, korzystając z agenta Pacemaker HA (wersja 1): (ocf:mssql:ag)

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

    W tym przykładzie NameForAGResource jest unikatową nazwą nadaną temu zasobowi klastra dla grupy dostępności (AG), a AGName jest nazwą grupy dostępności, którą utworzyłeś.

  2. Utwórz zasób adresu IP dla grupy dostępności skojarzonej z funkcją odbiornika.

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

    W tym przykładzie NameForIPResource jest unikatową nazwą zasobu IP i IPAddress jest statycznym adresem IP przypisywanym do zasobu.

  3. Aby upewnić się, że adres IP i zasób AG działają w tym samym węźle, skonfiguruj ograniczenie kolokacji.

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

    W tym przykładzie NameForIPResource jest nazwą zasobu IP i NameForAGResource nazwą zasobu grupy dostępności.

  4. Utwórz ograniczenie kolejności uruchamiania, aby zapewnić, że zasób AG będzie uruchomiony przed adresem IP. Chociaż ograniczenie kolokacji oznacza ograniczenie kolejności, ten krok wprowadza je w życie.

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

    W tym przykładzie NameForIPResource jest nazwą zasobu IP i NameForAGResource nazwą zasobu grupy dostępności.

Pacemaker HA agent v2 (wersja zapoznawcza)

W wersji SQL Server 2025 (17.x) z Cumulative Update (CU) 3 i nowszymi, nowy agent Pacemaker HA v2 jest dostępny dla Red Hat Enterprise Linux (RHEL) i Ubuntu w mssql-server-ha pakiecie.

Agent Pacemaker HA w wersji 2 wprowadza ulepszenia niezawodności i wydajności w porównaniu do wcześniejszego agenta, w tym:

  • Zwiększona wydajność przełączania awaryjnego w celu skrócenia zarówno planowanych, jak i nieplanowanych czasów przełączania.

  • Obsługa elastycznych zasad automatycznego failoveru, w tym konfiguracji limitu czasu testu kondycji i poziomu warunku awarii.

  • Obsługa protokołu TLS 1.3 na potrzeby komunikacji między klastrem Pacemaker i programem SQL Server.

Agent pacemaker HA v2 jest obecnie w wersji zapoznawczej. Istniejący agent pacemaker HA (wersja 1) pozostaje w pełni obsługiwany w przypadku wdrożeń produkcyjnych.

Pacemaker HA agent v2 korzysta z architektury opartej na usługach. Agent działa jako dedykowana usługa systemowa o nazwie mssql-pcsag, która odpowiada za zarządzanie specyficznymi operacjami wysokiej dostępności SQL Server oraz komunikacją z Pacemakerem.

Zarządzasz usługą mssql-pcsag za pomocą standardowych systemów sterowania usługami. Uruchom, zatrzymaj, zrestartuj i sprawdź status tej usługi w razie potrzeby za pomocą następujących poleceń:

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

Program Pacemaker współdziała z grupami dostępności programu SQL Server za pośrednictwem mssql-pcsag usługi. Aby monitorowanie grup dostępności i przełączanie awaryjne działały poprawnie:

  • Klaster Pacemaker musi być uruchomiony.
  • Usługa mssql-pcsag musi być uruchomiona.

Chociaż Pacemaker i mssql-pcsag są oddzielnymi komponentami, działają razem w czasie działania. Jeśli Pacemaker lub usługa mssql-pcsag przestanie działać, operacje przełączania awaryjnego grupy dostępności nie działają zgodnie z oczekiwaniami.

Note

mssql-pcsag Ponowne uruchomienie usługi nie powoduje ponownego uruchomienia programu SQL Server. Podobnie ponowne uruchomienie programu SQL Server nie powoduje automatycznego ponownego uruchomienia agenta Pacemaker HA. Sprawdź, czy obie usługi są uruchomione podczas rozwiązywania problemów.

Pacemaker HA agent v2 obsługuje również elastyczne zasady automatycznego przełączania awaryjnego, w tym konfigurację poziomu warunku awarii i limitu czasu kontroli stanu.

  • Przykład: Poniższe polecenie Transact-SQL zmienia poziom warunków awarii istniejącej grupy dostępności o nazwie AG1 na poziom 2:

    ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 2);
    
  • Przykład: Poniższe Transact-SQL wywołanie zmienia próg limitu kontroli stanu istniejącej grupy dostępności o nazwie AG1 na 60 000 milisekund (60 sekund).

    ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);
    
  • Przykład: Po zastosowaniu konfiguracji użyj następującego polecenia Transact-SQL, aby zweryfikować skonfigurowany poziom awarii oraz czas sprawdzania stanu dla grup dostępności.

    SELECT failure_condition_level,
           health_check_timeout
    FROM sys.availability_groups;
    
  1. Utwórz zasób AG w narzędziu Pacemaker przy użyciu agenta Pacemaker HA w wersji 2: (ocf:mssql:agv2)

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

    W przypadku uaktualniania z agenta Pacemaker HA w wersji 1 do wersji 2 usuń istniejący zasób AG przed utworzeniem agv2 zasobu:

    sudo pcs resource delete <NameForAGResource>
    

    Ta operacja tymczasowo zatrzymuje synchronizację AG (grupy dostępności) podczas ponownego tworzenia zasobu. Usunięcie i ponowne utworzenie zasobu Pacemaker AG nie powoduje usunięcia grupy dostępności. Po ponownym utworzeniu zasobu program Pacemaker automatycznie wznowi zarządzanie zasobem i synchronizację grup dostępności.

  2. Utwórz zasób adresu IP dla grupy dostępności skojarzonej z funkcją odbiornika.

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

    W tym przykładzie NameForIPResource jest unikatową nazwą zasobu IP i IPAddress jest statycznym adresem IP przypisywanym do zasobu.

  3. Aby upewnić się, że adres IP i zasób AG działają w tym samym węźle, skonfiguruj ograniczenie kolokacji.

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

    W tym przykładzie NameForIPResource jest nazwą zasobu IP i NameForAGResource nazwą zasobu grupy dostępności.

  4. Utwórz ograniczenie porządkowania, aby upewnić się, że zasób AG jest uruchomiony przed adresem IP. Chociaż ograniczenie kolokacji oznacza ograniczenie kolejności, ten krok wprowadza je w życie.

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

    W tym przykładzie NameForIPResource jest nazwą zasobu IP i NameForAGResource nazwą zasobu grupy dostępności.