Udostępnij za pośrednictwem


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

Dotyczy:programu SQL Server — Linux

W tym samouczku opisano sposób tworzenia i konfigurowania grupy dostępności dla programu SQL Server w systemie Linux. W odróżnieniu od wersji SQL Server 2016 (13.x) i starszych na systemie Windows, można włączyć grupę dostępności z utworzonym wcześniej klastrem Pacemaker lub bez jego tworzenia. Integracja z klastrem, jeśli jest potrzebna, odbywa się dopiero 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).

Warunki wstępne

Wdróż klaster o wysokiej dostępności Pacemaker zgodnie z instrukcją w 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 należy użyć mssql-conf, aby włączyć tę funkcję. Istnieją dwa sposoby włączania funkcji grup dostępności: użyj narzędzia mssql-conf lub ręcznie edytuj plik mssql.conf.

Ważny

Funkcja AG musi być włączona dla replik tylko do celów konfiguracyjnych, nawet na SQL Server Express.

Korzystanie z narzędzia mssql-conf

W konsoli wprowadź następujące polecenie:

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

Edytowanie pliku mssql.conf

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

[hadr]

hadr.hadrenabled = 1

Uruchom ponownie program SQL Server

Po włączeniu grup dostępności, jak w systemie Windows, należy ponownie uruchomić program SQL Server, używając 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 punkty końcowe grupy dostępności są obsługiwane tylko wtedy, gdy certyfikaty są używane do uwierzytelniania. Należy przywrócić certyfikat z jednego wystąpienia we wszystkich innych wystąpieniach, które będą uczestniczyć jako repliki w tej samej grupie dostępności. Proces certyfikatu jest wymagany nawet w przypadku repliki tylko do konfiguracji.

Tworzenie punktów końcowych i przywracanie certyfikatów można wykonywać tylko za pośrednictwem języka Transact-SQL. Można również używać certyfikatów generowanych poza programem SQL Server. Potrzebny jest również proces zarządzania i zastępowania wszystkich certyfikatów, które wygasają.

Ważny

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ń), zapoznaj się z tematem:

Notatka

Mimo że tworzysz grupę dostępności, typ punktu końcowego używa FOR DATABASE_MIRRORING, ponieważ niektóre podstawowe aspekty zostały kiedyś udostępnione tej przestarzałej funkcji.

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 dla punktu końcowego jest używany typowy port 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. Za pomocą scp lub innego narzędzia skopiuj kopie zapasowe certyfikatu do każdego węzła, który będzie częścią grupy dostępności.

    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
    

    Ostrożność

    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. Posiadanie certyfikatów innych replik jest ważnym aspektem komunikacji i zabezpieczeń grupy dostępności (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 LinAG2 i LinAGN3 uprawnienia do połączenia z punktem końcowym na LinAGN1.

    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT
        ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. Utwórz loginy na poziomie instancji i użytkowników skojarzone z LinAGN1 i LinAGN3 w 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 identyfikatorom logowania skojarzonym z LinAG1 i LinAGN3 uprawnienia do nawiązania połączenia z punktem końcowym w LinAGN2.

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

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

Tworzenie grupy dostępności

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

Korzystanie z programu SQL Server Management Studio

W tej sekcji opisano sposób tworzenia Grupy Dostępności (AG) z klastrem typu zewnętrznego przy użyciu SSMS i Kreatora nowej grupy dostępności.

  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 dialogowym Wprowadzenie wybierz pozycję Dalej.

  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. Należy użyć zewnętrznego, gdy program Pacemaker zostanie wdrożony. Brak jest przeznaczony dla wyspecjalizowanych scenariuszy, takich jak skalowanie odczytu. Wybranie opcji wykrywania kondycji na poziomie bazy danych jest opcjonalne. Aby uzyskać więcej informacji na temat tej opcji, zobacz opcję wykrywania kondycji zdrowotnej na poziomie bazy danych grupy dostępności. Wybierz pozycję Dalej.

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

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

  5. W oknie dialogowym Określanie replik wybierz pozycję Dodaj replikę.

  6. W oknie dialogowym Łączenie z serwerem wprowadź nazwę wystąpienia SQL Server na systemie Linux, które będzie repliką pomocniczą, oraz poświadczenia niezbędne do połączenia. Wybierz Połą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 wystąpienia powinny być teraz wyświetlane w oknie dialogowym Określanie replik. Jeśli używasz rodzaju klastra Zewnętrznego, w przypadku repliki pomocniczej, która będzie prawdziwie pomocniczą, upewnij się, że tryb dostępności odpowiada trybowi repliki podstawowej, a tryb przełączania awaryjnego jest ustawiony na Zewnętrzny. 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 tworzenia kopii zapasowej, wybierz kartę Preferencje kopii zapasowej. Aby uzyskać więcej informacji na temat preferencji tworzenia kopii zapasowych w grupach dostępności, zobacz Konfigurowanie kopii zapasowych na replikach pomocniczych grupy dostępności Always On.

  10. W przypadku korzystania z czytelnych replik wtórnych lub tworzenia grupy dostępności z typem klastra bez na potrzeby skalowania do odczytu, można utworzyć nasłuchiwacz, wybierając kartę Nasłuchiwacz. Nasłuchiwacz można również dodać później. Aby utworzyć odbiornik, wybierz opcję Utwórz odbiornik grupy dostępności i wprowadź nazwę, port TCP/IP oraz czy używać statycznego, czy automatycznie przypisanego adresu IP DHCP. Należy pamiętać, że w przypadku grupy dostępności o typie klastra "None", adres IP powinien być statyczny i ustawiony na adres IP serwera podstawowego.

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

  11. Jeśli odbiornik jest tworzony na potrzeby scenariuszy z możliwością odczytu, program SSMS 17.3 lub nowszy zezwala na tworzenie routingu tylko do odczytu w kreatorze. Można go również dodać później za pośrednictwem programu SSMS lub języka Transact-SQL. Aby dodać teraz routing tylko do odczytu:

    1. Wybierz kartę 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.

    3. Wybierz każdy adres URL i u dołu wybierz repliki z możliwością odczytu. Aby wybrać wiele opcji, przytrzymaj naciśnięty SHIFT lub przeciągnij.

  12. Wybierz pozycję 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ć (druga opcja); użyć go, jeśli ręcznie utworzono kopię zapasową, skopiowano i przywrócono 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, uprawnienia do plików kopii zapasowych muszą być ustawione na innych replikach. Wybierz pozycję Dalej.

  14. W oknie dialogowym Walidacja, jeśli wszystko nie wróci jako Powodzenie, zbadaj. Niektóre ostrzeżenia są dopuszczalne i niefatalne, na przykład jeśli nie utworzysz odbiornika. Wybierz pozycję Dalej.

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

  16. Po zakończeniu tworzenia grupy dostępności wybierz opcję Zamknij w sekcji 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).

