Sdílet prostřednictvím


Konfigurace clusteru Pacemaker pro skupiny dostupnosti SQL Serveru

platí pro:SQL Server – Linux

Tento článek popisuje, jak vytvořit cluster se třemi uzly v Linuxu pomocí Pacemakeru a přidat dříve vytvořenou skupinu dostupnosti jako prostředek v clusteru. Pro zajištění vysoké dostupnosti skupina dostupnosti v Linuxu vyžaduje tři uzly – viz Vysoká dostupnost a ochrana dat pro konfigurace skupin dostupnosti.

Poznámka

Komunikace bez předsudků

Tento článek obsahuje odkazy na termín otrok, který Microsoft považuje za urážlivý, pokud se používá v tomto kontextu. Termín se zobrazí v tomto článku, protože se aktuálně zobrazuje v softwaru. Když se termín odebere ze softwaru, odebereme ho z článku.

SQL Server není tak úzce integrovaný s Pacemakerem na Linuxu jako s Windows Server s podporou převzetí služeb při selhání (WSFC). Instance SQL Serveru není propojená s clusterem a veškerá orchestrace je řízena zvnějšku. Pacemaker poskytuje orchestraci prostředků clusteru. Název virtuální sítě je specifický pro clustering systému Windows Server s podporou převzetí služeb při selhání; ekvivalent v Pacemakeru neexistuje. Zobrazení dynamické správy skupin dostupnosti, která dotazují informace o clusteru, vrací prázdné řádky v clusterech Pacemaker. Pokud chcete vytvořit naslouchací službu pro transparentní znovupřipojení po přepnutí, ručně zaregistrujte název naslouchací služby v DNS s IP adresou použitou k vytvoření virtuálního prostředku IP adresy.

Stále můžete vytvořit naslouchací komponentu pro transparentní opětovné připojení po přepnutí, ale musíte ručně zaregistrovat název naslouchací komponenty na serveru DNS s IP adresou použitou k vytvoření virtuální IP (jak je vysvětleno v následujících částech).

Následující části projdou postupem nastavení clusteru Pacemaker a přidání skupiny dostupnosti jako prostředku v clusteru pro zajištění vysoké dostupnosti pro každou podporovanou linuxovou distribuci.

Vrstva clusterování je založená na doplňku Red Hat Enterprise Linux (RHEL) HA, který byl vytvořen na základě Pacemaker.

Poznámka

Přístup k úplné dokumentaci k Red Hatu vyžaduje platné předplatné.

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

Plán

Postup vytvoření skupiny dostupnosti na linuxových serverech pro zajištění vysoké dostupnosti se liší od kroků v clusteru s podporou převzetí služeb při selhání Windows Serveru. Následující seznam popisuje základní kroky:

  1. Konfigurace SQL Serveru na uzlech clusteru.

  2. Vytvoření skupiny dostupnosti.

  3. Nakonfigurujte správce prostředků clusteru, například Pacemaker. Tyto pokyny jsou v tomto článku.

    Způsob konfigurace správce prostředků clusteru závisí na konkrétní distribuci Linuxu.

    Důležitý

    Produkční prostředí vyžadují fencing agenta pro zajištění vysoké dostupnosti. Ukázky v této dokumentaci nepoužívají ochranné prostředky. Ukázky slouží pouze k testování a ověřování. Linuxový cluster používá mechanismus ohraničení k návratu clusteru do známého stavu. Způsob konfigurace ohraničení závisí na distribuci a prostředí. V současné době není v některých cloudových prostředích k dispozici ohraničení. Další informace najdete v tématu Zásady podpory pro clustery s vysokou dostupností RHEL – Virtualizační platformy.

  4. Přidejte skupinu dostupnosti jako zdroj v clusteru.

Konfigurace vysoké dostupnosti pro RHEL

Pokud chcete nakonfigurovat vysokou dostupnost pro RHEL, povolte předplatné s vysokou dostupností a nakonfigurujte Pacemaker.

Povolení předplatného s vysokou dostupností pro RHEL

Každý uzel v clusteru musí mít odpovídající předplatné pro RHEL a doplněk Vysoká dostupnost. Projděte si požadavky v oddílu , jak instalovat balíčky clusteru s vysokou dostupností v systému Red Hat Enterprise Linux. Při konfiguraci předplatného a úložišť postupujte takto:

  1. Zaregistrujte systém.

    sudo subscription-manager register
    

    Zadejte svoje uživatelské jméno a heslo.

  2. Zobrazí seznam dostupných fondů pro registraci.

    sudo subscription-manager list --available
    

    V seznamu dostupných fondů si poznamenejte ID fondu pro předplatné s vysokou dostupností.

  3. Aktualizujte následující skript. Nahraďte <pool id> ID fondu pro zajištění vysoké dostupnosti z předchozího kroku. Spuštěním skriptu připojte předplatné.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Povolte úložiště.

    RHEL 7

    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    

    RHEL 8

    sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
    

