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.
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
Instalace a nastavení SQL Serveru na obou uzlech Podrobné pokyny najdete v tématu Pokyny k instalaci SQL Serveru v Linuxu.
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.
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.
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í účtusa
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
aALTER ANY LINKED SERVER
a aktualizovat název instance FCI názvem prostředku spuštěnímsp_dropserver
asp_addserver
.Na primárním uzlu zastavte a zakažte SQL Server.
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
asqlfcivm2
.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:
Instalace
nfs-utils
sudo yum -y install nfs-utils
Povolte a spusťte
rpcbind
sudo systemctl enable rpcbind && sudo systemctl start rpcbind
Povolení a spuštění
nfs-server
sudo systemctl enable nfs-server && sudo systemctl start nfs-server
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)
Exportovat akcie
sudo exportfs -rav
Ověřte, že jsou cesty sdílené nebo exportované, a spusťte je ze serveru NFS.
sudo showmount -e
Přidání výjimky v nástroji SELinux
sudo setsebool -P nfs_export_all_rw 1
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.
Instalovat
nfs-utils
sudo yum -y install nfs-utils
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
Ověřte, že se sdílené složky NFS zobrazují na klientských počítačích.
sudo showmount -e <IP OF NFS SERVER>
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í:
- servery NFS a brány firewall | Stack Exchange
- připojení svazku NFS | Příručka pro správce sítě pro Linux
- Konfigurace serveru NFS | Zákaznický portál Red Hat
Připojte adresář databázových souborů ke sdílenému úložišti
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
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.
Spuštěním příkazu
mount -a
pro systém aktualizujte připojené cesty.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živatelimssql
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
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
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á.
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
Nainstalujte balíčky Pacemaker na každý uzel.
sudo yum install pacemaker pcs fence-agents-all resource-agents
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
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
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
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
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
mssqlha
a plovoucí prostředek IP s IP adresou10.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.
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