Użyj Transact-SQL

W tej sekcji przedstawiono przykłady tworzenia grupy dostępności przy użyciu języka Transact-SQL. Nasłuchiwacz i trasowanie tylko do odczytu można skonfigurować po utworzeniu grupy dostępności. Grupę AG można zmodyfikować przy użyciu ALTER AVAILABILITY GROUP, ale nie można zmienić typu klastra w 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 innych opcji można znaleźć pod następującymi linkami:

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 polecenie na węźle, który będzie główną repliką zawierającą w pełni odczytywalną i zapisywalną kopię baz danych. 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 grupy dostępności i zainicjować proces przesyłania danych z repliki podstawowej 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 tylko z repliką konfiguracji dołącz ją do Grupy Dostępności.

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

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

W tym przykładzie przedstawiono trzy pełne repliki i sposób konfigurowania routingu tylko do odczytu w ramach początkowego tworzenia grupy dostępności.

  1. Wykonaj polecenie na węźle, który będzie repliką podstawową zawierającą pełną wersję do odczytu i zapisu baz danych. 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 jest nazwą grupy dostępności.
    • DBName to nazwa bazy danych używanej z grupą dostępności. Może to być również lista nazw rozdzielonych przecinkami.
    • ListenerName to nazwa inna niż jakakolwiek z serwerów/węzłów bazowych. Zostanie on zarejestrowany w systemie DNS wraz z IPAddress.
    • IPAddress to adres IP skojarzony z ListenerName. Jest on również unikatowy, a nie taki sam jak którykolwiek z serwerów/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 jest to 255.255.255.255. W programie SQL Server 2022 (16.x) i nowszych wersjach jest to 0.0.0.0.
  2. W oknie zapytania połączonym z drugą repliką wykonaj następujące polecenie, aby dołączyć replikę do AG i zainicjować proces inicjowania z repliki podstawowej do repliki pomocniczej.

    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)

W tym przykładzie pokazano tworzenie konfiguracji z dwiema replikami przy użyciu typu klastra None. Jest on używany w scenariuszu skalowania odczytu, w którym nie jest oczekiwane przejście w tryb failover. Spowoduje to utworzenie nasłuchującego, który rzeczywiście jest repliką podstawową, oraz routingu tylko do odczytu z użyciem funkcjonalności round robin.

  1. Wykonaj polecenie na węźle, który będzie podstawową repliką, zawierającą pełną kopię do odczytu i zapisu baz danych. 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

