Udostępnij przez


Konfiguracja klastra RHEL w trybie failover dla programu SQL Server

Dotyczy:Program SQL Server w systemie Linux

Ten przewodnik zawiera instrukcje dotyczące tworzenia dwuwęzłowego klastra udostępnionego dysku w trybie failover dla programu SQL Server w systemie Red Hat Enterprise Linux. Warstwa klastrowania jest oparta na dodatku Red Hat Enterprise Linux (RHEL) HA zbudowanym na Pacemaker. Wystąpienie programu SQL Server jest aktywne w jednym węźle lub w drugim.

Uwaga / Notatka

Dostęp do dodatku Red Hat HA i dokumentacji wymaga subskrypcji.

Jak pokazano na poniższym diagramie, pamięć masowa jest przedstawiana dwóm serwerom. Składniki klastrowania — Corosync i Pacemaker — koordynują komunikację i zarządzanie zasobami. Jeden z serwerów ma aktywne połączenie z zasobami magazynu i programem SQL Server. Gdy program Pacemaker wykryje awarię, składniki klastrowania są odpowiedzialne za przeniesienie zasobów do innego węzła.

Diagram klastra SQL Server z udostępnionym dyskiem na Red Hat Enterprise Linux 7.

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

W tym momencie integracja programu SQL Server z programem Pacemaker nie jest tak połączona, jak w przypadku usługi WSFC w systemie Windows. W SQL Serverze nie ma wiedzy na temat obecności klastra, cała koordynacja pochodzi z zewnątrz, a usługa jest kontrolowana jako autonomiczne wystąpienie przez program Pacemaker. Również na przykład dynamiczne widoki zarządzania klastrami sys.dm_os_cluster_nodes i sys.dm_os_cluster_properties nie będą zawierać żadnych rekordów.

Aby użyć ciągu połączenia wskazującego nazwę serwera, a nie adres IP, muszą zarejestrować w swoim serwerze DNS adres IP używany do skonfigurowania wirtualnego zasobu IP (zgodnie z opisem w poniższych sekcjach) z wybraną nazwą serwera.

Kolejne sekcje opisują kroki konfigurowania rozwiązania klastra awaryjnego przełączania.

Wymagania wstępne

Do wykonania następującego kompleksowego scenariusza potrzebne są dwie maszyny do wdrożenia klastra dwóch węzłów i innego serwera w celu skonfigurowania serwera NFS. W poniższych krokach opisano sposób konfigurowania tych serwerów.

Ustawianie i konfigurowanie systemu operacyjnego na każdym węźle klastra

Pierwszym krokiem jest skonfigurowanie systemu operacyjnego w węzłach klastra. W tym przewodniku użyj systemu RHEL z prawidłową subskrypcją dodatku wysokiej dostępności.

Instalowanie i konfigurowanie programu SQL Server w każdym węźle klastra

  1. Zainstaluj i skonfiguruj program SQL Server w obu węzłach. Aby uzyskać szczegółowe instrukcje, zobacz Wskazówki dotyczące instalacji programu SQL Server w systemie Linux.

  2. Wyznaczanie jednego węzła jako podstawowego i drugiego jako pomocniczego na potrzeby konfiguracji. Użyj tych terminów, aby śledzić ten przewodnik.

  3. W węźle pomocniczym zatrzymaj i wyłącz program SQL Server.

    Poniższy przykład zatrzymuje i wyłącza program SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

Uwaga / Notatka

