Sdílet prostřednictvím


Konfigurace RHEL clusteru s převzetím služeb při selhání (FCI) pro SQL Server

platí pro:SQL Server – Linux

Tato příručka obsahuje pokyny k vytvoření clusteru se sdíleným diskem se dvěma uzly pro SQL Server v Systému Red Hat Enterprise Linux. Vrstva clusteringu je založená na Red Hat Enterprise Linux (RHEL) HA doplňku, který je postaven na Pacemakeru. Instance SQL Serveru je aktivní buď na jednom uzlu, nebo na druhém.

Poznámka

Přístup k doplňku Red Hat HA a dokumentaci vyžaduje předplatné.

Jak ukazuje následující diagram, úložiště se prezentuje na dvou serverech. Clusteringové komponenty – Corosync a Pacemaker – koordinují komunikaci a správu prostředků. Jeden ze serverů má aktivní připojení k prostředkům úložiště a SQL Serveru. Když Pacemaker zjistí selhání, jsou komponenty clusteringu zodpovědné za přesun prostředků do druhého uzlu.

Diagram clusteru SQL Serveru se sdíleným diskem Red Hat Enterprise Linux 7

Další informace o konfiguraci clusteru, možnostech agentů prostředků a správě najdete v referenční dokumentaci RHEL.

V tomto okamžiku není integrace SQL Serveru s Pacemakerem tak spojená s WSFC ve Windows. Z pohledu SQL Serveru neexistuje žádné znalosti o přítomnosti clusteru, všechny orchestrace jsou zvenčí dovnitř a služba je řízena jako samostatná instance pomocí Pacemaker. Například dmvs clusteru sys.dm_os_cluster_nodes a sys.dm_os_cluster_properties nebudou obsahovat žádné záznamy.

Pokud chtějí použít připojovací řetězec, který odkazuje na název serveru a nepoužívá IP adresu, budou muset na svém DNS serveru zaregistrovat IP adresu použitou k vytvoření prostředku virtuální IP adresy (jak je vysvětleno v následujících částech) pod vybraným názvem serveru.

Následující části projdou postupem nastavení řešení clusteru s podporou převzetí služeb při selhání.

Požadavky

K dokončení následujícího kompletního scénáře potřebujete dva počítače pro nasazení clusteru se dvěma uzly a dalším serverem pro konfiguraci serveru NFS. Následující kroky popisují, jak budou tyto servery nakonfigurovány.

Nastavení a konfigurace operačního systému na každém uzlu clusteru

Prvním krokem je konfigurace operačního systému na uzlech clusteru. Za účelem tohoto návodu použijte RHEL s platným předplatným doplňku HA.

Instalace a konfigurace SQL Serveru na každém uzlu clusteru

  1. Instalace a nastavení SQL Serveru na obou uzlech Podrobné pokyny najdete v tématu Pokyny k instalaci SQL Serveru v Linuxu.

  2. Označte jeden uzel jako primární a druhý jako sekundární pro účely konfigurace. Použijte tyto termíny při používání tohoto průvodce.

  3. Na sekundárním uzlu zastavte a zakažte SQL Server.

    Následující příklad zastaví a zakáže SQL Server:

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

Poznámka

V době instalace se pro instanci SQL Serveru vygeneruje hlavní klíč serveru a umístí se do /var/opt/mssql/secrets/machine-key. V Linuxu SQL Server vždy běží jako místní účet s názvem mssql. Vzhledem k tomu, že se jedná o místní účet, jeho identita se nesdílí napříč uzly. Proto je potřeba zkopírovat šifrovací klíč z primárního uzlu do každého sekundárního uzlu, aby k němu každý místní mssql účet měl přístup k dešifrování hlavního klíče serveru.

  1. Na primárním uzlu vytvořte přihlášení k SQL Serveru pro Pacemaker a udělte přihlašovací oprávnění ke spuštění sp_server_diagnostics. Pacemaker používá tento účet k ověření, na kterém uzlu běží SQL Server.

    sudo systemctl start mssql-server
    

    Připojte se k databázi sql Serveru master pomocí účtu sa a spusťte následující příkaz:

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

    Opatrnost

    Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

    Případně můžete oprávnění nastavit na podrobnější úrovni. Přihlášení Pacemaker vyžaduje, aby VIEW SERVER STATE mohl dotazovat stav pomocí sp_server_diagnostics, setupadmin a ALTER ANY LINKED SERVER a aktualizovat název instance FCI názvem prostředku spuštěním sp_dropserver a sp_addserver.

  2. Na primárním uzlu zastavte a zakažte SQL Server.

  3. Nakonfigurujte soubor hostitelů pro každý uzel clusteru. Soubor hostitele musí obsahovat IP adresu a název každého uzlu clusteru.

    Zkontrolujte IP adresu pro každý uzel. Následující skript ukazuje IP adresu vašeho aktuálního uzlu.

    sudo ip addr show
    

    Nastavte název počítače na každém uzlu. Dejte každému uzlu jedinečný název, který je 15 znaků nebo méně. Nastavte název počítače tak, že ho přidáte do /etc/hosts. Následující skript umožňuje upravovat /etc/hosts pomocí vi.

    sudo vi /etc/hosts
    

    Následující příklad ukazuje /etc/hosts s dodatky pro dva uzly pojmenované sqlfcivm1 a sqlfcivm2.

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

