Dela via


Konfigurera Pacemaker på Red Hat Enterprise Linux i Azure

I den här artikeln beskrivs hur du konfigurerar ett grundläggande Pacemaker-kluster på Red Hat Enterprise Server (RHEL). Anvisningarna omfattar RHEL 7, RHEL 8 och RHEL 9.

Förutsättningar

Läs följande SAP-anteckningar och dokument först:

Klusterinstallation

Diagram that shows an overview of Pacemaker on RHEL.

Kommentar

Red Hat stöder inte en programvaruemulerad vakthund. Red Hat stöder inte SBD på molnplattformar. Mer information finns i Supportprinciper för RHEL-kluster med hög tillgänglighet – sbd och fence_sbd.

Den enda fäktningsmekanism som stöds för Pacemaker RHEL-kluster i Azure är en Azure-stängselagent.

Följande objekt är prefix med:

  • [A]: Gäller för alla noder
  • [1]: Gäller endast för nod 1
  • [2]: Gäller endast för nod 2

Skillnader i kommandona eller konfigurationen mellan RHEL 7 och RHEL 8/RHEL 9 markeras i dokumentet.

  1. [A] Registrera dig. Steget är valfritt. Om du använder RHEL SAP HA-aktiverade avbildningar krävs inte det här steget.

    Om du till exempel distribuerar på RHEL 7 registrerar du den virtuella datorn och kopplar den till en pool som innehåller lagringsplatser för RHEL 7.

    sudo subscription-manager register
    # List the available pools
    sudo subscription-manager list --available --matches '*SAP*'
    sudo subscription-manager attach --pool=<pool id>
    

    När du kopplar en pool till en RHEL-avbildning med betala per användning i Azure Marketplace debiteras du effektivt för din RHEL-användning. Du debiteras en gång för avbildningen betala per användning och en gång för RHEL-berättigandet i poolen som du bifogar. För att undvika den här situationen tillhandahåller Azure nu RHEL-avbildningar med bring-your-own-subscription. Mer information finns i Red Hat Enterprise Linux bring-your-own-subscription Azure images (Azure-avbildningar för bring-your-own-subscription).

  2. [A] Aktivera RHEL för SAP-lagringsplatser. Steget är valfritt. Om du använder RHEL SAP HA-aktiverade avbildningar krävs inte det här steget.

    Om du vill installera de nödvändiga paketen på RHEL 7 aktiverar du följande lagringsplatser:

    sudo subscription-manager repos --disable "*"
    sudo subscription-manager repos --enable=rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-sap-for-rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-eus-rpms
    
  3. [A] Installera RHEL HA-tillägget.

     sudo yum install -y pcs pacemaker fence-agents-azure-arm nmap-ncat
    

    Viktigt!

    Vi rekommenderar följande versioner av Azure Fence-agenten (eller senare) så att kunderna kan dra nytta av en snabbare redundansväxlingstid, om ett resursstopp misslyckas eller om klusternoderna inte längre kan kommunicera med varandra:

    RHEL 7.7 eller senare använder den senaste tillgängliga versionen av paketet fence-agents.

    RHEL 7.6: fence-agents-4.2.1-11.el7_6.8

    RHEL 7.5: fence-agents-4.0.11-86.el7_5.8

    RHEL 7.4: fence-agents-4.0.11-66.el7_4.12

    Mer information finns i Azure VM running as a RHEL High-Availability cluster member (Azure VM running as a RHEL High-Availability cluster member takes a very long time to be fenced, or fencing fails/times out before the VM shut down).

    Viktigt!

    Vi rekommenderar följande versioner av Azure Fence-agenten (eller senare) för kunder som vill använda hanterade identiteter för Azure-resurser i stället för tjänstens huvudnamn för stängselagenten:

    RHEL 8.4: fence-agents-4.2.1-54.el8.

    RHEL 8.2: fence-agents-4.2.1-41.el8_2.4

    RHEL 8.1: fence-agents-4.2.1-30.el8_1.4

    RHEL 7.9: fence-agents-4.2.1-41.el7_9.4.

    Viktigt!

    På RHEL 9 rekommenderar vi följande paketversioner (eller senare) för att undvika problem med Azure Fence-agenten:

    fence-agents-4.10.0-20.el9_0.7

    fence-agents-common-4.10.0-20.el9_0.6

    ha-cloud-support-4.10.0-20.el9_0.6.x86_64.rpm

    Kontrollera versionen av Azure Fence-agenten. Om det behövs uppdaterar du den till den lägsta version som krävs eller senare.

    # Check the version of the Azure Fence Agent
     sudo yum info fence-agents-azure-arm
    

    Viktigt!

    Om du behöver uppdatera Azure Fence-agenten, och om du använder en anpassad roll, måste du uppdatera den anpassade rollen så att den inkluderar åtgärden powerOff. Mer information finns i Skapa en anpassad roll för stängselagenten.

  4. Om du distribuerar på RHEL 9 installerar du även resursagenterna för molndistribution.

    sudo yum install -y resource-agents-cloud
    
  5. [A] Konfigurera värdnamnsmatchning.

    Du kan antingen använda en DNS-server eller ändra /etc/hosts filen på alla noder. Det här exemplet visar hur du /etc/hosts använder filen. Ersätt IP-adressen och värdnamnet i följande kommandon.

    Viktigt!

    Om du använder värdnamn i klusterkonfigurationen är det viktigt att ha tillförlitlig värdnamnsmatchning. Klusterkommunikationen misslyckas om namnen inte är tillgängliga, vilket kan leda till fördröjningar vid klusterredundans.

    Fördelen med att använda /etc/hosts är att klustret blir oberoende av DNS, vilket också kan vara en enskild felpunkt.

    sudo vi /etc/hosts
    

    Infoga följande rader i /etc/hosts. Ändra IP-adressen och värdnamnet så att de matchar din miljö.

    # IP address of the first cluster node
    10.0.0.6 prod-cl1-0
    # IP address of the second cluster node
    10.0.0.7 prod-cl1-1
    
  6. [A] Ändra hacluster lösenordet till samma lösenord.

    sudo passwd hacluster
    
  7. [A] Lägg till brandväggsregler för Pacemaker.

    Lägg till följande brandväggsregler för all klusterkommunikation mellan klusternoderna.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --add-service=high-availability
    
  8. [A] Aktivera grundläggande klustertjänster.

    Kör följande kommandon för att aktivera Pacemaker-tjänsten och starta den.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  9. [1] Skapa ett Pacemaker-kluster.

    Kör följande kommandon för att autentisera noderna och skapa klustret. Ange token till 30000 för att tillåta minnesbevarande underhåll. Mer information finns i den här artikeln för Linux.

    Om du skapar ett kluster på RHEL 7.x använder du följande kommandon:

    sudo pcs cluster auth prod-cl1-0 prod-cl1-1 -u hacluster
    sudo pcs cluster setup --name nw1-azr prod-cl1-0 prod-cl1-1 --token 30000
    sudo pcs cluster start --all
    

    Om du skapar ett kluster på RHEL 8.x/RHEL 9.x använder du följande kommandon:

    sudo pcs host auth prod-cl1-0 prod-cl1-1 -u hacluster
    sudo pcs cluster setup nw1-azr prod-cl1-0 prod-cl1-1 totem token=30000
    sudo pcs cluster start --all
    

    Kontrollera klusterstatusen genom att köra följande kommando:

    # Run the following command until the status of both nodes is online
    sudo pcs status
    
    # Cluster name: nw1-azr
    # WARNING: no stonith devices and stonith-enabled is not false
    # Stack: corosync
    # Current DC: prod-cl1-1 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum
    # Last updated: Fri Aug 17 09:18:24 2018
    # Last change: Fri Aug 17 09:17:46 2018 by hacluster via crmd on prod-cl1-1
    #
    # 2 nodes configured
    # 0 resources configured
    #
    # Online: [ prod-cl1-0 prod-cl1-1 ]
    #
    # No resources
    #
    # Daemon Status:
    #   corosync: active/disabled
    #   pacemaker: active/disabled
    #   pcsd: active/enabled
    
  10. [A] Ange förväntade röster.

    # Check the quorum votes 
    pcs quorum status
    
    # If the quorum votes are not set to 2, execute the next command
    sudo pcs quorum expected-votes 2
    

    Dricks

    Om du skapar ett kluster med flera noder, dvs. ett kluster med fler än två noder, anger du inte rösterna till 2.

  11. [1] Tillåt samtidiga stängselåtgärder.

    sudo pcs property set concurrent-fencing=true
    

Skapa en fäktningsenhet

Fäktningsenheten använder antingen en hanterad identitet för Azure-resursen eller ett huvudnamn för tjänsten för att auktorisera mot Azure.

Skapa en hanterad identitet (MSI) genom att skapa en systemtilldelad hanterad identitet för varje virtuell dator i klustret. Om det redan finns en systemtilldelad hanterad identitet används den. Använd inte användartilldelade hanterade identiteter med Pacemaker just nu. En stängselenhet, baserad på hanterad identitet, stöds på RHEL 7.9 och RHEL 8.x/RHEL 9.x.

[1] Skapa en anpassad roll för stängselagenten

Både den hanterade identiteten och tjänstens huvudnamn har inte behörighet att komma åt dina Azure-resurser som standard. Du måste ge den hanterade identiteten eller tjänstens huvudnamn behörighet att starta och stoppa (stänga av) alla virtuella datorer i klustret. Om du inte redan har skapat den anpassade rollen kan du skapa den med hjälp av PowerShell eller Azure CLI.

Använd följande innehåll för indatafilen. Du måste anpassa innehållet till dina prenumerationer, dvs. ersätt xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx och yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy med ID:t för din prenumeration. Om du bara har en prenumeration tar du bort den andra posten i AssignableScopes.

{
      "Name": "Linux Fence Agent Role",
      "description": "Allows to power-off and start virtual machines",
      "assignableScopes": [
              "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "/subscriptions/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
      ],
      "actions": [
              "Microsoft.Compute/*/read",
              "Microsoft.Compute/virtualMachines/powerOff/action",
              "Microsoft.Compute/virtualMachines/start/action"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
}

[A] Tilldela den anpassade rollen

Använd hanterad identitet eller tjänstens huvudnamn.

Tilldela den anpassade roll Linux Fence Agent Role som skapades i det senaste avsnittet till varje hanterad identitet för de virtuella klusterdatorerna. Varje systemtilldelad hanterad identitet för virtuella datorer behöver rollen tilldelad för varje kluster-VM:s resurs. Mer information finns i Tilldela en hanterad identitet åtkomst till en resurs med hjälp av Azure-portalen. Kontrollera att varje virtuell dators rolltilldelning för hanterad identitet innehåller alla virtuella klusterdatorer.

Viktigt!

Tänk på att tilldelning och borttagning av auktorisering med hanterade identiteter kan fördröjas tills det börjar gälla.

[1] Skapa fäktningsenheterna

När du har redigerat behörigheterna för de virtuella datorerna kan du konfigurera fäktningsenheterna i klustret.

sudo pcs property set stonith-timeout=900

Kommentar

Alternativet pcmk_host_map krävs endast i kommandot om RHEL-värdnamnen och namnen på den virtuella Azure-datorn inte är identiska. Ange mappningen i formatet hostname:vm-name. Se avsnittet fetstil i kommandot . Mer information finns i Vilket format ska jag använda för att ange nodmappningar till fäktningsenheter i pcmk_host_map?.

För RHEL 7.x använder du följande kommando för att konfigurera stängselenheten:

sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \ 
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600

För RHEL 8.x/9.x använder du följande kommando för att konfigurera stängselenheten:

# Run following command if you are setting up fence agent on (two-node cluster and pacemaker version greater than 2.0.4-6.el8) OR (HANA scale out)
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 \
op monitor interval=3600

# Run following command if you are setting up fence agent on (two-node cluster and pacemaker version less than 2.0.4-6.el8)
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600

Om du använder en fäktningsenhet baserat på tjänstens huvudnamnskonfiguration läser du Ändra från SPN till MSI för Pacemaker-kluster med hjälp av Azure-stängsel och lär dig hur du konverterar till konfiguration av hanterad identitet.

Dricks

  • Om du vill undvika stängseltävlingar i ett pacemakerkluster med två noder kan du konfigurera klusteregenskapen priority-fencing-delay . Den här egenskapen medför ytterligare fördröjning vid stängsel av en nod som har högre total resursprioritet när ett scenario med delad hjärna inträffar. Mer information finns i Can Pacemaker fence the cluster node with the fewest running resources?.
  • Egenskapen priority-fencing-delay gäller för Pacemaker version 2.0.4-6.el8 eller senare och i ett kluster med två noder. Om du konfigurerar klusteregenskapen priority-fencing-delay behöver du inte ange egenskapen pcmk_delay_max . Men om pacemakerversionen är mindre än 2.0.4-6.el8 måste du ange pcmk_delay_max egenskapen.
  • Anvisningar om hur du anger klusteregenskapen priority-fencing-delay finns i respektive SAP ASCS/ERS- och SAP HANA-uppskalnings-HA-dokument.

Övervaknings- och fäktningsåtgärderna deserialiseras. Om det finns en övervakningsåtgärd som körs längre och samtidiga fäktningshändelser blir det därför ingen fördröjning i klusterredundansväxlingen eftersom övervakningsåtgärden redan körs.

[1] Aktivera användning av en fäktningsenhet

sudo pcs property set stonith-enabled=true

Dricks

Azure Fence-agenten kräver utgående anslutning till offentliga slutpunkter. Mer information och möjliga lösningar finns i Offentlig slutpunktsanslutning för virtuella datorer med standard-ILB.

Konfigurera Pacemaker för schemalagda Händelser i Azure

Azure erbjuder schemalagda händelser. Schemalagda händelser skickas via metadatatjänsten och ger tid för programmet att förbereda sig för sådana händelser.

Pacemaker-resursagenten azure-events-az övervakar schemalagda Azure-händelser. Om händelser identifieras och resursagenten fastställer att en annan klusternod är tillgänglig, anger den ett klusterhälsoattribut.

När klustrets hälsoattribut har angetts för en nod, utlöses platsbegränsningen och alla resurser med namn som inte börjar med health- migreras bort från noden med den schemalagda händelsen. När den berörda klusternoden är fri från att köra klusterresurser bekräftas den schemalagda händelsen och kan utföra åtgärden, till exempel en omstart.

  1. [A] Kontrollera att paketet för agenten azure-events-az redan är installerat och uppdaterat.

    RHEL 8.x: sudo dnf info resource-agents
    RHEL 9.x: sudo dnf info resource-agents-cloud
    

    Lägsta versionskrav:

    • RHEL 8.4: resource-agents-4.1.1-90.13
    • RHEL 8.6: resource-agents-4.9.0-16.9
    • RHEL 8.8: resource-agents-4.9.0-40.1
    • RHEL 9.0: resource-agents-cloud-4.10.0-9.6
    • RHEL 9.2 och senare: resource-agents-cloud-4.10.0-34.1
  2. [1] Konfigurera resurserna i Pacemaker.

    #Place the cluster in maintenance mode
    sudo pcs property set maintenance-mode=true
    
    
  3. [1] Ange pacemakerklustrets hälsonodstrategi och villkor.

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
    rule score-attribute='#health-azure' \
    defined '#uname'
    

    Viktigt!

    Definiera inte några andra resurser i klustret som börjar med health- förutom de resurser som beskrivs i nästa steg.

  4. [1] Ange det initiala värdet för klusterattributen. Kör för varje klusternod och för utskalningsmiljöer, inklusive den virtuella majoritetstillverkarens virtuella dator.

    sudo crm_attribute --node prod-cl1-0 --name '#health-azure' --update 0
    sudo crm_attribute --node prod-cl1-1 --name '#health-azure' --update 0
    
  5. [1] Konfigurera resurserna i Pacemaker. Kontrollera att resurserna börjar med health-azure.

    sudo pcs resource create health-azure-events \
    ocf:heartbeat:azure-events-az \
    op monitor interval=10s timeout=240s \
    op start timeout=10s start-delay=90s
    sudo pcs resource clone health-azure-events allow-unhealthy-nodes=true failure-timeout=120s
    
  6. Ta Pacemaker-klustret ur underhållsläge.

    sudo pcs property set maintenance-mode=false
    
  7. Rensa eventuella fel under aktiveringen och kontrollera att health-azure-events resurserna har startats på alla klusternoder.

    sudo pcs resource cleanup
    

    Det kan ta upp till två minuter att köra frågor för schemalagda händelser första gången. Pacemakertestning med schemalagda händelser kan använda omstarts- eller omdistribueringsåtgärder för de virtuella klusterdatorerna. Mer information finns i Schemalagda händelser.

Valfri fäktningskonfiguration

Dricks

Det här avsnittet gäller endast om du vill konfigurera den särskilda fäktningsenheten fence_kdump.

Om du behöver samla in diagnostikinformation på den virtuella datorn kan det vara bra att konfigurera en annan stängselenhet baserat på stängselagenten fence_kdump. Agenten fence_kdump kan identifiera att en nod har angett återställning av kdumpkrasch och kan tillåta att tjänsten för återställning av krascher slutförs innan andra stängselmetoder anropas. Observera att fence_kdump det inte är en ersättning för traditionella stängselmekanismer, som Azure-stängselagenten, när du använder virtuella Azure-datorer.

Viktigt!

Tänk på att när fence_kdump har konfigurerats som en stängselenhet på första nivån medför det fördröjningar i fäktningsåtgärderna och fördröjningar i programresursernas redundansväxling.

Om en kraschdump har identifierats fördröjs fäktningen tills kraschåterställningstjänsten har slutförts. Om den misslyckade noden inte kan nås eller om den inte svarar fördröjs fäktningen med tiden, det konfigurerade antalet iterationer och tidsgränsen fence_kdump . Mer information finns i Hur gör jag för att konfigurera fence_kdump i ett Red Hat Pacemaker-kluster?.

Den föreslagna fence_kdump tidsgränsen kan behöva anpassas till den specifika miljön.

Vi rekommenderar att du konfigurerar fence_kdump fäktning endast när det behövs för att samla in diagnostik inom den virtuella datorn och alltid i kombination med traditionella stängselmetoder, till exempel Azure-stängselagenten.

Följande Artiklar om Red Hat KB innehåller viktig information om hur du konfigurerar fäktning fence_kdump :

Kör följande valfria steg för att lägga till fence_kdump som en fäktningskonfiguration på första nivån, utöver azure fence agent-konfigurationen.

  1. [A] Kontrollera att det kdump är aktivt och konfigurerat.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Installera stängselagenten fence_kdump .

    yum install fence-agents-kdump
    
  3. [1] Skapa en fence_kdump fäktningsenhet i klustret.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" timeout=30
    
  4. [1] Konfigurera fäktningsnivåer så att fäktningsmekanismen fence_kdump aktiveras först.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1"
    pcs stonith level add 1 prod-cl1-0 rsc_st_kdump
    pcs stonith level add 1 prod-cl1-1 rsc_st_kdump
    pcs stonith level add 2 prod-cl1-0 rsc_st_azure
    pcs stonith level add 2 prod-cl1-1 rsc_st_azure
    
    # Check the fencing level configuration 
    pcs stonith level
    # Example output
    # Target: prod-cl1-0
    # Level 1 - rsc_st_kdump
    # Level 2 - rsc_st_azure
    # Target: prod-cl1-1
    # Level 1 - rsc_st_kdump
    # Level 2 - rsc_st_azure
    
  5. [A] Tillåt de portar som krävs för fence_kdump via brandväggen.

    firewall-cmd --add-port=7410/udp
    firewall-cmd --add-port=7410/udp --permanent
    
  6. [A] Kontrollera att initramfs bildfilen innehåller fence_kdump filerna och hosts . Mer information finns i Hur gör jag för att konfigurera fence_kdump i ett Red Hat Pacemaker-kluster?.

    lsinitrd /boot/initramfs-$(uname -r)kdump.img | egrep "fence|hosts"
    # Example output 
    # -rw-r--r--   1 root     root          208 Jun  7 21:42 etc/hosts
    # -rwxr-xr-x   1 root     root        15560 Jun 17 14:59 usr/libexec/fence_kdump_send
    
  7. [A] Utför konfigurationen fence_kdump_nodes i /etc/kdump.conf för att undvika fence_kdump att misslyckas med en tidsgräns för vissa kexec-tools versioner. Mer information finns i fence_kdump timeout när fence_kdump_nodes inte anges med kexec-tools version 2.0.15 eller senare och fence_kdump misslyckas med "timeout efter X sekunder" i ett RHEL 6- eller 7-kluster med kexec-tools-versioner som är äldre än 2.0.14. Exempelkonfigurationen för ett kluster med två noder visas här. När du har ändrat i /etc/kdump.confmåste kdumpavbildningen återskapas. Starta om tjänsten om du vill återskapa den kdump .

    vi /etc/kdump.conf
    # On node prod-cl1-0 make sure the following line is added
    fence_kdump_nodes  prod-cl1-1
    # On node prod-cl1-1 make sure the following line is added
    fence_kdump_nodes  prod-cl1-0
    
    # Restart the service on each node
    systemctl restart kdump
    
  8. Testa konfigurationen genom att krascha en nod. Mer information finns i Hur gör jag för att konfigurera fence_kdump i ett Red Hat Pacemaker-kluster?.

    Viktigt!

    Om klustret redan används produktivt planerar du testet i enlighet med detta eftersom krasch av en nod påverkar programmet.

    echo c > /proc/sysrq-trigger
    

Nästa steg