W czasie instalacji klucz główny serwera jest generowany dla wystąpienia programu SQL Server i umieszczany w katalogu /var/opt/mssql/secrets/machine-key. W systemie Linux program SQL Server zawsze działa jako konto lokalne o nazwie mssql. Ponieważ jest to konto lokalne, jego tożsamość nie jest współdzielona między węzłami. W związku z tym należy skopiować klucz szyfrowania z węzła podstawowego do każdego węzła pomocniczego, aby każde konto lokalne mssql mógł uzyskać dostęp do niego w celu odszyfrowania klucza głównego serwera.

  1. W węźle podstawowym utwórz identyfikator logowania programu SQL Server dla programu Pacemaker i przyznaj uprawnienia logowania do uruchomienia polecenia sp_server_diagnostics. Narzędzie Pacemaker używa tego konta do sprawdzania, na którym węźle działa program SQL Server.

    sudo systemctl start mssql-server
    

    Połącz się z bazą danych SQL Server master za pomocą konta sa i uruchom następujące polecenie:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>]
        WITH PASSWORD = N'<password>';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];
    

    Ostrzeżenie

    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.

    Alternatywnie można ustawić uprawnienia na bardziej szczegółowym poziomie. Identyfikator logowania usługi Pacemaker wymaga zapytania o stan kondycji za pomocą sp_server_diagnostics, setupadmin i ALTER ANY LINKED SERVER, aby zaktualizować nazwę wystąpienia FCI do nazwy zasobu poprzez uruchomienie sp_dropserver i sp_addserver.

  2. W węźle podstawowym zatrzymaj i wyłącz program SQL Server.

  3. Skonfiguruj plik hostów dla każdego węzła klastra. Plik hosta musi zawierać adres IP i nazwę każdego węzła klastra.

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

    sudo ip addr show
    

    Ustaw nazwę komputera w każdym węźle. Nadaj każdemu węzłowi unikatową nazwę o 15 znaków lub mniej. Ustaw nazwę komputera, dodając ją do elementu /etc/hosts. Poniższy skrypt umożliwia edytowanie /etc/hosts za pomocą vi.

    sudo vi /etc/hosts
    

    W poniższym przykładzie pokazano /etc/hosts z dodatkami dla dwóch węzłów o nazwach sqlfcivm1 i sqlfcivm2.

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

W następnej sekcji skonfigurujesz magazyn udostępniony i przeniesiesz pliki bazy danych do tego magazynu.

Konfigurowanie udostępnionego magazynu i przenoszenie plików bazy danych

Istnieją różne rozwiązania do zapewniania współdzielonego przechowywania. Ten przewodnik przedstawia konfigurowanie pamięci masowej udostępnionej w systemie NFS. Zalecamy stosowanie najlepszych rozwiązań i używanie protokołu Kerberos do zabezpieczania systemu plików NFS. Aby zapoznać się z przykładem, zobacz RHEL7: Używanie protokołu Kerberos do kontrolowania dostępu do udziałów sieciowych NFS.

Ostrzeżenie

Jeśli nie zabezpieczysz systemu plików NFS, każdy, kto może uzyskać dostęp do sieci i sfałszować adres IP węzła SQL, będzie mógł uzyskać dostęp do plików danych. Zawsze przed użyciem systemu w środowisku produkcyjnym, przeprowadź modelowanie zagrożeń. Inną opcją magazynu jest użycie udziału plików SMB.

Konfigurowanie magazynu udostępnionego z systemem plików NFS

Ważne

Hostowanie plików bazy danych na serwerze NFS w wersji <4 nie jest obsługiwane w tej wersji. Obejmuje to używanie NFS do klastra przełączania awaryjnego dla współdzielonych dysków, a także do baz danych na nieklastrowanych instancjach. Pracujemy nad włączeniem innych wersji serwera NFS w nadchodzących wersjach.

Na serwerze NFS wykonaj następujące kroki:

  1. Zainstaluj nfs-utils

    sudo yum -y install nfs-utils
    
  2. Włączanie i uruchamianie rpcbind

    sudo systemctl enable rpcbind && sudo systemctl start rpcbind
    
  3. Włączanie i uruchamianie nfs-server

    sudo systemctl enable nfs-server && sudo systemctl start nfs-server
    
  4. Edytuj /etc/exports , aby wyeksportować katalog, który chcesz udostępnić. Potrzebujesz jednego wiersza dla każdego żądanego udziału. Przykład:

    /mnt/nfs  10.8.8.0/24(rw,sync,no_subtree_check,no_root_squash)
    
  5. Eksportowanie udziałów

    sudo exportfs -rav
    
  6. Sprawdź, czy ścieżki są współużytkowane/eksportowane, uruchamiane z serwera NFS

    sudo showmount -e
    
  7. Dodawanie wyjątku w programie SELinux

    sudo setsebool -P nfs_export_all_rw 1
    
  8. Otwórz zaporę serwera.

    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
    

