Dela via


Konfigurera ett Pacemaker-kluster för SQL Server-tillgänglighetsgrupper

gäller för:SQL Server – Linux

Den här artikeln beskriver hur du skapar ett kluster med tre noder i Linux med hjälp av Pacemaker och lägger till en tidigare skapad tillgänglighetsgrupp som en resurs i klustret. För hög tillgänglighet kräver en tillgänglighetsgrupp i Linux tre noder – se Hög tillgänglighet och dataskydd för konfigurationer av tillgänglighetsgrupper.

Anmärkning

Den här artikeln innehåller referenser till termen slave, en term som Microsoft inte längre använder. När termen tas bort från programvaran tar vi bort den från den här artikeln.

SQL Server är inte lika nära integrerat med Pacemaker i Linux som med Windows Server-redundansklustring (WSFC). En SQL Server-instans känner inte till klustret och all orkestrering sker utifrån. Pacemaker tillhandahåller klusterresursorkestrering. Dessutom är namnet på det virtuella nätverket specifikt för Windows Server-redundansklustring. Det finns ingen motsvarighet i Pacemaker. Dynamiska hanteringsvyer för tillgänglighetsgrupp (DMV:er) som frågar efter klusterinformation returnerar tomma rader i Pacemaker-kluster. Om du vill skapa en lyssnare för transparent återanslutning efter redundansväxling registrerar du lyssnarnamnet i DNS manuellt med IP-adressen som används för att skapa den virtuella IP-resursen.

Du kan fortfarande skapa en lyssnare för transparent återanslutning efter redundansväxling, men du måste registrera lyssnarnamnet manuellt på DNS-servern med IP-adressen som används för att skapa den virtuella IP-resursen (enligt beskrivningen i följande avsnitt).

Följande avsnitt går igenom stegen för att konfigurera ett Pacemaker-kluster och lägga till en tillgänglighetsgrupp som resurs i klustret för hög tillgänglighet för varje Linux-distribution som stöds.

Klustringsskiktet baseras på Red Hat Enterprise Linux (RHEL) HA-tillägg som bygger på Pacemaker.

Anmärkning

Åtkomst till fullständig dokumentation för Red Hat kräver en giltig prenumeration.

Mer information om klusterkonfiguration, alternativ för resursagenter och hantering finns i RHEL-referensdokumentation.

Översikt

Stegen för att skapa en tillgänglighetsgrupp på Linux-servrar för hög tillgänglighet skiljer sig från stegen i ett Windows Server-redundanskluster. I följande lista beskrivs de övergripande stegen:

  1. Konfigurera SQL Server på klusternoderna.

  2. Skapa tillgänglighetsgruppen.

  3. Konfigurera en klusterresurshanterare, till exempel Pacemaker. Dessa instruktioner finns i den här artikeln.

    Hur du konfigurerar en klusterresurshanterare beror på den specifika Linux-distributionen.

    Viktigt!

    Produktionsmiljöer kräver en fäktningsagent för hög tillgänglighet. Demonstrationerna i den här dokumentationen använder inte fäktningsagenter. Demonstrationerna är endast till för testning och validering. Ett Linux-kluster använder fäktning för att återställa klustret till ett känt tillstånd. Hur du konfigurerar staket beror på distributionen och miljön. Fäktning är för närvarande inte tillgängligt i vissa molnmiljöer. Mer information finns i supportprinciper för RHEL-kluster med hög tillgänglighet – virtualiseringsplattformar.

  4. Lägg till tillgänglighetsgruppen som en resurs i klustret.

Konfigurera hög tillgänglighet för RHEL

Om du vill konfigurera hög tillgänglighet för RHEL aktiverar du prenumerationen med hög tillgänglighet och konfigurerar sedan Pacemaker.

Aktivera en prenumeration med hög tillgänglighet för RHEL

Varje nod i klustret måste ha en lämplig prenumeration för RHEL och tillägget för hög tillgänglighet. Läs kraven i Installera klusterpaket med hög tillgänglighet i Red Hat Enterprise Linux. Följ dessa steg för att konfigurera prenumerationen och lagringsplatserna:

  1. Registrera systemet.

    sudo subscription-manager register
    

    Ange användarnamn och lösenord.

  2. Visa en lista över tillgängliga pooler för registrering.

    sudo subscription-manager list --available
    

    I listan över tillgängliga pooler noterar du pool-ID:t för prenumerationen med hög tillgänglighet.

  3. Uppdatera följande skript. Ersätt <pool id> med pool-ID:t för hög tillgänglighet från föregående steg. Kör skriptet för att koppla prenumerationen.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Aktivera lagringsplatsen.

    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
    

    RHEL 9

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