V další části nakonfigurujete sdílené úložiště a přesunete do úložiště soubory databáze.

Konfigurace sdíleného úložiště a přesun databázových souborů

Existují různá řešení pro poskytování sdíleného úložiště. Tento návod ukazuje konfiguraci sdíleného úložiště se systémem souborů NFS. Doporučujeme postupovat podle osvědčených postupů a používat Protokol Kerberos k zabezpečení systému souborů NFS. Příklad najdete v tématu RHEL7: Použití protokolu Kerberos k řízení přístupu k síťovým sdíleným složkám NFS.

Varování

Pokud systém souborů NFS nezabezpečíte, každý, kdo získá přístup k vaší síti a falšuje IP adresu uzlu SQL, bude mít přístup k vašim datovým souborům. Jako vždy se ujistěte, že systém před použitím v produkčním prostředí modelujete. Další možností úložiště je použití sdílené složky SMB.

Konfigurace sdíleného úložiště se systémem souborů NFS

Důležitý

Hostování databázových souborů na serveru NFS s verzí <4 není v této verzi podporované. To zahrnuje použití systému souborů NFS pro clustering s převzetím služeb při selhání sdíleného disku a také pro databáze na neklastrových instancích. Pracujeme na povolení dalších verzí serveru NFS v nadcházejících verzích.

Na serveru NFS proveďte následující kroky:

  1. Instalace nfs-utils

    sudo yum -y install nfs-utils
    
  2. Povolte a spusťte rpcbind

    sudo systemctl enable rpcbind && sudo systemctl start rpcbind
    
  3. Povolení a spuštění nfs-server

    sudo systemctl enable nfs-server && sudo systemctl start nfs-server
    
  4. Upravte /etc/exports a exportujte adresář, který chcete sdílet. Pro každou požadovanou sdílenou složku potřebujete jeden řádek. Například:

    /mnt/nfs  10.8.8.0/24(rw,sync,no_subtree_check,no_root_squash)
    
  5. Exportovat akcie

    sudo exportfs -rav
    
  6. Ověřte, že jsou cesty sdílené nebo exportované, a spusťte je ze serveru NFS.

    sudo showmount -e
    
  7. Přidání výjimky v nástroji SELinux

    sudo setsebool -P nfs_export_all_rw 1
    
  8. Otevřete bránu firewall serveru.

    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
    

Konfigurace všech uzlů clusteru pro připojení ke sdílenému úložišti NFS

Na všech uzlech clusteru proveďte následující kroky.

  1. Instalovat nfs-utils

    sudo yum -y install nfs-utils
    
  2. Otevřete bránu firewall na klientech a serveru 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. Ověřte, že se sdílené složky NFS zobrazují na klientských počítačích.

    sudo showmount -e <IP OF NFS SERVER>
    
  4. Tento postup opakujte na všech uzlech clusteru.

Další informace o používání systému souborů NFS najdete v následujících zdrojích informací:

Připojte adresář databázových souborů ke sdílenému úložišti

  1. Na primárním uzlu pouzeuložte soubory databáze do dočasného umístění. Následující skript vytvoří nový dočasný adresář, zkopíruje soubory databáze do nového adresáře a odebere staré databázové soubory. Vzhledem k tomu, že SQL Server běží jako místní uživatel mssql, musíte se ujistit, že po přenosu dat do připojené sdílené složky má místní uživatel přístup ke sdílené složce pro čtení i zápis.

    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 všech uzlech clusteru upravte /etc/fstab soubor tak, aby zahrnoval příkaz mount.

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

    Následující skript ukazuje příklad úpravy.

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

Poznámka