Skonfiguruj wszystkie węzły klastra do połączenia z udostępnionym magazynem NFS

Wykonaj następujące kroki we wszystkich węzłach klastra.

  1. Zainstaluj nfs-utils

    sudo yum -y install nfs-utils
    
  2. Otwieranie zapory 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
    
  3. Sprawdź, czy udziały NFS są widoczne na maszynach klienckich

    sudo showmount -e <IP OF NFS SERVER>
    
  4. Powtórz te kroki we wszystkich węzłach klastra.

Aby uzyskać więcej informacji na temat korzystania z systemu plików NFS, zobacz następujące zasoby:

Instalowanie katalogu plików bazy danych w celu wskazania magazynu udostępnionego

  1. Tylko w węźle podstawowym zapisz pliki bazy danych w lokalizacji tymczasowej. Poniższy skrypt tworzy nowy katalog tymczasowy, kopiuje pliki bazy danych do nowego katalogu i usuwa stare pliki bazy danych. Ponieważ program SQL Server działa jako użytkownik lokalny mssql, musisz upewnić się, że po przeniesieniu danych do zamontowanego udziału użytkownik lokalny ma dostęp do odczytu i zapisu udziału.

    sudo su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    
  2. Na wszystkich węzłach klastra edytuj plik /etc/fstab, aby uwzględnić polecenie mount.

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

    Poniższy skrypt przedstawia przykład edycji.

    10.8.8.0:/mnt/nfs /var/opt/mssql/data nfs timeo=14,intr
    

Uwaga / Notatka

