Kör failover-klusterinstans på Linux

Gäller för:SQL Server i Linux

Den här artikeln förklarar hur man kör en SQL Server failover-klusterinstans (FCI) på Linux. För att skapa en SQL Server FCI på Linux, se Konfigurera failover-klusterinstans på Linux (RHEL).

Beskrivning av arkitektur

Klustringslagret baseras på Red Hat Enterprise Linux (RHEL) HA-tillägget som byggts ovanpå Pacemaker. Corosync och Pacemaker samordnar klusterkommunikation och resurshantering. SQL Server-instansen är aktiv på en nod i taget.

Följande diagram illustrerar komponenterna i ett Linux-kluster med SQL Server.

Diagram över ett delat SQL Server-failoverkluster på Linux.

För mer information om klusterkonfiguration, resursagentalternativ och hantering, besök RHEL-referensdokumentationen.

Failover

Failover för FCI:er är lik den i ett Windows Server-failoverkluster (WSFC). Om klusternoden som är värd för FCI:n upplever någon form av fel bör FCI automatiskt redundansväxla till en annan nod. Till skillnad från en WSFC finns det inget sätt att ange föredragna ägare, och därför väljer Pacemaker noden som blir den nya värdservern för FCI.

Ibland kan du vilja manuellt överföra FCI till en annan nod. Processen är inte densamma som med FCI på en WSFC. På en WSFC redundansväxlar du resurser på rollnivå. I Pacemaker väljer du en resurs att flytta, och om alla begränsningar är korrekta flyttas allt annat också.

Hur redundansväxling utförs beror på Linux-distributionen. Följ instruktionerna för din Linux-distribution.

Manuell failover (RHEL eller Ubuntu)

Utför följande steg för att utföra en manuell redundansväxling på Red Hat Enterprise Linux (RHEL) eller Ubuntu-servrar.

  1. Utfärda följande kommando:

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>är namnet på pacemaker-resursen för SQL Server FCI, och <NewHostNode> är namnet på klusternoden som du vill ska hosta FCI:n.

  2. Under en manuell redundansväxling skapar Pacemaker en platsbegränsning för den resurs som valdes att flytta manuellt. Om du vill se den här begränsningen kör du sudo pcs constraint.

  3. När failovern är klar, ta bort begränsningen:

    sudo pcs resource clear <FCIResourceName>
    

Manuell redundansväxling (SLES)

Note

Från och med SQL Server 2025 (17.x) stöds inte SUSE Linux Enterprise Server (SLES). För SQL Server 2022 (16.x) och tidigare versioner stöds endast SLES 15.

I SUSE Linux Enterprise Server (SLES) använder du kommandot migrate för att manuellt fälla över en SQL Server FCI. Ett exempel:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> är resursnamnet för failover-klusterinstansen, och <NewHostNode> är namnet på den nya destinationsvärden.

Övervaka ett failover-kluster

Visa aktuell klusterstatus:

sudo pcs status

Visa klustrets och resursernas livestatus:

sudo crm_mon

Se resursagentloggarna på /var/log/cluster/corosync.log.

Lägga till en nod i ett kluster

  1. Kontrollera IP-adressen för varje nod. Följande skript visar IP-adressen för din aktuella nod.

    ip addr show
    
  2. Den nya noden behöver ett unikt namn som är 15 tecken eller färre. Ange datornamnet genom att lägga till det i /etc/hosts. Med följande skript kan du redigera /etc/hosts med vi.

    sudo vi /etc/hosts
    

    I följande exempel visas /etc/hosts med tillägg för tre noder med namnet sqlfcivm1, sqlfcivm2och 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
    

    Filen ska vara densamma på varje nod.

  3. Stoppa SQL Server-tjänsten på den nya noden.

  4. Följ instruktionerna för att montera databasfilkatalogen på den delade platsen.

    Från NFS-servern installerar du nfs-utils:

    sudo yum -y install nfs-utils
    

    Öppna brandväggen på klienter och NFS-servern:

    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
    

    Redigera /etc/fstab-filen så att den innehåller monteringskommandot:

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

    Kör mount -a för att ändringarna ska börja gälla.

  5. På den nya noden skapar du en fil för att lagra SQL Server-användarnamnet och lösenordet för Pacemaker-inloggningen. Följande kommando skapar och fyller i den här filen:

    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

    Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.

  6. Öppna Pacemaker-brandväggsportarna på den nya noden. Om du vill öppna dessa portar med firewalldkör du följande kommando:

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

    Om du använder en annan brandvägg som inte har en inbyggd högtillgänglighetskonfiguration, öppna följande portar för att Pacemaker ska kunna kommunicera med andra noder i klustret:

    • TCP: Portar 2224, 3121, 21064
    • UDP: Port 5405
  7. Installera Pacemaker-paket på den nya noden.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  8. Ange lösenordet för standardanvändaren som skapas när du installerar Pacemaker- och Corosync-paket. Använd samma lösenord som de befintliga noderna.

    sudo passwd hacluster
    
  9. Aktivera och starta pcsd-tjänsten och Pacemaker. Den nya noden kan återansluta till klustret efter en omstart. Kör följande kommando på den nya noden.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    sudo systemctl start pacemaker
    
  10. Installera FCI-resursagenten för SQL Server. Kör följande kommando på den nya noden.

    sudo yum install mssql-server-ha
    
  11. På en befintlig nod i klustret, autentisera den nya noden och lägg till den i klustret:

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

Ta bort noder från ett kluster

Kör följande kommando för att ta bort en nod från ett kluster:

sudo pcs cluster node remove <nodeName>

Ändra resursövervakningsfrekvensen

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

Följande exempel sätter övervakningsintervallet till 2 sekunder för resursen mssqlha :

sudo pcs resource op monitor interval=2s mssqlha

Felsökning

När du felsöker klustret hjälper det dig att förstå hur de tre daemonerna fungerar tillsammans för att hantera klusterresurser.

Daemon Description
Corosync Ger kvorummedlemskap och meddelanden mellan klusternoder.
Hjärtstimulator Finns ovanpå Corosync och tillhandahåller tillståndsdatorer för resurser.
PCSD Hanterar både Pacemaker och Corosync via pcs verktyg.

PCSD måste köras för att kunna använda pcs verktyg.

Aktuell klusterstatus

sudo pcs status returnerar grundläggande information om klustret, kvorum, noder, resurser och daemonstatus för varje nod.

Följande exempel visar felfri utdata för Pacemaker-quorum:

Cluster name: MyAppSQL
Last updated: Thu Oct 31 12:00:00 2024  Last change: Thu 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

I det här exemplet betyder partition with quorum att en majoritet av noderna är online. Om klustret förlorar en majoritet av noderna, returnerar pcs statuspartition WITHOUT quorum och alla resurser stoppas.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] returnerar namnet på alla noder som för närvarande deltar i klustret. Om några noder inte deltar returnerar pcs statusOFFLINE: [<nodename>].

PCSD Status visar klusterstatus för varje nod.

Orsaker till varför en nod kan vara offline

Kontrollera följande objekt när en nod är offline.

  • Brandvägg

    Öppna följande portar på alla noder för att Pacemaker ska kunna kommunicera:

    • TCP: Portar 2224, 3121, 21064
    • UDP: Port 5405
  • Pacemaker- eller Corosync-tjänster som kör

  • Node-kommunikation

  • Nodnamnmappningar