Konfigurera pacemaker på Red Hat Enterprise Linux i Azure

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

Klusterinstallation

Översikt över pacemaker på RHEL

Anteckning

Red Hat stöder inte programvaruemulerade watchdog-program. 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 avstängningsmekanism som stöds för pacemaker Red Hat Enterprise Linux kluster i Azure är Azure-stängselagenten.

Följande objekt föregås av antingen [A] – gäller för alla noder, [1] – gäller endast nod 1 eller [2] – gäller endast för nod 2.

  1. [A] Registrera. Det här steget krävs inte om du använder RHEL SAP HA-aktiverade avbildningar.

    Registrera dina virtuella datorer och koppla dem till en pool som innehåller lagringsplatsen 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>
    

    Genom att koppla en pool till en Azure Marketplace PAYG RHEL-avbildning kommer du i praktiken att dubbelfaktureras för din RHEL-användning: en gång för PAYG-avbildningen och en gång för RHEL-rättigheten i poolen som du kopplar. För att åtgärda detta tillhandahåller Azure nu BYOS RHEL-avbildningar. Mer information finns i Red Hat Enterprise Linux av Azure-avbildningar med "bring-your-own-subscription".

  2. [A] Aktivera RHEL för SAP-lagringsplatsen. Det här steget krävs inte om du använder RHEL SAP HA-aktiverade avbildningar.

    Aktivera följande lagringsplatsen för att installera de nödvändiga paketen.

    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-Add-On

    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 redundans, om ett resursstopp misslyckas eller klusternoderna inte kan kommunicera som varandra längre:
    RHEL 7.7 eller senare använder den senaste tillgängliga versionen av paketet för stängselagenter
    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 take a very long time to be fenced, or fencing fails/time-out before the VM shuts down.

    Kontrollera versionen av Azure-stängselagenten. Om det behövs uppdaterar du den till en version som är lika med eller senare än den som anges ovan.

    # 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 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. [A] Konfigurera värdnamnsmatchning

    Du kan antingen använda en DNS-server eller ändra /etc/hosts på alla noder. Det här exemplet visar hur du använder filen /etc/hosts. 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 en tillförlitlig värdnamnsmatchning. Klusterkommunikationen misslyckas om namnen inte är tillgängliga och det kan leda till fördröjningar i redundansen i klustret. 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
    
  5. [A] Ändra hacluster-lösenordet till samma lösenord

    sudo passwd hacluster
    
  6. [A] Lägga 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
    
  7. [A] Aktivera grundläggande klustertjänster

    Kör följande kommandon för att aktivera pacemakertjänsten och starta den.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Skapa pacemakerkluster

    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 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
    
  9. [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
    

    Tips

    Om du skapar kluster med flera noder, det vill säga kluster med fler än två noder, ska du inte ange rösterna till 2.

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

    sudo pcs property set concurrent-fencing=true
    

Skapa STONITH-enhet

STONITH-enheten använder tjänstens huvudnamn för att auktorisera mot Microsoft Azure. Följ de här stegen för att skapa ett huvudnamn för tjänsten.

  1. Gå till https://portal.azure.com
  2. Öppna Azure Active Directory bladet
    Gå till Egenskaper och anteckna katalog-ID:t. Det här är klientorganisations-ID:t.
  3. Klicka på Appregistreringar
  4. Klicka på Ny registrering
  5. Ange ett Namn och välj "Endast konton i den här organisationskatalogen"
  6. Välj Programtyp "Webb", ange en inloggnings-URL (till exempel http: / /localhost) och klicka på Lägg till
    Inloggnings-URL:en används inte och kan vara en giltig URL
  7. Välj Certifikat och hemligheter och klicka sedan på Ny klienthemlighet
  8. Ange en beskrivning för en ny nyckel, välj "Upphör aldrig att gälla" och klicka på Lägg till
  9. Gör en nod till Värde. Det används som lösenord för tjänstens huvudnamn
  10. Välj Översikt. Anteckna program-ID:t. Det används som användarnamn (inloggnings-ID i stegen nedan) för tjänstens huvudnamn

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

Tjänstens huvudnamn har inte behörighet att komma åt dina Azure-resurser som standard. Du måste ge 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 efter dina prenumerationer. Ersätt c276fc76-9cd4-44c9-99a7-4fd71546436e och e91d47c4-76f3-4271-a796-21b4ecfe3624 med ID:n 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/e663cc2d-722b-4be1-b636-bbd9e4c60fd9",
              "/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624"
      ],
      "actions": [
              "Microsoft.Compute/*/read",
              "Microsoft.Compute/virtualMachines/powerOff/action",
              "Microsoft.Compute/virtualMachines/start/action"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
}