Jeśli w tym miejscu używasz zasobu systemu plików (FS), nie ma potrzeby zachowywania polecenia instalowania w pliku /etc/fstab. Program Pacemaker zajmie się instalowaniem folderu podczas uruchamiania zasobu klastrowanego fs. Dzięki zastosowaniu mechanizmu blokującego zapewni, że system plików (FS) nigdy nie zostanie zamontowany dwukrotnie.

  1. Uruchom mount -a polecenie dla systemu, aby zaktualizować zamontowane ścieżki.

  2. Skopiuj pliki bazy danych i dziennika, które zapisałeś do /var/opt/mssql/tmp, na nowo zamontowany udział /var/opt/mssql/data. Ten krok należy wykonać tylko w węźle podstawowym. Upewnij się, że przyznasz użytkownikowi lokalnemu mssql uprawnienia do odczytu zapisu.

    sudo chown mssql /var/opt/mssql/data
    sudo chgrp mssql /var/opt/mssql/data
    sudo su mssql
    cp /var/opt/mssql/tmp/* /var/opt/mssql/data/
    rm /var/opt/mssql/tmp/*
    exit
    
  3. Sprawdź, czy program SQL Server rozpoczyna się pomyślnie od nowej ścieżki pliku. Zrób to w każdym węźle. W tym momencie tylko jeden węzeł powinien uruchamiać program SQL Server naraz. Oba te elementy nie mogą być uruchamiane jednocześnie, ponieważ obie będą próbowały uzyskać dostęp do plików danych jednocześnie (aby uniknąć przypadkowego uruchomienia programu SQL Server w obu węzłach, użyj zasobu klastra systemu plików, aby upewnić się, że udział nie jest zainstalowany dwukrotnie przez różne węzły). Następujące polecenia uruchamiają program SQL Server, sprawdzają stan, a następnie zatrzymują program SQL Server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

W tym momencie oba wystąpienia programu SQL Server są skonfigurowane do pracy z plikami bazy danych na wspólnej pamięci. Następnym krokiem jest skonfigurowanie programu SQL Server dla programu Pacemaker.

Instalowanie i konfigurowanie programu Pacemaker w każdym węźle klastra

  1. W obu węzłach klastra 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
    

    Ostrzeżenie

    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.

  2. Otwórz porty firewalla Pacemaker na obu węzłach klastra. 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, należy otworzyć następujące porty, aby program Pacemaker mógł komunikować się z innymi węzłami w klastrze:

    • TCP: Porty 2224, 3121, 21064
    • UDP: Port 5405
  3. Zainstaluj pakiety Pacemaker w każdym węźle.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. 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 w obu węzłach.

    sudo passwd hacluster
    
  5. Włącz i uruchom pcsd usługę oraz program Pacemaker. Umożliwi to węzłom ponowne dołączanie do klastra po ponownym uruchomieniu. Uruchom następujące polecenie w obu węzłach.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Zainstaluj agenta zasobów FCI dla SQL Server. Uruchom następujące polecenia w obu węzłach.

    sudo yum install mssql-server-ha
    

Konfigurowanie agenta izolacji

Urządzenie STONITH zapewnia agenta ochrony. Konfigurowanie programu Pacemaker w systemie Red Hat Enterprise Linux na platformie Azure zawiera przykład tworzenia urządzenia STONITH dla tego klastra na platformie Azure. Zmodyfikuj instrukcje dotyczące środowiska.

Tworzenie klastra

  1. W jednym z węzłów utwórz klaster.

    sudo pcs cluster auth <nodeName1 nodeName2 ...> -u hacluster
    sudo pcs cluster setup --name <clusterName> <nodeName1 nodeName2 ...>
    sudo pcs cluster start --all
    
  2. Skonfiguruj zasoby klastra dla zasobów SQL Server, systemu plików, i wirtualnych zasobów IP, a następnie wypchnij konfigurację do klastra. Potrzebne są następujące informacje:

    • Nazwa zasobu programu SQL Server: nazwa zasobu klastrowanego programu SQL Server.
    • Zmienna nazwa zasobu IP: nazwa zasobu wirtualnego adresu IP.
    • Adres IP: adres IP używany przez klientów do nawiązywania połączenia z wystąpieniem klastra programu SQL Server.
    • Nazwa zasobu systemu plików: nazwa zasobu systemu plików.
    • device: ścieżka udziału NFS
    • urządzenie: ścieżka lokalna, która jest instalowana w udziale
    • fstype: Typ udziału plików (czyli nfs)

    Zaktualizuj wartości z następującego skryptu dla danego środowiska. Uruchom polecenie na jednym węźle, aby skonfigurować i uruchomić usługę klastrowaną.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create <sqlServerResourceName> ocf:mssql:fci
    sudo pcs -f cfg resource create <floatingIPResourceName> ocf:heartbeat:IPaddr2 ip=<ip Address>
    sudo pcs -f cfg resource create <fileShareResourceName> Filesystem device=<networkPath> directory=<localPath> fstype=<fileShareType>
    sudo pcs -f cfg constraint colocation add <virtualIPResourceName> <sqlResourceName>
    sudo pcs -f cfg constraint colocation add <fileShareResourceName> <sqlResourceName>
    sudo pcs cluster cib-push cfg
    

    Na przykład poniższy skrypt tworzy zasób klastrowany programu SQL Server o nazwie mssqlha, a zmienny zasób IP z adresem 10.0.0.99IP . Tworzy również zasób systemu plików i dodaje ograniczenia, dzięki czemu wszystkie zasoby są kolokowane w tym samym węźle co zasób SQL.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create mssqlha ocf:mssql:fci
    sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.0.0.99
    sudo pcs -f cfg resource create fs Filesystem device="10.8.8.0:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs"
    sudo pcs -f cfg constraint colocation add virtualip mssqlha
    sudo pcs -f cfg constraint colocation add fs mssqlha
    sudo pcs cluster cib-push cfg
    

    Po zastosowaniu konfiguracji program SQL Server zostanie uruchomiony na jednym węźle.

  3. Sprawdź, czy program SQL Server został uruchomiony.

    sudo pcs status
    

    Poniższy przykład pokazuje wyniki pomyślnego uruchomienia klastrowanego wystąpienia programu SQL Server przez Pacemaker.

    fs     (ocf::heartbeat:Filesystem):    Started sqlfcivm1
    virtualip     (ocf::heartbeat:IPaddr2):      Started sqlfcivm1
    mssqlha  (ocf::mssql:fci): Started sqlfcivm1
    
    PCSD Status:
     sqlfcivm1: Online
     sqlfcivm2: Online
    
    Daemon Status:
     corosync: active/disabled
     pacemaker: active/enabled
     pcsd: active/enabled