Pokud zde doporučujeme použít prostředek systému souborů (FS), není nutné zachovat příkaz připojení v souboru /etc/fstab. Pacemaker se postará o připojení složky, když spustí clusterovaný prostředek FS. Díky ochrannému mechanismu se zajistí, že FS nebude nikdy připojen dvakrát.

  1. Spuštěním příkazu mount -a pro systém aktualizujte připojené cesty.

  2. Zkopírujte databázi a soubory protokolu, které jste uložili do /var/opt/mssql/tmp do nově připojené sdílené složky /var/opt/mssql/data. Tento krok je potřeba provést pouze na primárním uzlu. Ujistěte se, že místnímu uživateli mssql udělíte oprávnění ke čtení zápisu.

    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. Ověřte, že se SQL Server úspěšně spustí s novou cestou k souboru. Udělejte to na každém uzlu. V tomto okamžiku by měl SQL Server běžet pouze na jednom uzlu. Oba nejdou spustit současně, protože se oba pokusí získat přístup k datovým souborům současně (aby se zabránilo náhodnému spuštění SQL Serveru na obou uzlech, použijte prostředek clusteru systému souborů, abyste se ujistili, že sdílená složka není připojená dvakrát různými uzly). Následující příkazy spustí SQL Server, zkontrolují stav a pak zastaví SQL Server.

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

V tomto okamžiku jsou obě instance SQL Serveru nakonfigurované tak, aby běžely se soubory databáze ve sdíleném úložišti. Dalším krokem je konfigurace SQL Serveru pro Pacemaker.

Instalace a konfigurace Pacemakeru na každém uzlu clusteru

  1. Na obou uzlech clusteru vytvořte soubor pro uložení uživatelského jména a hesla SQL Serveru pro přihlášení Pacemaker. Následující příkaz vytvoří a naplní tento soubor:

    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
    

    Opatrnost

    Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

  2. Na obou uzlech clusteru otevřete porty brány firewall Pacemaker. Pokud chcete tyto porty otevřít pomocí firewalld, spusťte následující příkaz:

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

    Pokud používáte jinou bránu firewall, která nemá integrovanou konfiguraci vysoké dostupnosti, je potřeba otevřít následující porty, aby Pacemaker mohl komunikovat s jinými uzly v clusteru:

    • TCP: porty 2224, 3121, 21064
    • UDP: port 5405
  3. Nainstalujte balíčky Pacemaker na každý uzel.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Nastavte heslo pro výchozího uživatele, který se vytvoří při instalaci balíčků Pacemaker a Corosync. Na obou uzlech použijte stejné heslo.

    sudo passwd hacluster
    
  5. Povolte a spusťte službu pcsd a Pacemaker. Uzly se tak po restartování znovu připojí ke clusteru. Na obou uzlech spusťte následující příkaz.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Nainstalujte agenta prostředků FCI pro SQL Server. Na obou uzlech spusťte následující příkazy.

    sudo yum install mssql-server-ha
    

Konfigurace agenta fencingu

Zařízení STONITH poskytuje agenta šermování. Nastavení Pacemakeru v Red Hat Enterprise Linuxu v Azure poskytuje příklad vytvoření zařízení STONITH pro tento cluster v Azure. Upravte pokyny pro vaše prostředí.

Vytvoření clusteru

  1. Na jednom z uzlů vytvořte cluster.

    sudo pcs cluster auth <nodeName1 nodeName2 ...> -u hacluster
    sudo pcs cluster setup --name <clusterName> <nodeName1 nodeName2 ...>
    sudo pcs cluster start --all
    
  2. Nakonfigurujte prostředky clusteru pro SQL Server, systém souborů a prostředky virtuální IP adresy a odešlete konfiguraci do clusteru. Potřebujete následující informace:

    • název prostředku SQL Serveru: Název clusterovaného prostředku SQL Serveru.
    • název prostředku s plovoucí IP adresou: Název prostředku virtuální IP adresy.
    • IP adresa: IP adresa, kterou klienti používají pro připojení k clusterované instanci SQL Serveru.
    • název prostředku systému souborů: Název prostředku systému souborů.
    • zařízení: Cesta ke sdílené složce NFS
    • zařízení: Místní cesta, kterou je připojená ke sdílené složce
    • fstype: Typ sdílené složky (to znamená nfs)

    Aktualizujte hodnoty z následujícího skriptu pro vaše prostředí. Spuštěním na jednom uzlu nakonfigurujte a spusťte clusterovou službu.

    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
    

    Následující skript například vytvoří clusterovaný prostředek SQL Serveru s názvem mssqlhaa plovoucí prostředek IP s IP adresou 10.0.0.99. Vytvoří také prostředek systému souborů a přidá omezení, takže všechny prostředky jsou umístěny na stejném uzlu jako prostředek 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 nasdílení konfigurace se SQL Server spustí na jednom uzlu.

  3. Ověřte, že je sql Server spuštěný.

    sudo pcs status
    

    Následující příklad ukazuje výsledky, když Pacemaker úspěšně spustil clusterovanou instanci SQL Serveru.

    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