Configurare Pacemaker su Red Hat Enterprise Linux su Azure

Questo articolo spiega come configurare un cluster base Pacemaker a due nodi su Red Hat Enterprise Linux (RHEL). Le istruzioni coprono RHEL 8.6+, RHEL 9.x, e RHEL 10.x.

Prerequisiti

Panoramica

Questa guida presuppone che tu abbia già implementato il gruppo di risorse richiesto, la rete virtuale Azure, la subnet e le macchine virtuali (VM).

I cluster in esecuzione su Linux richiedono un agente di fencing per isolare i nodi malfunzionanti. Per svolgere questo compito su Azure, si utilizza uno dei seguenti metodi:

  • Storage Based Death (SBD) con Azure Shared Disk
  • Storage Based Death (SBD) con target iSCSI
  • Agente di recinzione di Azure

Note

I seguenti prefissi sono utilizzati in questo documento:

  • [A]: applicabile a tutti i nodi.
  • [1]: applicabile solo al nodo 1.
  • [2]: applicabile solo al nodo 2.

Importante

In Azure, i cluster RHEL a disponibilità elevata con isolamento basato sull'archiviazione (fence_sbd) usano un watchdog emulato dal software. Consulta la seguente documentazione quando usi SBD.

Utilizzo di SBD con Azure Shared Disk

Utilizzando Azure Shared Disks, puoi montare lo stesso disco su tutte le macchine virtuali che fanno parte del cluster. Puoi ospitare il tuo dispositivo SBD su quel disco condiviso senza requisiti infrastrutturali aggiuntivi.

Diagramma di un disco condiviso di Azure come dispositivo SBD in un cluster Pacemaker.

Vantaggi

  • Fornisce un'opzione nativa di dispositivo a blocchi condivisi Azure per SBD senza richiedere risorse aggiuntive.
  • Le macchine virtuali collegano direttamente il disco gestito, riducendo la dipendenza da ulteriori considerazioni di rete.

Considerazioni importanti

  • Puoi usare un disco condiviso Azure con lo Premium SSD SKU come dispositivo SBD.
  • Esamina l'elenco dei sistemi operativi supportati.
  • I dispositivi SBD che utilizzano un disco condiviso premium Azure supportano la memoria ridondante locale (LRS) e la memoria ridondante a zona (ZRS).
  • A seconda del tipo della distribuzione scegliere l'archiviazione ridondante appropriata per un disco condiviso Azure come dispositivo SBD.
    • Un dispositivo SBD che utilizza LRS per il disco condiviso Premium di Azure (skuName - Premium_LRS) supporta solo distribuzioni all'interno di un set di disponibilità.
    • Un dispositivo SBD che utilizza ZRS per un disco condiviso premium Azure (skuName - Premium_ZRS) è raccomandato per le implementazioni in zone di disponibilità.
  • Il disco condiviso Azure usato per i dispositivi SBD non deve essere di grandi dimensioni. Il valore maxShares determina il numero di nodi del cluster che possono usare il disco condiviso. Ad esempio, puoi usare le dimensioni dei dischi P1 o P2 per il tuo dispositivo SBD su un cluster a due nodi come SAP ASCS/ERS o SAP HANA scale-up.
    • Per i cluster con più di due nodi, consulta il valore maxShares documentato del disco selezionato.
  • Non collegare un dispositivo SBD su un disco condiviso di Azure tra cluster Pacemaker diversi.
  • Se si usano più dispositivi SBD su disco condiviso Azure, verificare il limite per un numero massimo di dischi dati che possono essere collegati a una macchina virtuale.
  • Per altre informazioni sulle limitazioni per i dischi condivisi Azure, vedere attentamente la sezione "Limitazioni" di Azure documentazione del disco condiviso.

Utilizzo di SBD con target iSCSI

Questa soluzione richiede di ospitare obiettivi Internet Small Computer System Interface (iSCSI) su almeno una macchina virtuale (VM) aggiuntiva.

Diagramma dei server iSCSI che ospitano target iSCSI per dispositivi SBD in un cluster Pacemaker.

Vantaggi

  • Questi server host iSCSI possono ospitare bersagli iSCSI anche per altri cluster Pacemaker nella stessa regione.
  • Se li stai già utilizzando in locale, non richiedono alcuna modifica al modo in cui gestisci il cluster Pacemaker.

Considerazioni importanti

  • Devi utilizzare tre server host iSCSI per avere il massimo livello di resilienza per il tuo cluster.
    • L'uso di un solo server introduce un singolo punto di guasto che impedisce al cluster di eseguire il fencing se il server non è disponibile.
    • Pacemaker non consente l'isolamento se hai solo due nodi e uno è inattivo.
  • I server host target iSCSI devono risiedere nella stessa regione dei tuoi cluster.
  • Il routing di rete tra i tuoi cluster e i server host iSCSI non deve attraversare dispositivi di rete non ridondanti (come un Network Virtual Appliance).
    • Gli eventi di manutenzione e altri problemi con i dispositivi di rete possono influire negativamente sulla stabilità e l'affidabilità della configurazione complessiva del cluster.

Utilizzo dell'agente Azure Fence

Utilizzando l'Azure Fence Agent, il tuo cluster può fare il fence dei nodi chiamando direttamente le API di Azure per riavviare i nodi guasti.

Schema dell'agente di isolamento di Azure in un cluster Pacemaker.

Vantaggi

  • Non servono risorse extra.
  • Le Identità gestite rimuovono qualsiasi manutenzione delle credenziali.

Considerazioni importanti

Distribuire un disco condiviso di Azure per SBD

Per creare e collegare un disco condiviso Azure usando PowerShell, esegui i seguenti comandi. Se vuoi distribuire risorse utilizzando la interfaccia della riga di comando di Azure o il portale Azure, vedi Distribuire un disco ZRS.

$ResourceGroup = "<ResourceGroupName>"
$DiskSizeInGB = 4
$DiskName = "<SBDDiskName>"
# Must be Equal to or greater than the Number of Nodes in the Cluster
$ShareNodes = 2 
# Options are "Premium_LRS" or "Premium_ZRS"
$SKUName = "<DiskSKU>"
# VMs to attach the disk to
$vmNames = @("sap-cl1", "sap-cl2")
# Lun to attach the disk to. You should use the same lun on all servers in the cluster.
$lunNumber = <lunNumber>

$diskConfig = New-AzDiskConfig -Location $Location -SkuName $SkuName -CreateOption Empty -DiskSizeGB $DiskSizeInGB -MaxSharesCount $ShareNodes

$dataDisk = New-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Disk $diskConfig

# Attach SBD disk to cluster VMs
foreach ($vmName in $vmNames) 
{
  $vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
  Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun $lunNumber
  Update-AzVM -VM $vm -ResourceGroupName $resourceGroup -Verbose
}

Usa obiettivi iSCSI

Creare server host di destinazione iSCSI

  1. Distribuire tre macchine virtuali che funzionano su una versione supportata di RHEL OS. Le VM non devono essere grandi. Le dimensioni delle VM come Standard_E2s o Standard_D2s sono sufficienti.

    Note

    Non è necessario usare RHEL per SAP con HA e Update Services, né RHEL per l'immagine OS di SAP Apps per il target server iSCSI. Puoi invece usare un'immagine standard di RHEL OS. Tuttavia, il ciclo di vita del supporto varia tra le diverse versioni del prodotto del sistema operativo.

  2. Installa gli ultimi aggiornamenti e riavvia se necessario.

    sudo dnf -y update
    
  3. Installa il pacchetto target iSCSI.

    sudo dnf install -y targetcli
    
  4. Abilita e avvia il servizio iSCSI.

    sudo systemctl start target
    sudo systemctl enable target
    
  5. Apri la porta nel firewall.

    sudo firewall-cmd --add-port=3260/tcp --permanent
    sudo firewall-cmd --reload
    

Creare destinazioni iSCSI

Per ogni cluster, devi provvedere un disco iSCSI su ogni server host iSCSI, e poi concedere a ogni nodo del cluster l'accesso a quel disco. In questo esempio, crei dischi per due cluster diversi:

  • ascsnw1: Il cluster ASCS/ERS di NW1
  • hdbnw1: Il cluster di database HANA per NW1
  • sap-cl1 e sap-cl2: nomi host per i nodi del cluster ASCS/ERS NW1
  • sap-db1 e sap-db2: nomi host per i nodi del cluster HANA di NW1
  1. Creare la cartella radice per tutti i dispositivi SBD.
    sudo mkdir /sbd
    
  2. Crea il dispositivo SBD per il primo cluster (ascsnw1).
    # Create Storage Object
    sudo targetcli backstores/fileio create sbdascsnw1 /sbd/sbdascsnw1 50M write_back=false
    # Create iSCSI Target
    sudo targetcli iscsi/ create iqn.2006-04.ascsnw1.local:ascsnw1
    # Creates the LUN and attaches it to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/luns/ create /backstores/fileio/sbdascsnw1
    # Grant Cluster Node 1 (sap-cl1) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl1.local:sap-cl1
    # Grant Cluster Node 2 (sap-cl2) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl2.local:sap-cl2
    
  3. Crea il dispositivo SBD per il secondo cluster (hdbnw1).
    # Create Storage Object
    sudo targetcli backstores/fileio create sbdhdbnw1 /sbd/sbdhdbnw1 50M write_back=false
    # Create iSCSI Target
    sudo targetcli iscsi/ create iqn.2006-04.hdbnw1.local:hdbnw1
    # Creates the LUN and attaches it to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/luns/ create /backstores/fileio/sbdhdbnw1
    # Grant Cluster Node 1 (sap-db1) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/acls/ create iqn.2006-04.sap-db1.local:sap-db1
    # Grant Cluster Node 2 (sap-db2) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/acls/ create iqn.2006-04.sap-db2.local:sap-db2
    
  4. Salva la configurazione.
    sudo targetcli saveconfig
    
  5. Verifica la configurazione.
    sudo targetcli ls
    
    o- / ............................................................................................... [...]
      o- backstores .................................................................................... [...]
      | o- block ........................................................................ [Storage Objects: 0]
      | o- fileio ....................................................................... [Storage Objects: 2]
      | | o- sbdascsnw1 ..................................... [/sbd/sbdascsnw1 (50.0MiB) write-thru activated]
      | | | o- alua ......................................................................... [ALUA Groups: 1]
      | | |   o- default_tg_pt_gp ............................................. [ALUA state: Active/optimized]
      | | o- sbdhdbnw1 ....................................... [/sbd/sbdhdbnw1 (50.0MiB) write-thru activated]
      | |   o- alua ......................................................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp ............................................. [ALUA state: Active/optimized]
      | o- pscsi ........................................................................ [Storage Objects: 0]
      | o- ramdisk ...................................................................... [Storage Objects: 0]
      o- iscsi .................................................................................. [Targets: 2]
      | o- iqn.2006-04.hdbnw1.local:hdbnw1 ......................................................... [TPGs: 1]
      | | o- tpg1 ..................................................................... [no-gen-acls, no-auth]
      | |   o- acls ................................................................................ [ACLs: 2]
      | |   | o- iqn.2006-04.sap-db1.local:sap-db1 .......................................... [Mapped LUNs: 1]
      | |   | | o- mapped_lun0 ..................................................... [lun0 fileio/sbdhdb (rw)]
      | |   | o- iqn.2006-04.sap-db2.local:sap-db2 .......................................... [Mapped LUNs: 1]
      | |   |   o- mapped_lun0 ..................................................... [lun0 fileio/sbdhdb (rw)]
      | |   o- luns ................................................................................ [LUNs: 1]
      | |   | o- lun0 ................................. [fileio/sbdhdbnw1 (/sbd/sbdhdbnw1) (default_tg_pt_gp)]
      | |   o- portals .......................................................................... [Portals: 1]
      | |     o- 0.0.0.0:3260 ........................................................................... [OK]
      | o- iqn.2006-04.ascsnw1.local:ascsnw1 ....................................................... [TPGs: 1]
      |   o- tpg1 ..................................................................... [no-gen-acls, no-auth]
      |     o- acls ................................................................................ [ACLs: 2]
      |     | o- iqn.2006-04.sap-cl1.local:sap-cl1 .......................................... [Mapped LUNs: 1]
      |     | | o- mapped_lun0 ................................................. [lun0 fileio/sbdascsnw1 (rw)]
      |     | o- iqn.2006-04.sap-cl2.local:sap-cl2 .......................................... [Mapped LUNs: 1]
      |     |   o- mapped_lun0 ................................................. [lun0 fileio/sbdascsnw1 (rw)]
      |     o- luns ................................................................................ [LUNs: 1]
      |     | o- lun0 ............................... [fileio/sbdascsnw1 (/sbd/sbdascsnw1) (default_tg_pt_gp)]
      |     o- portals .......................................................................... [Portals: 1]
      |       o- 0.0.0.0:3260 ........................................................................... [OK]
      o- loopback ............................................................................... [Targets: 0]
    

Configurare Azure Fence Agent

  1. Crea identità

    Per creare un'identità gestita (MSI), crea un'identità gestita assegnata dal sistema per ogni VM nel cluster. Al momento non sono supportate le identità gestite assegnate dagli utenti.

  2. Creazione di un ruolo personalizzato.

    L'identità necessita di autorizzazioni tramite RBAC di Azure per eseguire azioni di isolamento verso le proprie VM. Per conformarsi al Modello di Sicurezza Accesso Minimo Privilegiato (LPA), crea un ruolo RBAC personalizzato.

    Usa la seguente definizione per il tuo ruolo, sostituendo l'ID dell'abbonamento dove necessario:

    {
          "Name": "Linux Fence Agent",
          "description": "Allowed to power-off and start virtual machines",
          "assignableScopes": [
                  "/subscriptions/<Subscription 1 ID (GUID)>",
                  "/subscriptions/<Subscription N ID (GUID)>"
          ],
          "actions": [
                  "Microsoft.Compute/*/read",
                  "Microsoft.Compute/virtualMachines/powerOff/action",
                  "Microsoft.Compute/virtualMachines/start/action"
          ],
          "notActions": [],
          "dataActions": [],
          "notDataActions": []
    }
    
  3. Assegna il ruolo personalizzato alle tue identità.

    Per ogni VM nel tuo cluster, assegna la sua identità gestita al ruolo personalizzato "Linux Fence Agent" per ogni VM nel cluster, compresa se stessa. Per i passaggi dettagliati, vedere Assegnare a un'identità gestita l'accesso a una risorsa tramite il portale di Azure.

    Importante

    Tieni presente che l'assegnazione e la rimozione dell'autorizzazione con identità gestite possono essere rimandate fino a quando non entrano in vigore.

Crea e configura il cluster

  1. [A] Aggiorna il sistema operativo e riavvia se necessario.

    sudo dnf -y update
    
  2. [A] Installare i pacchetti cluster richiesti.

    sudo dnf install -y nmap-ncat pcs pacemaker resource-agents resource-agents-cloud
    
  3. [A] Installare i pacchetti di recinzione richiesti.

    sudo dnf install -y sbd fence-agents-sbd
    
    sudo dnf install -y sbd fence-agents-sbd iscsi-initiator-utils
    
    sudo dnf install -y fence-agents-azure-arm
    
  4. [A] Configura il DNS.

    È possibile usare un server DNS o modificare /etc/hosts in tutti i nodi. In questo esempio viene illustrato come usare il file /etc/hosts.

    Aggiornare le voci in modo che corrispondano agli indirizzi IP e nomi host.

    sudo vi /etc/hosts
    [...]
    # IP address of cluster node 1
    10.27.0.6    sap-cl1
    # IP address of cluster node 2
    10.27.0.7    sap-cl2
    
    sudo vi /etc/hosts
    [...]
    # IP address of cluster node 1
    10.0.0.6    sap-cl1
    # IP address of cluster node 2
    10.0.0.7    sap-cl2
    # IP address of iSCSI Target Host Server 1
    10.0.0.17   sbd-iscsi1
    # IP address of iSCSI Target Host Server 1
    10.0.0.18   sbd-iscsi2
    # IP address of iSCSI Target Host Server 1
    10.0.0.19   sbd-iscsi3
    
  5. [A] Aggiorna la hacluster password per farla essere la stessa su tutti i nodi.

    sudo passwd hacluster
    
  6. [A] Aggiorna il firewall.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --reload
    
  7. [A] Abilita i servizi Pacemaker.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Crea il cluster.

    sudo pcs host auth sap-cl1 sap-cl2 -u hacluster
    sudo pcs cluster setup ascsnw1 sap-cl1 sap-cl2 totem token=30000
    sudo pcs cluster start --all
    
  9. Configura un ritardo di avvio per Pacemaker.

    Avviare Pacemaker immediatamente dopo l'avvio può potenzialmente permettere a un nodo di rientrare nel cluster prima che il failover si completi, prevenendo il failover o ritardando il recupero. Per risolvere questo problema usa un servizio timer per ritardare l'avvio del pacemaker al riavvio.

    1. [A] Configura il servizio timer.
      sudo vi /etc/systemd/system/pacemaker.timer   
      
      [Unit]
      Description=Delay start of pacemaker.service after boot
      [Timer]
      OnBootSec=186
      Unit=pacemaker.service
      [Install]
      WantedBy=timers.target
      
    2. [A] Attiva il servizio timer.
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] Disattivare i servizi Pacemaker.
      sudo pcs cluster disable --all
      
  10. Valida il cluster.

    1. [1] Convalidare il cluster Pacemaker.
      sudo pcs status
      
      Cluster name: ascsnw1
      Cluster Summary:
        * Stack: corosync (Pacemaker is running)
        * Current DC: sap-cl1 (version 3.0.0-5.1.el10_0-8818a21) - partition with quorum
        * Last updated: Tue May 19 22:15:08 2026 on sap-cl1
        * Last change:  Tue Apr 21 23:11:34 2026 by root via root on sap-cl1
        * 2 nodes configured
        * 0 resource instances configured
      
      Node List:
        * Online: [ sap-cl1 sap-cl2 ]
      
      Full List of Resources:
      
      Daemon Status:
        corosync: active/disabled
        pacemaker: active/disabled
        pcsd: active/enabled
      
    2. [A] Valida i servizi.
      systemctl list-unit-files pacemaker.timer pacemaker.service corosync.service pcsd.service
      
      UNIT FILE         STATE    PRESET
      corosync.service  disabled disabled
      pacemaker.service disabled disabled
      pacemaker.timer   enabled  disabled
      pcsd.service      enabled  disabled
      