[A] Tilldela den anpassade rollen till tjänstens huvudnamn

Tilldela den anpassade rollen "Linux Fence Agent Role" som skapades i det senaste kapitlet till tjänstens huvudnamn. Använd inte rollen Ägare längre! Detaljerade anvisningar finns i Tilldela Azure-roller med hjälp av Azure Portal.
Se till att tilldela rollen för båda klusternoderna.

[1] Skapa STONITH-enheter

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


sudo pcs property set stonith-timeout=900

Anteckning

Alternativet "pcmk_host_map" krävs ENDAST i kommandot om RHEL-värdnamnen och namnen på virtuella Azure-datorer 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 stonith-enheter 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 login="login ID" passwd="password" resourceGroup="resource group" tenantId="tenant ID" 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 använder du följande kommando för att konfigurera stängselenheten:

sudo pcs stonith create rsc_st_azure fence_azure_arm username="login ID" password="password" resourceGroup="resource group" tenantId="tenant ID" 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

Tips

Konfigurera bara pcmk_delay_max attributet i två nod-pacemakerkluster. Mer information om hur du förhindrar stängslet i ett pacemakerkluster med två noder finns i Delaying fencecing in a two nodecluster to prevent fence of "fence death" scenarios .

Viktigt

Övervaknings- och avstängningsåtgärderna avser serialiseras. Det innebär att om det finns en övervakningsåtgärd som körs längre och samtidiga avstängningshändelsen, finns det ingen fördröjning i redundansen av klustret på grund av den övervakningsåtgärd som redan körs.

[1] Aktivera användning av en STONITH-enhet

sudo pcs property set stonith-enabled=true

Tips

Azure Fence Agent kräver utgående anslutning till offentliga slutpunkter enligt dokumentation, tillsammans med möjliga lösningar, i offentlig slutpunktsanslutning för virtuella datorer som använder standard-ILB.

Valfri STONITH-konfiguration

Tips

Det här avsnittet gäller endast om du vill konfigurera särskilda avstängningsenhet. fence_kdump

Om du behöver samla in diagnostikinformation i den virtuella datorn kan det vara användbart att konfigurera ytterligare STONITH-enhet baserat på stängsletagenten fence_kdump . Agenten kan identifiera att en nod har angett kdump-kraschåterställning och kan tillåta att återställningstjänsten för krascher slutförs innan andra fence_kdump avstängningsmetoder anropas. Observera att fence_kdump inte ersätter traditionella mekanismer för stängsel, till exempel Azure Fence Agent när du använder virtuella Azure-datorer.

Viktigt

Tänk på att när konfigureras som en stonith på första nivån, kommer det att införa fördröjningar i avstängningsåtgärder och respektive fördröjningar i programresursernas fence_kdump redundans.

Om en kraschdump har identifierats fördröjs avstängningen tills återställningstjänsten för kraschen har slutförts. Om noden som misslyckades inte kan nås eller om den inte svarar, fördröjs avskärmningen av tiden som bestäms av det konfigurerade antalet iterationer och fence_kdump tidsgränsen. 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 bara konfigurerar stonith när det behövs för att samla in diagnostik på den virtuella datorn och alltid i kombination med traditionell fence_kdump stängselmetod som Azure Fence Agent.

Följande Red Hat-kB innehåller viktig information om hur du fence_kdump konfigurerar stonith:

Utför följande valfria steg för att fence_kdump lägga till som en STONITH-konfiguration på första nivån, utöver Azure Fence Agent-konfigurationen.

  1. [A] Kontrollera att kdump är aktiv och konfigurerad.

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

    yum install fence-agents-kdump
    
  3. [1] Skapa fence_kdump en stonith-enhet 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 stonith-nivåer så fence_kdump att avstängningsmekanismen först används.

    
     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 stonith 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 nödvändiga portar för fence_kdump genom brandväggen

    firewall-cmd --add-port=7410/udp
    firewall-cmd --add-port=7410/udp --permanent
    
  6. [A] Se till 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 för att undvika att /etc/kdump.conf fence_kdump tidsgränsen för vissa versioner kexec-tools misslyckas. Mer information finns i fence_kdump-tidsgränsen när fence_kdump_nodes inte har angetts 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 hög tillgänglighet med kexec-verktygsversioner som är äldre än 2.0.14. Exempelkonfigurationen för ett kluster med två noder visas nedan. När du har gjort en /etc/kdump.conf ändring i måste kdump-avbildningen återskapas. Det kan du göra genom att starta om kdump tjänsten.

    
     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 effektivt bör du planera testet eftersom krascha en nod påverkar programmet.

    echo c > /proc/sysrq-trigger
    

Nästa steg