Mer information finns i Pacemaker – Kluster med öppen källkod och hög tillgänglighet.

När du har konfigurerat prenumerationen utför du följande steg för att konfigurera Pacemaker:

Konfigurera pacemaker

När du har registrerat prenumerationen utför du följande steg för att konfigurera Pacemaker:

  1. Öppna Pacemaker-brandväggsportarna på alla klusternoder. 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 brandväggen inte har någon inbyggd konfiguration med hög tillgänglighet öppnar du följande portar för Pacemaker.

    • TCP: Portar 2224, 3121, 21064
    • UDP: Port 5405
  2. Installera Pacemaker-paket på alla noder.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  3. Ange lösenordet för standardanvändaren som skapas när du installerar Pacemaker- och Corosync-paket. Använd samma lösenord på alla noder.

    sudo passwd hacluster
    
  4. Aktivera och starta pcsd tjänsten och Pacemaker om du vill tillåta att noder ansluter till klustret igen efter omstarten. Kör följande kommando på alla noder.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Skapa klustret. Skapa klustret genom att köra följande kommando på en enda nod:

    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 och senare versioner

    För RHEL 8 och senare versioner måste du autentisera noderna separat. Ange användarnamnet och lösenordet manuellt när du uppmanas till det för 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
    

    Anmärkning

    Om du tidigare har konfigurerat ett kluster på samma noder måste du använda --force alternativet när du kör pcs cluster setup. Det här alternativet motsvarar att köra pcs cluster destroy. Om du vill återaktivera Pacemaker kör du sudo systemctl enable pacemaker.

  6. Installera SQL Server-resursagenten för SQL Server. Kör följande kommandon på alla noder.

    sudo yum install mssql-server-ha
    

När Pacemaker har konfigurerats använder du pcs för att interagera med klustret. Kör alla kommandon på en nod från klustret.

Överväganden för flera nätverkskort (NIC:er)

När du konfigurerar hög tillgänglighet med servrar som har flera nätverkskort följer du dessa förslag:

  • Kontrollera att hosts filen är konfigurerad så att serverns IP-adresser för de flera nätverkskorten matchar värdnamnet för Linux-servern på varje nod.

  • När du konfigurerar klustret med Pacemaker bör Corosync ställas in att använda värdnamnet för servrarna för att ange inställningar för alla nätverkskort. Vi vill bara ha Pacemaker/Corosync-kommunikationen via ett enda nätverkskort. När Pacemaker-klustret har konfigurerats ändrar du konfigurationen corosync.conf i filen och uppdaterar IP-adressen för det dedikerade nätverkskortet som du vill använda för Pacemaker/Corosync-kommunikationen.

  • Det som anges i <hostname>-filen bör vara samma som de som anges när du gör en omvänd sökning (corosync.conf), och bör vara det korta namn som konfigurerats på hosten. Kontrollera att hosts filen också representerar rätt IP-adress för namnmatchning.

Ändringarna i corosync.conf filexemplet är markerade nedan:

  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
    }
  }

Konfigurera en fäktningsenhet

Pacemakerklusterleverantörer kräver att en misslyckad nod isoleras med hjälp av en isoleringsenhet som är konfigurerad för en klusterkonfiguration som stöds. När klusterresurshanteraren inte kan fastställa tillståndet för en nod eller en resurs på en nod, återställer isoleringen klustret till ett känt tillstånd igen.

En fäktningsenhet tillhandahåller en fäktningsagent. När du konfigurerar Pacemaker i Red Hat Enterprise Linux i Azure får du ett exempel på hur du skapar en fäktningsenhet för det här klustret i Azure. Ändra instruktionerna för din miljö.

Avgränsning på resursnivå säkerställer att datakorruption undviks vid ett avbrott genom att konfigurera en resurs. Du kan till exempel använda stängsel på resursnivå för att markera disken på en nod som inaktuell när kommunikationslänken slutar fungera.

Fäktning på nodnivå säkerställer att en nod inte kör några resurser. Detta görs genom att återställa noden. Pacemaker har stöd för en mängd olika fäktningsenheter. Exempel är ett avbrottsfritt nätaggregat eller gränssnittskort för hantering för servrar.

Information om att fäkta en misslyckad nod finns i följande artiklar:

Anmärkning

Eftersom stängselkonfigurationen på nodnivå är mycket beroende av din miljö inaktiverar du den för den här självstudien (den kan konfigureras senare). Följande skript inaktiverar stängsel på nodnivå:

sudo pcs property set stonith-enabled=false

Att inaktivera isolering är bara i testsyfte. Om du planerar att använda Pacemaker i en produktionsmiljö bör du planera en fäktningsimplementering beroende på din miljö och behålla den aktiverad.

Ange klusteregenskapen cluster-recheck-interval

cluster-recheck-interval anger det avsökningsintervall med vilket klustret söker efter ändringar i resursparametrarna, begränsningarna eller andra klusteralternativ. Om en replik slutar fungera försöker klustret starta om repliken med ett intervall som är bundet failure-timeout av värdet och cluster-recheck-interval värdet. Om failure-timeout till exempel är inställt på 60 sekunder och cluster-recheck-interval är inställt på 120 sekunder, provas omstarten med ett intervall som är större än 60 sekunder men mindre än 120 sekunder. Vi rekommenderar att du anger timeout för fel till 60 sekunder och cluster-recheck-interval till ett värde som är större än 60 sekunder. Att ställa in cluster-recheck-interval till ett litet värde rekommenderas inte.

För att uppdatera egenskapsvärdet till 2 minutes kör:

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

Om du redan har en resurs för tillgänglighetsgruppen som hanteras av ett Pacemaker-kluster introducerade Pacemaker-paketet 1.1.18-11.el7 en beteendeändring för klusterinställningen start-failure-is-fatal när dess värde är false. Den här ändringen påverkar arbetsflödet för redundans. Om en primär replik upplever ett avbrott förväntas klustret redundansväxla till en av de tillgängliga sekundära replikerna. I stället märker användarna att klustret fortsätter att försöka starta den misslyckade primära repliken. Om den primära filen aldrig är online (på grund av ett permanent avbrott) redundansväxlar klustret aldrig över till en annan tillgänglig sekundär replik. På grund av den här ändringen är en tidigare rekommenderad konfiguration som ska anges start-failure-is-fatal inte längre giltig och inställningen måste återställas till standardvärdet true.

Dessutom måste ag-resursen uppdateras för att inkludera failure-timeout egenskapen.

För att uppdatera egenskapsvärdet till true kör:

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

Om du vill uppdatera resursegenskapen ag_clusterfailure-timeout till 60skör du:

pcs resource update ag_cluster meta failure-timeout=60s

Information om egenskaper för Pacemaker-kluster finns i Egenskaper för pacemakerkluster.

Skapa en SQL Server-inloggning för Pacemaker

Försiktighet

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.

  1. På alla SQL Server-instanser skapar du en serverinloggning för Pacemaker.

    Följande Transact-SQL skapar en inloggning. Ersätt <password> med ditt eget komplexa lösenord.

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

    När tillgänglighetsgruppen skapas kräver Pacemaker-användaren ALTER, CONTROL och VIEW DEFINITION behörigheter för tillgänglighetsgruppen efter att den har skapats men innan några noder läggs till i den.

  2. Spara autentiseringsuppgifterna för SQL Server-inloggningen på alla SQL Server-instanser.

    Ersätt <password> med ditt eget komplexa lösenord.

    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
    

Skapa resurs för tillgänglighetsgrupp

Om du vill skapa resursen för tillgänglighetsgruppen använder du pcs resource create kommandot och anger resursegenskaperna. Följande kommando skapar en ocf:mssql:ag resurs av typen master/underordnad typ för tillgänglighetsgrupp med namnet ag1. Kör följande kommando på en nod.

RHEL 7

Använd följande create kommando:

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

RHEL 8 och senare versioner

Använd följande create kommando:

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

Anmärkning