Configurare la recinzione

  1. [A] Attiva il servizio SBD.
    sudo systemctl enable sbd
    
  2. [A] Abilita il controllo software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] Scopri l'ID dispositivo iSCSI.
    1. Determina il punto di montaggio in base al numero LUN
      ls -l /dev/disk/azure/scsi1/lun1
      lrwxrwxrwx. 1 root root 12 Apr 16 20:22 /dev/disk/azure/scsi1/lun1 -> ../../../sdb
      
    2. Recupera l'ID del dispositivo iSCSI dal montaggio.
      ls -l /dev/disk/by-id/scsi-3* | grep -i sdb
      lrwxrwxrwx. 1 root root  9 Apr 16 20:22 /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -> ../../sdb
      
  4. [1] Creare il dispositivo SBD.
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] Aggiungi il dispositivo SBD al cluster.
    sudo pcs stonith create sbd fence_sbd devices=/dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 op monitor interval=600 timeout=15
    
  2. [1] Modifica le impostazioni di configurazione SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Valida il file di configurazione SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] Abilita i servizi richiesti.
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] Abilita il controllo software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] Aggiorna il InitiatorName per il nodo 1.
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] Aggiorna il InitiatorName per il nodo 2.
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] Riavvia i servizi iSCSI.
    sudo systemctl restart iscsi iscsid
    
  6. [A] Monta i target iSCSI di tutti i server host iSCSI.
    for hostServer in sbd-iscsi1 sbd-iscsi2 sbd-iscsi3; do
       iscsiadm -m discovery --type=st --portal=${hostServer}:3260 
       iscsiadm -m node -T iqn.2006-04.ascsnw1.local:ascsnw1 --login --portal=${hostServer}:3260
       iscsiadm -m node --portal=${hostServer}:3260 -T iqn.2006-04.ascsnw1.local:ascsnw1 --op=update --name=node.startup --value=automatic
    done
    
  7. [A] Scopri gli ID dei dispositivi iSCSI.
    1. Determina i punti di montaggio iSCSI.
      lsscsi
      [0:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
      [1:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdb
      [2:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sdc
      [3:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sdd
      [4:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sde
      
    2. Ottieni gli ID dei dispositivi iSCSI.
      ls -l /dev/disk/by-id/scsi-3* | grep sd[c,d,e]
      lrwxrwxrwx 1 root root  9 Jul 21 18:02 /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 -> ../../sdd
      lrwxrwxrwx 1 root root  9 Jul 21 17:50 /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff -> ../../sdc
      lrwxrwxrwx 1 root root  9 Jul 21 18:04 /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5 -> ../../sde
      
  8. [1] Crea i dispositivi SBD.
    sudo sbd -d /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 -1 60 -4 120 create
    sudo sbd -d /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff -1 60 -4 120 create
    sudo sbd -d /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5 -1 60 -4 120 create
    
  1. [1] Aggiungi i dispositivi SBD al cluster.
    sudo pcs stonith create sbd fence_sbd \
       devices=/dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528,/dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff,/dev/disk/by-id/scsi-360014059f135275c24647d49268123e5 \
       op monitor interval=600 timeout=120
    
  2. [1] Modifica le impostazioni di configurazione SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Valida il file di configurazione SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] Configura Azure Fence Agent.

    Note

    Quando si utilizza Azure Government Cloud, è necessario specificare questa cloud= opzione quando si configura Azure Fence Agent. Ad esempio, cloud=usgov per il cloud del governo degli Stati Uniti Azure.

    sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true \
       resourceGroup="<ResourceGroupName>" subscriptionId="<SubscriptionID>" \
       pcmk_host_map="sap-cl1:<AzureVMNameCL1>;sap-cl2:<AzureVMNameCL2>" \
       power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 \
       pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
       meta failure-timeout=120s op monitor interval=3600 timeout=120
    
  2. [1] Configura il cluster per Azure Fence Agent.

    sudo pcs property set stonith-enabled=true
    sudo pcs property set stonith-timeout=900
    

Costruire un cluster Pacemaker con più di due nodi

Se stai costruendo un cluster più ampio, tieni a mente queste considerazioni:

  1. [1] Regola la configurazione del cluster.

    I Votequorum - Expected votes valori e Votequorum - Flags - 2Node si aggiornano automaticamente quando aggiungi un terzo o più nodi. Verifica che il 2Node flag sia assente e Votequorum - Expected votes corrisponda al numero di nodi nel tuo cluster.

    sudo pcs quorum status
    
    Quorum information
    ------------------
    [...]
    
    Votequorum information
    ----------------------
    Expected votes:   3
    Highest expected: 3
    Total votes:      3
    Quorum:           2
    Flags:            Quorate WaitForAll
    
    Membership information
    ----------------------
    [...]
    
  2. Regola la configurazione della recinzione.

    sudo crm resource param stonith-sbd delete pcmk_delay_max
    sudo crm resource param stonith-sbd set pcmk_action_limit -1
    
    sudo crm resource param rsc_st_azure delete pcmk_delay_max
    sudo crm resource param rsc_st_azure pcmk_action_limit -1
    

Configurare Pacemaker per gli eventi pianificati Azure

Scheduled Events è un servizio di metadati Azure che dà alla tua applicazione il tempo di prepararsi per la manutenzione della VM. Fornisce informazioni sugli eventi di manutenzione imminenti, come un riavvio, così che la tua applicazione possa prepararsi e limitare le interruzioni.

L'agente di risorse azure-events-az monitora questo servizio di metadati. Quando l'agente rileva eventi e determina che un altro nodo del cluster è disponibile, imposta un attributo #health-azure di salute a livello di nodo a -1000000. Questo valore fa sì che il cluster consideri il nodo non sano e migra risorse lontano dal nodo interessato. Il vincolo di posizione garantisce che le risorse iniziali con health- vengano escluse, poiché l'agente azure-events-az deve comunque essere eseguito su entrambi i nodi. Una volta che il nodo del cluster interessato è libero dalle risorse in esecuzione del cluster, l'agente notifica il servizio di metadati e l'evento programmato può continuare. Quando tutti gli eventi si completano, l'agente risorsa riporta l'attributo #health-azure a 0, segnando di nuovo il nodo come sano.

Importante

In precedenza, questo documento descriveva l'uso dell'agente di risorse azure-events. Il nuovo agente di risorse azure-events-az supporta completamente ambienti di Azure distribuiti in zone di disponibilità diverse. Usa il più recente agente azure-events-az per tutti i sistemi SAP altamente disponibili con Pacemaker.

  1. Installa e aggiorna il resource-agents pacchetto.

    sudo dnf install -y resource-agents
    
  2. [1] Metti il cluster in modalità manutenzione.

    sudo pcs property set maintenance-mode=true
    
  3. [1] Imposta la strategia e il vincolo del nodo di salute del cluster Pacemaker.

    Importante

    Non definire altre risorse nel cluster a partire da health- oltre alle risorse descritte nei passaggi successivi.

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
       rule score-attribute='#health-azure' \
       "defined #uname"
    
  4. [1] Impostare il valore iniziale degli attributi del cluster.

    Esegui un comando per ogni nodo del cluster. Negli ambienti scale-out includere la VM Majority Maker.

    # Node 1
    sudo crm_attribute --node sap-cl1 --name '#health-azure' --update 0
    # Node 2
    sudo crm_attribute --node sap-cl2 --name '#health-azure' --update 0
    # Node N
    sudo crm_attribute --node sap-clN --name '#health-azure' --update 0
    
  5. [1] Configurare le risorse in Pacemaker. Le risorse devono iniziare con health-azure.

    sudo pcs resource create health-azure-events \
       ocf:heartbeat:azure-events-az \
       meta failure-timeout=120s \
       op monitor interval=10s timeout=240s \
       op start timeout=10s start-delay=90s
    
    sudo pcs resource clone health-azure-events meta allow-unhealthy-nodes=true
    
  6. Togli il cluster Pacemaker dalla modalità manutenzione e cancella eventuali errori

    sudo pcs property set maintenance-mode=false
    sudo pcs resource cleanup
    
  7. Verifica che parta health-azure-events con successo su tutti i nodi.

    sudo pcs status
    
       Cluster name: ascsnw1
       Cluster Summary:
         * Stack: corosync (Pacemaker is running)
         * Current DC: sap-cl1 (version 3.0.0-5.1.el10_0-8818a21) - partition with quorum
         * Last updated: Tue May 19 22:15:08 2026 on sap-cl1
         * Last change:  Tue Apr 21 23:11:34 2026 by root via root on sap-cl1
         * 2 nodes configured
         * 3 resource instances configured
    
       Node List:
         * Online: [ sap-cl1 sap-cl2 ]
    
       Full List of Resources:
         * sbd (stonith:fence_sbd):     Started sap-cl1
         * Clone Set: health-azure-events-clone [health-azure-events]:
           * Started: [ sap-cl1 sap-cl2 ]
    
       Daemon Status:
         corosync: active/disabled
         pacemaker: active/disabled
         pcsd: active/enabled
         sbd: active/enabled
    

    L'esecuzione della prima query per gli eventi pianificati può richiedere fino a due minuti. I test pacemaker con eventi pianificati possono usare azioni di riavvio o ridistribuzione per le macchine virtuali del cluster. Per altre informazioni, vedere Eventi pianificati.

Configurazione facoltativa dell'isolamento

Suggerimento

Questa sezione è applicabile solo se si vuole configurare il dispositivo di isolamento speciale fence_kdump.

Se è necessario raccogliere informazioni di diagnostica all'interno della macchina virtuale, potrebbe essere utile configurare un altro dispositivo di isolamento in base all'agente di isolamento fence_kdump. L'agente fence_kdump riesce a rilevare il ripristino da un arresto anomalo del sistema kdump di un nodo e può consentire il completamento del servizio di ripristino dall'arresto anomalo del sistema prima che vengano richiamati altri metodi di isolamento. Si noti che fence_kdump non è una sostituzione per i meccanismi di isolamento tradizionali, ad esempio SBD o Azure agente di isolamento, quando si usano macchine virtuali Azure.

Importante

Tenere presente che quando fence_kdump è configurato come dispositivo di isolamento di primo livello, introduce ritardi nelle operazioni di isolamento e, rispettivamente, nel failover delle risorse dell'applicazione.

Se viene rilevato un dump di arresto anomalo del sistema, l'isolamento viene ritardato fino al completamento del servizio di ripristino a seguito dell'arresto anomalo del sistema. Se il nodo con errore non è raggiungibile o se non risponde, l'isolamento viene ritardato per un intervallo di tempo determinato, secondo il numero configurato di iterazioni e il timeout fence_kdump.

Potrebbe essere necessario adattare il timeout fence_kdump proposto all'ambiente specifico.

È consigliabile configurare fence_kdump fencing solo quando necessario per raccogliere la diagnostica all'interno della macchina virtuale e sempre in combinazione con metodi di fencing tradizionali, ad esempio SBD o agente di fencing Azure.

I seguenti articoli della Knowledge Base di Red Hat contengono informazioni importanti sulla configurazione dell'isolamento fence_kdump:

Eseguire i passaggi facoltativi seguenti per aggiungere fence_kdump come configurazione di isolamento di primo livello, oltre alla configurazione dell'agente di isolamento Azure.

  1. [A] Verificare che kdump sia attivo e configurato.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Installare l'agente di isolamento fence_kdump.

    sudo dnf install -y fence-agents-kdump
    
  3. [1] Creare un dispositivo di isolamento fence_kdump nel cluster.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2" timeout=30
    
  4. [1] Configurare i livelli di isolamento in modo che il meccanismo di isolamento fence_kdump venga attivato per primo.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2"
    pcs stonith level add 1 sap-cl1 rsc_st_kdump
    pcs stonith level add 1 sap-cl2 rsc_st_kdump
    # Replace <stonith-resource-name> to the resource name of the STONITH resource configured in your pacemaker cluster (example based on above configuration - sbd or rsc_st_azure)
    pcs stonith level add 2 sap-cl1 <stonith-resource-name>
    pcs stonith level add 2 sap-cl2 <stonith-resource-name>
    
    # Check the fencing level configuration 
    pcs stonith level
    # Example output
    # Target: sap-cl1
    # Level 1 - rsc_st_kdump
    # Level 2 - <stonith-resource-name>
    # Target: sap-cl2
    # Level 1 - rsc_st_kdump
    # Level 2 - <stonith-resource-name>
    
  5. [A] Consentire le porte necessarie per fence_kdump attraverso il firewall.

    firewall-cmd --add-port=7410/udp --permanent
    firewall-cmd --reload
    
  6. [A] Eseguire la configurazione di fence_kdump_nodes in /etc/kdump.conf per evitare che fence_kdump abbia esito negativo con un timeout per alcune versioni di kexec-tools. Per maggiori informazioni, vedere Timeout di fence_kdump quando fence_kdump_nodes non è specificato con kexec-tools versione 2.0.15 o successiva. Di seguito è illustrata la configurazione di esempio per un cluster a due nodi. Dopo aver apportato una modifica in /etc/kdump.conf, l'immagine kdump deve essere rigenerata. Per rigenerarla, riavviare il servizio 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
    
  7. [A] Assicurarsi che il file di immagine initramfs contenga i file fence_kdump e hosts.

    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
    
  8. Testare la configurazione arrestando un nodo in modo anomalo.

    Importante

    Se il cluster è già in uso produttivo, pianificare il test di conseguenza perché l'arresto anomalo di un nodo ha un impatto sull'applicazione.

    echo c > /proc/sysrq-trigger
    

Passaggi successivi