Gdzie:

  • AGName jest nazwą grupy dostępności.
  • DBName to nazwa bazy danych, która będzie używana z grupą dostępności. Może to być również lista nazw rozdzielonych przecinkami.
  • PortOfEndpoint jest numerem portu używanym przez utworzony punkt końcowy.
  • PortOfInstance to numer portu używany przez wystąpienie programu SQL Server.
  • ListenerName to nazwa inna niż jakakolwiek replika bazowa, ale nie jest używana.
  • PrimaryReplicaIPAddress jest adresem IP repliki podstawowej.
  • SubnetMask jest maską podsieci IPAddress. W programie SQL Server 2019 (15.x) i poprzednich wersjach jest to 255.255.255.255. W programie SQL Server 2022 (16.x) i nowszych wersjach jest to 0.0.0.0.
  1. 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 wysokiej dostępności Pacemaker działający z SQL Server na systemie Linux musi mieć dostęp do instancji SQL Server oraz uprawnienia do samej grupy dostępności. Te kroki umożliwiają utworzenie logowania i skojarzonych uprawnień oraz pliku, który informuje Pacemaker, jak zalogować się 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. W węźle 1 wprowadź polecenie

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

    Spowoduje to otwarcie edytora Emacs.

  3. Wprowadź następujące dwa wiersze w edytorze:

    PMLogin
    
    <password>
    
  4. Przytrzymaj wciśnięty Ctrl, a następnie naciśnij X, a następnie C, aby zamknąć i zapisać plik.

  5. Wykonać

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

    aby zablokować plik.

  6. Powtórz kroki 1–5 na innych serwerach, które będą służyć jako repliki.

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

Po utworzeniu grupy dostępności w programie SQL Server, odpowiednie zasoby muszą zostać utworzone przy użyciu menedżera klastrów Pacemaker, jeśli zostanie określony typ klastra jako zewnętrzny. Istnieją dwa zasoby skojarzone z AG: sama AG (grupa dostępności) i adres IP. Skonfigurowanie zasobu adresu IP jest opcjonalne, jeśli nie używasz funkcji odbiornika, ale jest zalecane.

Utworzony zasób AG to zasób typu klon. Zasób AG zasadniczo posiada kopie na każdym węźle, a jest jeden zasób sterujący zwany głównym. Mistrz jest powiązany z serwerem obsługującym replikę podstawową. Inne zasoby hostują repliki pomocnicze (zwykłe lub tylko konfiguracyjne) i mogą być awansowane do rangi głównego w procesie przełączania awaryjnego.

Notatka

Komunikacja bezstronna

Ten artykuł zawiera odwołania do terminu niewolnik, którego firma Microsoft uznaje za obraźliwy w tym kontekście. Termin pojawia się w tym artykule, ponieważ jest on obecnie wyświetlany w oprogramowaniu. Po usunięciu terminu z oprogramowania usuniemy go z artykułu.

  1. Utwórz zasób AG przy użyciu następującej składni:

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

    Gdzie NameForAGResource jest unikatową nazwą nadaną temu zasobowi klastra, dla AG, a AGName jest nazwą AG, która została utworzona.

    W systemach RHEL 7.7 i Ubuntu 18.04 i nowszych może wystąpić ostrzeżenie dotyczące używania --masterlub błędu, takiego jak sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Aby uniknąć tej sytuacji, użyj:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
    
  2. Utwórz zasób adresu IP dla AG, który zostanie skojarzony z funkcjonalnością nasłuchującą.

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

    Gdzie NameForIPResource jest unikatową nazwą zasobu IP, a IPAddress jest statycznym adresem IP przypisanym do zasobu.

  3. Aby upewnić się, że adres IP i zasób AG są uruchomione w tym samym węźle, należy skonfigurować ograniczenie kolokacji.

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

    Gdzie NameForIPResource jest nazwą zasobu IP, a NameForAGResource jest nazwą zasobu Application Gateway.

  4. Utwórz ograniczenie porządkowania, aby upewnić się, że zasób AG jest uruchomiony przed adresem IP. Chociaż ograniczenie kolokacji oznacza ograniczenie porządkowe, to właśnie ono je wymusza.

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

    Gdzie NameForIPResource jest nazwą zasobu IP, a NameForAGResource jest nazwą zasobu AG.

Następny krok

W tym samouczku przedstawiono sposób tworzenia i konfigurowania grupy dostępności dla programu SQL Server w systemie Linux. Wiesz już, jak wykonać następujące działania:

  • Włącz grupy dostępności.
  • Tworzenie punktów końcowych i certyfikatów AG.
  • Użyj programu SQL Server Management Studio (SSMS) lub Transact-SQL, aby utworzyć grupę dostępności (AG).
  • Utwórz identyfikator logowania i uprawnienia programu SQL Server dla programu Pacemaker.
  • Utwórz zasoby AG w klastrze Pacemaker.

W przypadku większości zadań administracyjnych dotyczących grupy dostępności (AG), w tym aktualizacji i przełączeń awaryjnych, zobacz: