Obsługa instancji klastra awaryjnego na Linuksie

Dotyczy:Program SQL Server w systemie Linux

W tym artykule wyjaśniono, jak zarządzać instancją klastrową w trybie przełączania awaryjnego dla SQL Server na systemie Linux. Aby utworzyć SQL Server FCI na Linuksie, zobacz Konfiguruj instancję klastra awaryjnego na Linuksie (RHEL).

Opis architektury

Warstwa klastrowania opiera się na dodatku Red Hat Enterprise Linux (RHEL) HA, zbudowanym na Pacemakerze. Corosync i Pacemaker koordynują komunikację klastra i zarządzanie zasobami. Instancja SQL Server jest aktywna na jednym węźle naraz.

Na poniższym diagramie przedstawiono składniki w klastrze systemu Linux z programem SQL Server.

Schemat klastra awaryjnego SQL Server na współdzielonym dysku na Linuksie.

Aby uzyskać więcej informacji na temat konfiguracji klastra, opcji agentów zasobów i zarządzania, odwiedź dokumentację referencyjną RHEL.

Failover

Tryb failover dla instancji klastrów (FCI) jest podobny do klastrów failover systemu Windows Server (WSFC). Jeśli węzeł klastra obsługujący FCI napotka jakąś awarię, FCI powinno automatycznie przełączyć się na inny węzeł. W przeciwieństwie do klastra Windows Server Failover Clustering (WSFC), nie ma możliwości ustawienia preferowanych właścicieli, dlatego program Pacemaker wybiera węzeł, który będzie nowym hostem dla instancji FCI (Failover Cluster Instance).

Czasem możesz chcieć ręcznie przełączyć FCI na inny węzeł. Proces nie jest taki sam jak w przypadku instancji klastra na WSFC. W przypadku WSFC przełączasz zasoby na poziomie roli. W Pacemakerze wybierasz zasób do przeniesienia, a jeśli wszystkie ograniczenia są prawidłowo ustawione, cała reszta również zostaje przeniesiona.

Sposób awaryjnego przełączania zależy od dystrybucji Linuksa. Postępuj zgodnie z instrukcjami dotyczącymi dystrybucji Linuksa.

Ręczne przełączanie awaryjne (RHEL lub Ubuntu)

Aby wykonać ręczne przejście w tryb failover na serwerach Red Hat Enterprise Linux (RHEL) lub Ubuntu, wykonaj następujące kroki.

  1. Wydaj następujące polecenie:

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName> to nazwa zasobu Pacemaker dla SQL Server FCI, a <NewHostNode> to nazwa węzła klastra, na którym ma być hostowane FCI.

  2. Podczas ręcznego przejścia w tryb failover program Pacemaker tworzy ograniczenie lokalizacji dla zasobu wybranego do ręcznego przenoszenia. Aby wyświetlić to ograniczenie, uruchom polecenie sudo pcs constraint.

  3. Po zakończeniu przełączenia awaryjnego usuń ograniczenie:

    sudo pcs resource clear <FCIResourceName>
    

Ręczne przełączanie awaryjne (SLES)

Note

Począwszy od SQL Server 2025 (17.x), system SUSE Linux Enterprise Server (SLES) nie jest obsługiwany. Dla SQL Server 2022 (16.x) i wcześniejszych wersji obsługiwany jest tylko SLES 15.

W SUSE Linux Enterprise Server (SLES) użyj polecenia migrate, aby ręcznie przełączyć klaster SQL Server FCI. Przykład:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> to nazwa zasobu dla instancji klastra awaryjnego oraz <NewHostNode> jest nazwą nowego hosta docelowego.

Monitorowanie klastra awaryjnego

Wyświetl bieżący stan klastra:

sudo pcs status

Zobacz status na żywo klastra i zasobów:

sudo crm_mon

Wyświetl logi agenta zasobów w /var/log/cluster/corosync.log.

Dodawanie węzła do klastra

  1. Sprawdź adres IP dla każdego węzła. Poniższy skrypt przedstawia adres IP bieżącego węzła.

    ip addr show
    
  2. Nowy węzeł potrzebuje unikalnej nazwy, która ma 15 znaków lub mniej. Ustaw nazwę komputera, dodając ją do /etc/hosts. Poniższy skrypt umożliwia edytowanie /etc/hosts za pomocą vi.

    sudo vi /etc/hosts
    

    W poniższym przykładzie przedstawiono /etc/hosts z dodatkami dla trzech węzłów o nazwach sqlfcivm1, sqlfcivm2, i sqlfcivm3.

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  sqlfcivm1
    10.128.16.77   sqlfcivm2
    10.128.14.26   sqlfcivm3
    

    Plik powinien być taki sam w każdym węźle.

  3. Zatrzymaj usługę SQL Server na nowym węźle.

  4. Postępuj zgodnie z instrukcjami, aby zamontować katalog plików bazy danych do współdzielonej lokalizacji.

    Na serwerze NFS zainstaluj program nfs-utils:

    sudo yum -y install nfs-utils
    

    Otwórz zaporę na klientach i serwerze NFS:

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

    Edytuj plik /etc/fstab, aby uwzględnić polecenie instalacji:

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    Uruchom mount -a, aby zmiany zaczęły obowiązywać.

  5. W nowym węźle utwórz plik do przechowywania nazwy użytkownika i hasła programu SQL Server na potrzeby logowania programu Pacemaker. Następujące polecenie tworzy i wypełnia ten plik:

    sudo touch /var/opt/mssql/secrets/passwd
    echo "<loginName>" | sudo tee -a /var/opt/mssql/secrets/passwd
    echo "<password>" | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    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.

  6. W nowym węźle otwórz porty zapory Pacemaker. Aby otworzyć te porty przy użyciu firewalld, uruchom następujące polecenie:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Jeśli używasz innej zapory, która nie ma wbudowanej konfiguracji wysokiej dostępności, otwórz następujące porty, aby Pacemaker mógł komunikować się z innymi węzłami w klastrze:

    • TCP: Porty 2224, 3121, 21064
    • UDP: Port 5405
  7. Zainstaluj pakiety Pacemaker w nowym węźle.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  8. Ustaw hasło dla domyślnego użytkownika, który jest tworzony podczas instalowania pakietów Pacemaker i Corosync. Użyj tego samego hasła co istniejące węzły.

    sudo passwd hacluster
    
  9. Włącz i uruchom usługę pcsd i program Pacemaker. Nowy węzeł może ponownie dołączyć do klastra po restarcie. Uruchom następujące polecenie w nowym węźle.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. Zainstaluj agenta zasobów FCI dla programu SQL Server. Uruchom następujące polecenie w nowym węźle.

    sudo yum install mssql-server-ha
    
  11. Na istniejącym węźle w klastrze uwierzytelnij nowy węzeł i dodaj go do klastra:

    sudo pcs cluster auth <nodeName3> -u hacluster
    sudo pcs cluster node add <nodeName3>
    

Usuwanie węzłów z klastra

Aby usunąć węzeł z klastra, uruchom następujące polecenie:

sudo pcs cluster node remove <nodeName>

Zmień częstotliwość monitorowania zasobów

sudo pcs resource op monitor interval=<interval>s <sqlResourceName>

Poniższy przykład ustawia interwał monitoringu na 2 sekundy dla mssqlha zasobu:

sudo pcs resource op monitor interval=2s mssqlha

Troubleshoot

Podczas rozwiązywania problemów z klastrem pomaga zrozumieć, jak trzy demony współpracują ze sobą w celu zarządzania zasobami klastra.

Daemon Description
Corosync Zapewnia członkostwo w kworum i komunikację między węzłami klastra.
Rozrusznik serca Znajduje się na szczycie platformy Corosync i udostępnia maszyny stanu dla zasobów.
PCSD Zarządza zarówno Pacemaker, jak i Corosync za pomocą narzędzi pcs.

Aby można było używać narzędzi pcs, należy uruchomić narzędzie PCSD.

Bieżący stan klastra

sudo pcs status zwraca podstawowe informacje o klastrze, kworum, węzłach, zasobach i stanie demona dla każdego węzła.

Poniższy przykład przedstawia prawidłowe dane wyjściowe kworum Pacemaker:

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2024  Last change: Wed Oct 31 11:00:00 2024 by root via crm_resource on sqlvmnode1
Stack: corosync
Current DC: sqlvmnode1  (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
3 nodes and 1 resource configured

Online: [ sqlvmnode1 sqlvmnode2 sqlvmnode3 ]

Full list of resources:

mssqlha (ocf::sql:fci): Started sqlvmnode1

PCSD Status:
sqlvmnode1: Online
sqlvmnode2: Online
sqlvmnode3: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/enabled

W tym przykładzie oznacza to, partition with quorum że większość kworum węzłów jest online. Jeśli klaster utraci większościowe kworum węzłów, pcs status zwraca partition WITHOUT quorum i wszystkie zasoby są zatrzymane.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] zwraca nazwę wszystkich węzłów aktualnie uczestniczących w klastrze. Jeśli jakiekolwiek węzły nie uczestniczą, pcs status zwraca OFFLINE: [<nodename>].

PCSD Status pokazuje stan klastra dla każdego węzła.

Przyczyny, dla których węzeł może być w trybie offline

Sprawdź następujące elementy, gdy węzeł jest w trybie offline.

  • Zapora sieciowa

    Otwórz następujące porty na wszystkich węzłach, aby Pacemaker mógł się komunikować:

    • TCP: Porty 2224, 3121, 21064
    • UDP: Port 5405
  • Usługi Pacemaker lub Corosync działają

  • Komunikacja Node

  • Mapowania nazw węzłów