Další informace najdete v tématu Pacemaker – opensourcový cluster s vysokou dostupností.

Po nakonfigurování předplatného proveďte následující kroky a nakonfigurujte Pacemaker:

Konfigurace Pacemakeru

Po registraci předplatného proveďte následující kroky a nakonfigurujte Pacemaker:

  1. Na všech uzlech clusteru otevřete porty firewallu pro 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 brána firewall nemá integrovanou konfiguraci vysoké dostupnosti, otevřete pro Pacemaker následující porty.

    • TCP: Porty 2224, 3121, 21064
    • UDP: Port 5405
  2. Nainstalujte balíčky Pacemaker na všechny uzly.

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

    sudo passwd hacluster
    
  4. Pokud chcete uzlům umožnit opětovné připojení clusteru po restartování, povolte a spusťte službu pcsd a Pacemaker. Na všech uzlech spusťte následující příkaz.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Vytvořte cluster. Cluster vytvoříte spuštěním následujícího příkazu:

    RHEL 7

    sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
    sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL 8

    V případě RHEL 8 je potřeba uzly ověřit samostatně. Po zobrazení výzvy ručně zadejte uživatelské jméno a heslo pro hacluster.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    Poznámka

    Pokud jste dříve nakonfigurovali cluster na stejných uzlech, musíte při spuštění pcs cluster setuppoužít možnost --force . Tato možnost je ekvivalentní spuštění pcs cluster destroy. Pokud chcete znovu povolit Pacemaker, spusťte sudo systemctl enable pacemaker.

  6. Nainstalujte agenta prostředků SQL Serveru pro SQL Server. Na všech uzlech spusťte následující příkazy.

    sudo yum install mssql-server-ha
    

Po nakonfigurování Pacemakeru použijte k interakci s clusterem pcs. Z clusteru spusťte všechny příkazy na jednom uzlu.

Úvahy o několika síťových rozhraních

Při nastavování vysoké dostupnosti u serverů s více síťovými kartami postupujte podle těchto návrhů:

  • Ujistěte se, že je soubor hosts nastavený tak, aby se IP adresy serveru pro více síťových adaptérů přeložily na název hostitele serveru s Linuxem na každém uzlu.

  • Při nastavování clusteru pomocí Pacemakeru by mělo použití názvů hostitelů serverů umožnit Corosyncu nakonfigurovat nastavení pro všechny síťové karty. Chceme jenom komunikaci Pacemaker/Corosync přes jednu síťovou kartu. Po nakonfigurování clusteru Pacemaker upravte konfiguraci v souboru corosync.conf a aktualizujte IP adresu vyhrazené síťové karty, kterou chcete použít pro komunikaci Pacemaker/Corosync.

  • <hostname> zadané v souboru corosync.conf by měly být stejné jako výstup zadaný při zpětném vyhledávání (ping -a <ip_address>) a měl by to být krátký název nakonfigurovaný na hostiteli. Ujistěte se, že soubor hosts také představuje správnou IP adresu pro překlad názvů na IP adresy.

Změny v příkladu souboru corosync.conf jsou zvýrazněné níže:

  nodelist {
    node {
        ring0_addr: <ip_address_of_node1_NIC1>
        name: <hostname_of_node1>
        nodeid: 1
    }
    node {
        ring0_addr: <ip_address_of_node2_NIC1>
        name: <hostname_of_node2>
        nodeid: 2
    }
    node {
        ring0_addr: <ip_address_of_node3_NIC1>
        name: <hostname_of_node3>
        nodeid: 3
    }
  }

Konfigurace zařízení pro ohraničení

Dodavatelé clusteru Pacemaker vyžadují ohraničení uzlu, které selhalo, pomocí zařízení pro ohraničení nakonfigurované pro podporované nastavení clusteru. Pokud Správce prostředků clusteru nemůže určit stav uzlu nebo prostředku na uzlu, propojení cluster znovu přenese do známého stavu.

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

Ohraničení na úrovni prostředků zajišťuje, aby nedošlo k poškození dat v výpadku konfigurací prostředku. K označení disku na uzlu jako zastaralého při výpadku komunikačního propojení můžete například použít ohraničení na úrovni prostředků.