När du skapar resursen och regelbundet efteråt anger Pacemaker-resursagenten automatiskt värdet REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT för i tillgänglighetsgruppen baserat på tillgänglighetsgruppens konfiguration. Till exempel, om tillgänglighetsgruppen har tre synkrona repliker, kommer agenten att sätta REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT till 1. Mer information och ytterligare konfigurationsalternativ finns i Hög tillgänglighet och dataskydd för konfigurationer av tillgänglighetsgrupper.

Skapa virtuell IP-resurs

Om du vill skapa den virtuella IP-adressresursen kör du följande kommando på en nod. Använd en tillgänglig statisk IP-adress från nätverket. Ersätt IP-adressen mellan <10.128.16.240> med en giltig IP-adress.

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

Det finns inget motsvarande namn för virtuell server i Pacemaker. Om du vill använda en anslutningssträng som pekar på ett strängservernamn i stället för en IP-adress registrerar du den virtuella IP-resursadressen och önskat virtuellt servernamn i DNS. För DR-konfigurationer registrerar du önskat virtuellt servernamn och IP-adress med DNS-servrarna på både den primära platsen och DR-platsen.

Lägg till samlokaliseringsbegränsning

Nästan varje beslut i ett Pacemaker-kluster, som att välja var en resurs ska köras, görs genom att jämföra poäng. Poängen beräknas per resurs. Klusterresurshanteraren väljer den nod som har högst poäng för en viss resurs. Om en nod har en negativ poäng för en resurs kan resursen inte köras på den noden.

I ett pacemakerkluster kan du manipulera klustrets beslut med begränsningar. Begränsningar har en poäng. Om en begränsning har en poäng som är lägre än INFINITYser Pacemaker det som en rekommendation. Poängen INFINITY är obligatorisk.

För att säkerställa att den primära repliken och de virtuella IP-resurserna körs på samma värd definierar du en samlokaliseringsbegränsning med poängen INFINITY. Om du vill lägga till samlokaliseringsbegränsningen kör du följande kommando på en nod.

RHEL 7

När du skapar resursen ag_cluster i RHEL 7 skapas resursen som ag_cluster-master. Använd följande kommando för RHEL 7:

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

RHEL 8

När du skapar resursen ag_cluster i RHEL 8 skapas resursen som ag_cluster-clone. Använd följande kommando:

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

RHEL 9 och senare versioner

När du skapar resursen ag_cluster i RHEL 9 och senare versioner skapas resursen som ag_cluster-clone. Använd följande kommando:

sudo pcs constraint colocation add virtualip with promoted ag_cluster-clone INFINITY with-rsc-role=Promoted

Lägg till beställningsbegränsning

Samlokaliseringsbegränsningen har en implicit ordningsbegränsning. Den flyttar den virtuella IP-resursen innan den flyttar resursen för tillgänglighetsgruppen. Som standard är händelsesekvensen:

  1. Användarproblem pcs resource move med tillgänglighetsgruppens primära från nod1 till nod2.

  2. Den virtuella IP-resursen stoppas på nod 1.

  3. Den virtuella IP-resursen startar på nod 2.

    Anmärkning

    I det här läget pekar IP-adressen tillfälligt på nod 2 medan nod 2 fortfarande är sekundär innan övergång.

  4. Den primära tillgänglighetsgruppen på nod 1 har blivit degraderad till en sekundär.

  5. Tillgänglighetsgruppen sekundär på nod 2 befordras till primär.

Om du vill förhindra att IP-adressen tillfälligt pekar på noden med den sekundära redundansväxlingen lägger du till en ordningsbegränsning.

Om du vill lägga till en ordningsbegränsning kör du följande kommando på en nod:

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8 och senare versioner

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Viktigt!

När du har konfigurerat klustret och lagt till tillgänglighetsgruppen som en klusterresurs kan du inte använda Transact-SQL för att växla över resurserna i tillgänglighetsgruppen. SQL Server-klusterresurser i Linux är inte lika nära kopplade till operativsystemet som i ett Windows Server-redundanskluster (WSFC). SQL Server-tjänsten känner inte till förekomsten av klustret. All orkestrering sker via klusterhanteringsverktygen. I RHEL eller Ubuntu används verktyg pcs och i SLES används verktyg crm.

Växla över tillgänglighetsgruppen manuellt med pcs. Initiera inte redundansväxling med Transact-SQL. Anvisningar finns i Failover.