Ohraničení na úrovni uzlu zajišťuje, že uzel nespouští žádné prostředky. To se provádí resetováním uzlu. Pacemaker podporuje širokou škálu zařízení pro šermování. Mezi příklady patří nerušitelný zdroj napájení nebo karty rozhraní pro správu pro servery.

Informace o ohraničení uzlu, který selhal, najdete v následujících článcích:

Poznámka

Vzhledem k tomu, že konfigurace ohraničení na úrovni uzlu závisí silně na vašem prostředí, zakažte ji pro účely tohoto kurzu (dá se nakonfigurovat později). Následující skript zakáže ohraničení na úrovni uzlů:

sudo pcs property set stonith-enabled=false

Zakázání oplocení je určené jenom pro účely testování. Pokud plánujete používat Pacemaker v produkčním prostředí, měli byste naplánovat implementaci ohraničení v závislosti na vašem prostředí a ponechat ji povolenou.

Nastavit vlastnost clusteru interval pro opětovnou kontrolu clusteru

cluster-recheck-interval označuje interval dotazování, ve kterém cluster kontroluje změny parametrů prostředků, omezení nebo jiných možností clusteru. Pokud replika přestane fungovat, klastr se pokusí restartovat repliku v intervalu určeném hodnotami failure-timeout a cluster-recheck-interval. Pokud je například failure-timeout nastaveno na 60 sekund a cluster-recheck-interval nastaveno na 120 sekund, restartování proběhne v intervalu, který je větší než 60 sekund, ale menší než 120 sekund. Doporučujeme nastavit časový limit selhání na 60 sekund a cluster-recheck-interval na hodnotu větší než 60 sekund. Nastavení cluster-recheck-interval na malou hodnotu se nedoporučuje.

Chcete-li aktualizovat hodnotu vlastnosti na 2 minutes, spusťte:

sudo pcs property set cluster-recheck-interval=2min

Pokud již máte prostředek skupiny dostupnosti spravovaný clusterem Pacemaker, balíček Pacemaker 1.1.18-11.el7 zavedl změnu chování pro nastavení clusteru start-failure-is-fatal, když je jeho hodnota false. Tato změna má vliv na pracovní postup převzetí služeb při selhání. Pokud dojde k výpadku primární repliky, očekává se, že cluster přepne na jednu z dostupných sekundárních replik. Místo toho si uživatelé všimnou, že se cluster neustále pokouší spustit neúspěšnou primární repliku. Pokud se primární replika nikdy nepřipojí online (kvůli trvalému výpadku), cluster neprovede převzetí služeb na jinou dostupnou sekundární repliku. Z důvodu této změny už není platná dříve doporučená konfigurace pro nastavení start-failure-is-fatal a nastavení se musí vrátit zpět na výchozí hodnotu true.

Kromě toho je třeba aktualizovat prostředek AG, aby zahrnoval vlastnost failure-timeout.

Pro aktualizaci hodnoty vlastnosti na true spusťte:

sudo pcs property set start-failure-is-fatal=true

Pokud chcete aktualizovat vlastnost prostředku ag_clusterfailure-timeout na 60s, spusťte:

pcs resource update ag_cluster meta failure-timeout=60s

Informace o vlastnostech clusteru Pacemaker naleznete v tématu Vlastnosti clusterů Pacemaker.

Vytvoření přihlášení k SQL Serveru pro Pacemaker

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á.

  1. Na všech instancích SQL Serveru vytvořte přihlášení k serveru pro Pacemaker.

    Následující Transact-SQL vytvoří přihlášení. Nahraďte <password> vlastním složitým heslem.

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

    V době vytvoření skupiny dostupnosti vyžaduje uživatel Pacemaker ALTER, CONTROLa VIEW DEFINITION oprávnění ke skupině dostupnosti po vytvoření, ale před tím, než se do ní přidají všechny uzly.

  2. Na všech instancích SQL Serveru uložte přihlašovací údaje pro přihlášení do SQL Serveru.

    Nahraďte <password> vlastním složitým heslem.

    echo 'pacemakerLogin' >> ~/pacemaker-passwd
    echo '<password>' >> ~/pacemaker-passwd
    sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
    

Vytvořte prostředek skupiny dostupnosti

K vytvoření prostředku skupiny dostupnosti použijte příkaz pcs resource create a nastavte vlastnosti prostředku. Následující příkaz vytvoří prostředek typu hlavní/podřízený ocf:mssql:ag pro skupinu dostupnosti s názvem ag1.

RHEL 7

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true

RHEL 8

S dostupností RHEL 8se vytvářecí syntaxe změnila. Pokud používáte RHEL 8, terminologie master se změnila na promotable. Místo výše uvedeného příkazu použijte následující příkaz create:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s promotable notify=true

Poznámka

Když prostředek vytvoříte a poté pravidelně, agent prostředků Pacemaker automaticky nastaví hodnotu REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ve skupině dostupnosti na základě konfigurace této skupiny. Pokud má například skupina dostupnosti tři synchronní repliky, agent nastaví REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT na 1. Podrobnosti a další možnosti konfigurace najdete v tématu Vysoká dostupnost a ochrana dat pro konfigurace skupin dostupnosti.

Vytvoření prostředku virtuální IP adresy

Pokud chcete vytvořit prostředek virtuální IP adresy, spusťte na jednom uzlu následující příkaz. Použijte dostupnou statickou IP adresu ze sítě. Nahraďte IP adresu mezi <10.128.16.240> platnou IP adresou.

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>

V Pacemakeru neexistuje žádný ekvivalent názvu virtuálního serveru. Pokud chcete použít připojovací řetězec odkazující na název řetězcového serveru místo IP adresy, zaregistrujte virtuální IP adresu a požadovaný název virtuálního serveru v DNS. V případě konfigurací zotavení po havárii zaregistrujte požadovaný název virtuálního serveru a IP adresu u serverů DNS v primární i lokalitě zotavení po havárii.

Přidání omezení kolokace

V téměř každém rozhodnutí v clusteru Pacemaker, například při výběru místa, kde by měl prostředek běžet, se postupuje na základě porovnání hodnocení. Skóre se vypočítává na každý zdroj. Správce prostředků clusteru zvolí uzel s nejvyšším skóre pro konkrétní prostředek. Pokud má uzel záporné skóre pro prostředek, nelze tento prostředek na daný uzel přiřadit.

V klastru Pacemaker můžete prostřednictvím omezení ovlivňovat rozhodnutí klastru. Omezení mají skóre. Pokud má omezení nižší skóre než INFINITY, Pacemaker ho považuje za doporučení. Skóre INFINITY je povinné.

Pokud chcete zajistit, aby primární replika a prostředky virtuální IP adresy běžely na stejném hostiteli, definujte omezení kolokace se skóre INFINITY. Pokud chcete přidat omezení kolokace, spusťte na jednom uzlu následující příkaz.

RHEL 7

Když vytvoříte prostředek ag_cluster v RHEL 7, vytvoří prostředek jako ag_cluster-master. Pro RHEL 7 použijte následující příkaz:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

RHEL 8

Když vytvoříte prostředek ag_cluster v RHEL 8, vytvoří prostředek jako ag_cluster-clone. Pro RHEL 8 použijte následující příkaz:

sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master

Přidání omezení řazení

Omezení kolokace má implicitní omezení řazení. Než přesune prostředek skupiny dostupnosti, přesune prostředek virtuální IP adresy. Ve výchozím nastavení je posloupnost událostí:

  1. Uživatel přesune pcs resource move na primární uzel skupiny dostupnosti z uzlu1 na uzel2.

  2. Prostředek virtuální IP adresy se zastaví na uzlu 1.

  3. Virtuální IP prostředek se spustí na uzlu 2.

    Poznámka

    V tomto okamžiku IP adresa dočasně odkazuje na uzel 2, zatímco uzel 2 je stále sekundární uzel před převzetím služeb při selhání.

  4. Primární skupina dostupnosti na uzlu 1 se sníží na sekundární.

  5. Sekundární skupina dostupnosti na uzlu 2 je povýšena na primární.

Aby se zabránilo dočasnému nasměrování IP adresy na uzel se sekundárním uzlem před přechodem na jiný uzel při selhání, přidejte omezující podmínku.

Pokud chcete přidat omezení řazení, spusťte na jednom uzlu následující příkaz:

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Důležitý

Po nakonfigurování clusteru a přidání skupiny dostupnosti jako prostředku clusteru nemůžete použít Transact-SQL k převzetí služeb při selhání prostředků skupiny dostupnosti. Prostředky clusteru SQL Serveru na Linuxu nejsou tak úzce propojené s operačním systémem jako na clusteru převzetí služeb při selhání Windows Serveru (WSFC). Služba SQL Serveru neví o přítomnosti clusteru. Veškerá orchestrace se provádí prostřednictvím nástrojů pro správu clusteru. V RHEL nebo Ubuntu používají pcs a v SLES používají nástroje crm.

Ruční selhání skupiny dostupnosti pomocí pcs. Nezahajujte převzetí služeb při selhání pomocí jazyka Transact-SQL. Pokyny najdete v tématu převzetí služeb při selhání.