Configuración de Pacemaker en Red Hat Enterprise Linux en Azure

Este artículo explica cómo configurar y configurar un clúster básico de dos nodos Pacemaker en Red Hat Enterprise Linux (RHEL). Las instrucciones cubren RHEL 8.6+, RHEL 9.x, y RHEL 10.x.

Prerequisites

Información general

Esta guía asume que ya has desplegado el grupo de recursos requerido, la red virtual de Azure, la subred y las máquinas virtuales (VMs).

Los clústeres que funcionan en Linux requieren un agente de cercas para proteger nodos poco saludables. Para realizar esta tarea en Azure, utiliza uno de los siguientes métodos:

  • Muerte basada en almacenamiento (SBD) con disco compartido de Azure
  • Storage Based Death (SBD) con destinos iSCSI
  • Agente de barreras de Azure

Nota:

Los siguientes prefijos se utilizan en este documento:

  • [A]: aplicable a todos los nodos.
  • [1]: aplicable solo al nodo 1.
  • [2]: aplicable solo al nodo 2.

Importante

En Azure, los clústeres de alta disponibilidad de RHEL con fencing basado en almacenamiento (fence_sbd) utilizan un watchdog emulado por software. Revisa la siguiente documentación al utilizar SBD.

Uso de SBD con Azure Shared Disk

Al usar Azure Shared Disks, puedes montar el mismo disco en todas las máquinas virtuales que forman parte del clúster. Puedes alojar tu dispositivo SBD en ese disco compartido sin necesidad de infraestructura adicional.

Diagrama de un disco compartido de Azure como dispositivo SBD en un clúster de marcapasos.

Ventajas

  • Proporciona una opción nativa de dispositivo de bloque compartido de Azure para SBD sin requerir recursos adicionales.
  • Las máquinas virtuales conectan directamente el disco gestionado, reduciendo la dependencia de consideraciones adicionales de la red.

Consideraciones importantes

  • Puedes usar un disco compartido de Azure con el Premium SSD SKU como dispositivo SBD.
  • Revisa la lista de sistemas operativos compatibles.
  • Los dispositivos SBD que utilizan un disco compartido premium Azure soportan almacenamiento redundante local (LRS) y almacenamiento redundante por zonas (ZRS).
  • Según el tipo de la implementación, elija el almacenamiento redundante adecuado para un disco compartido de Azure como dispositivo SBD.
    • Un dispositivo SBD que utilice LRS para el disco compartido premium de Azure (skuName: Premium_LRS) solo admite implementaciones en un conjunto de disponibilidad.
    • Se recomienda un dispositivo SBD que utilice ZRS para un disco compartido premium Azure (skuName - Premium_ZRS) para despliegues en zonas de disponibilidad.
  • El Azure disco compartido que se usa para dispositivos SBD no necesita ser grande. El valor maxShares determina cuántos nodos de clúster puede usar el disco compartido. Por ejemplo, puedes usar tamaños de disco P1 o P2 para tu dispositivo SBD en un clúster de dos nodos como SAP ASCS/ERS o SAP HANA scale-up.
    • Para clústeres con más de dos nodos, consulta el valor documentado de maxShares para el disco seleccionado.
  • No conectes un dispositivo SBD de disco compartido de Azure entre diferentes clústeres de Pacemakers.
  • Si usa varios Azure dispositivos SBD de disco compartido, compruebe el límite de un número máximo de discos de datos que se pueden conectar a una máquina virtual.
  • Para obtener más información sobre las limitaciones de Azure discos compartidos, revise detenidamente la sección "Limitaciones" de Azure documentación del disco compartido.

Uso de SBD con destinos iSCSI

Esta solución requiere alojar objetivos de Internet Small Computer System Interface (iSCSI) en al menos una máquina virtual adicional (VM).

Diagrama de servidores iSCSI que alojan objetivos iSCSI para dispositivos SBD en un clúster Pacemaker.

Ventajas

  • Estos servidores anfitriones iSCSI también pueden alojar objetivos iSCSI para otros clústeres de Pacemaker en la misma región.
  • Si ya los usas en las instalaciones, no requieren cambios en la forma en que operas el clúster Pacemaker.

Consideraciones importantes

  • Debes usar tres servidores anfitriones iSCSI para tener el mayor nivel de resiliencia para tu clúster.
    • El uso de un único servidor introduce un punto único de fallo que impide que el clúster realice el fencing si dicho servidor está inactivo.
    • Pacemaker no permite el fencing si solo se dispone de dos destinos y uno de ellos está inactivo.
  • Los servidores anfitriones objetivo de iSCSI deben estar en la misma región que tus clústeres.
  • El enrutamiento de red entre tus clústeres y los servidores anfitriones iSCSI no debe atravesar ningún dispositivo de red no redundante (como un Dispositivo Virtual de Red).
    • Los eventos de mantenimiento y otros problemas con los dispositivos de red pueden afectar negativamente a la estabilidad y fiabilidad de la configuración general del clúster.

Uso del agente Fence de Azure

Al usar Azure Fence Agent, el clúster puede aplicar cercado a los nodos llamando directamente a las API de Azure para reiniciar los nodos con errores.

Diagrama del agente de vallado de Azure en un clúster de Pacemaker.

Ventajas

  • No hacen falta recursos adicionales.
  • Las Identidades Gestionadas eliminan cualquier mantenimiento de credenciales.

Consideraciones importantes

  • Utiliza Identidades Gestionadas para la autenticación. Si actualmente usas un principal de servicio, actualiza el Azure Fence Agent de SPN a MSI.
  • El agente de fence de Azure requiere conectividad saliente a los puntos de conexión públicos de Azure. Para obtener más información junto con las posibles soluciones, consulte Conectividad del punto de conexión público para las máquinas virtuales que usan el ILB estándar.
  • Las operaciones de supervisión y barrera se deserializan. Como resultado, si hay una operación de supervisión más larga y un evento de barrera simultánea, no habrá ningún retraso en la conmutación por error del clúster porque la operación de supervisión ya se está ejecutando.

Despliega un disco compartido de Azure para SBD

Para crear y conectar un disco compartido de Azure usando PowerShell, ejecuta los siguientes comandos. Si quieres desplegar recursos usando la CLI de Azure o el portal de Azure, consulta Desplegar 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
}

Utilizar destinos iSCSI

Construir servidores host de destino iSCSI

  1. Despliega tres máquinas virtuales que funcionen en una versión soportada de RHEL OS. Las máquinas virtuales no necesitan ser grandes. Tamaños de VM como Standard_E2s o Standard_D2s son suficientes.

    Nota:

    No necesitas usar RHEL para SAP con HA y Update Services, ni RHEL para la imagen de SAP Apps OS para el servidor objetivo iSCSI. Puedes usar una imagen estándar de RHEL OS en su lugar. Sin embargo, el ciclo de vida de soporte varía entre las distintas versiones del producto del sistema operativo.

  2. Instala las últimas actualizaciones y reinicia si es necesario.

    sudo dnf -y update
    
  3. Instala el paquete de destino iSCSI.

    sudo dnf install -y targetcli
    
  4. Activa y inicia el servicio iSCSI.

    sudo systemctl start target
    sudo systemctl enable target
    
  5. Abre un puerto en el cortafuegos.

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

Crear destinos iSCSI

Para cada clúster, necesitas provisionar un disco iSCSI en cada servidor anfitrión iSCSI y luego conceder acceso a ese disco a cada nodo del clúster. En este ejemplo, creas discos para dos clústeres diferentes:

  • ascsnw1: El clúster ASCS/ERS para NW1
  • hdbnw1: El clúster de bases de datos HANA para NW1
  • sap-cl1 y sap-cl2: Nombres de host para los nodos del clúster ASCS/ERS de NW1
  • sap-db1 y sap-db2: Nombres de host para los nodos del clúster HANA de NW1
  1. Cree la carpeta raíz para todos los dispositivos SBD.
    sudo mkdir /sbd
    
  2. Crea el dispositivo SBD para el primer clúster (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 el dispositivo SBD para el segundo clúster (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. Guarde la configuración.
    sudo targetcli saveconfig
    
  5. Verifica la configuración.
    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]
    

Configurar el agente de Azure Fence

  1. Crear identidad

    Para crear una identidad gestionada (MSI), crea una identidad gestionada asignada por el sistema para cada VM del clúster. Por ahora no se admiten identidades gestionadas asignadas por usuarios.

  2. Crear un rol personalizado.

    Tu identidad debe tener permisos mediante Azure RBAC para realizar acciones de aislamiento (fencing) en tus máquinas virtuales. Para cumplir con el Modelo de Seguridad de Acceso Mínimo Privilegiado (LPA), crea un rol RBAC personalizado.

    Utiliza la siguiente definición para tu puesto, reemplazando tu(s) ID(s) de suscripción donde sea necesario:

    {
          "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. Asigna el rol personalizado a tus identidades.

    Para cada VM de tu clúster, asigna su identidad gestionada al rol personalizado "Linux Fence Agent" para cada VM del clúster, incluida ella misma. Para conocer los pasos detallados, consulte Asignación de acceso de una identidad administrada a un recurso mediante Azure Portal.

    Importante

    Ten en cuenta que la asignación y eliminación de autorizaciones con identidades gestionadas puede retrasarse hasta que entren en vigor.

Crear y configurar el clúster

  1. [A] Actualizar el sistema operativo y reiniciar si es necesario.

    sudo dnf -y update
    
  2. [A] Instalar los paquetes de clúster necesarios.

    sudo dnf install -y nmap-ncat pcs pacemaker resource-agents resource-agents-cloud
    
  3. [A] Instalar los paquetes de vallas necesarios.

    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] Configurar el DNS.

    Puede usar un servidor DNS o modificar /etc/hosts en todos los nodos. En este ejemplo se muestra cómo utilizar el archivo /etc/hosts.

    Actualiza las entradas para que coincidan con tus IPs y nombres de 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] Actualizar la hacluster contraseña para que sea la misma en todos los nodos.

    sudo passwd hacluster
    
  6. [A] Actualizar el cortafuegos.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --reload
    
  7. [A] Habilitar los servicios de Pacemaker.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Crea el clúster.

    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 retardo de arranque para Pacemaker.

    Iniciar Pacemaker inmediatamente después del arranque podría permitir que un nodo se reincorporara al clúster antes de que se completara la conmutación por error, lo que impediría dicha conmutación o retrasaría la recuperación. Para solucionar este problema, utiliza un servicio de temporizador para retrasar el arranque del marcapasos al reiniciar.

    1. [R] Configurar el servicio de temporizador.
      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] Activar el servicio de temporizador.
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] Desactivar los servicios de Pacemaker.
      sudo pcs cluster disable --all
      
  10. Valida el clúster.

    1. [1] Validar el clúster de 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] Validar servicios.
      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
      

Configurar la valla

  1. [A] Habilitar el servicio SBD.
    sudo systemctl enable sbd
    
  2. [A] Activar el vigilante de software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] Descubre el ID del dispositivo iSCSI.
    1. Determinar el punto de montaje en función del número LUN
      ls -l /dev/disk/azure/scsi1/lun1
      lrwxrwxrwx. 1 root root 12 Apr 16 20:22 /dev/disk/azure/scsi1/lun1 -> ../../../sdb
      
    2. Obtén el ID del dispositivo iSCSI a partir del montaje.
      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] Cree el dispositivo SBD.
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] Añadir el dispositivo SBD al clúster.
    sudo pcs stonith create sbd fence_sbd devices=/dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 op monitor interval=600 timeout=15
    
  2. [1] Cambiar la configuración de SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Validar el archivo de configuración SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] Habilitar los servicios necesarios.
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] Activar el vigilante de software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] Actualizar el InitiatorName para el nodo 1.
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] Actualizar el InitiatorName para el nodo 2.
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] Reinicia los servicios iSCSI.
    sudo systemctl restart iscsi iscsid
    
  6. [A] Monta los destinos iSCSI desde todos los servidores 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] Descubre los IDs de los dispositivos iSCSI.
    1. Determina los puntos de montaje de 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. Consigue los identificadores de dispositivos 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] Crear los dispositivos 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] Añadir los dispositivos SBD al clúster.
    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] Cambiar la configuración de SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Validar el archivo de configuración SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] Configurar Azure Fence Agent.

    Nota:

    Al usar Azure Government Cloud, debes especificar la cloud= opción al configurar el Agente de Cerca de Azure. Por ejemplo, cloud=usgov para la nube del gobierno de Azure en Estados Unidos.

    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 el clúster para Azure Fence Agent.

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

Configuración de un clúster Pacemaker con más de dos nodos

Si estás construyendo un clúster más grande, ten en cuenta estas consideraciones:

  1. [1] Ajustar la configuración del clúster.

    Los Votequorum - Expected votes valores y Votequorum - Flags - 2Node se actualizan automáticamente cuando añades un tercer nodo o más. Verifica que el indicador 2Node esté ausente y que Votequorum - Expected votes sea igual al número de nodos de tu clúster.

    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. Ajusta la configuración de la valla.

    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
    

Configuración de Pacemaker para eventos programados de Azure

Scheduled Events es un servicio de metadatos de Azure que da tiempo a tu aplicación para prepararse para el mantenimiento de la máquina virtual. Proporciona información sobre eventos de mantenimiento próximos, como un reinicio, para que tu aplicación pueda prepararse para ellos y limitar interrupciones.

El agente de recurso azure-events-az monitoriza este servicio de metadatos. Cuando el agente detecta eventos y determina que hay otro nodo del clúster disponible, establece un atributo #health-azure de salud a nivel de nodo como -1000000. Este valor hace que el clúster considere el nodo insalubre y migra recursos lejos del nodo afectado. La restricción de ubicación garantiza que los recursos que empiezan con health- quedan excluidos, ya que el agente azure-events-az aún debe ejecutarse en ambos nodos. Una vez que el nodo afectado del clúster está libre de recursos en funcionamiento, el agente notifica al servicio de metadatos y el evento programado puede continuar. Cuando todos los eventos se completan, el agente de recursos devuelve el #health-azure atributo a 0, marcando el nodo como saludable de nuevo.

Importante

Anteriormente, en este documento se describía el uso de azure-events del agente de recursos. El nuevo agente de recursos azure-events-az es totalmente compatible con los entornos de Azure implementados en diferentes zonas de disponibilidad. Utiliza el agente azure-events-az más reciente para todos los sistemas SAP de alta disponibilidad con Pacemaker.

  1. Instala y actualiza el resource-agents paquete.

    sudo dnf install -y resource-agents
    
  2. [1] Coloca el grupo en modo mantenimiento.

    sudo pcs property set maintenance-mode=true
    
  3. [1] Configura la estrategia y la restricción de estado de los nodos del clúster de Pacemaker.

    Importante

    No defina ningún otro recurso del clúster que empiece por health-, aparte de los recursos descritos en los pasos siguientes.

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
       rule score-attribute='#health-azure' \
       "defined #uname"
    
  4. [1] Establezca el valor inicial de los atributos del clúster.

    Ejecuta un comando para cada nodo del clúster. En entornos de escalabilidad horizontal, incluye la máquina virtual 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] Configure los recursos en Pacemaker. Los recursos deben comenzar 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. Saca el clúster Pacemaker del modo de mantenimiento y borra cualquier error

    sudo pcs property set maintenance-mode=false
    sudo pcs resource cleanup
    
  7. Verifica que health-azure-events se inicia correctamente en todos los nodos.

    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
    

    La primera vez, la ejecución de consultas para eventos programados puede tardar hasta dos minutos. Las pruebas de Pacemaker con eventos programados pueden usar acciones de reinicio o reimplementación para las máquinas virtuales del clúster. Para obtener más información, consulte Eventos programados.

Configuración de barreras opcionales

Sugerencia

Esta sección solo es aplicable si se desea configurar el dispositivo de barrera especial para fence_kdump.

Si es necesario recopilar información de diagnóstico dentro de la máquina virtual, puede ser útil configurar otro dispositivo de barrera basado en el agente de barrera fence_kdump. El agente fence_kdump puede detectar que un nodo ha entrado en la recuperación de bloqueos de kdump y puede permitir que se complete el servicio de recuperación de bloqueos antes de que se invoque a otros métodos de barrera. Tenga en cuenta que fence_kdump no es un reemplazo de los mecanismos tradicionales de barrera, como el SBD o el agente de fence de Azure, cuando se usan máquinas virtuales de Azure.

Importante

Tenga en cuenta que cuando fence_kdump se configura como un dispositivo de barrera de primer nivel, introduce retrasos en las operaciones de barrera y, respectivamente, retrasos en la conmutación por error de los recursos de la aplicación.

Si se detecta correctamente un volcado de memoria, la creación de barreras se retrasará hasta que se complete el servicio de recuperación de bloqueos. Si no se puede acceder al nodo con errores o este no responde, la creación de barreras se retrasará según el tiempo determinado, el número configurado de iteraciones y el tiempo de espera de fence_kdump.

Es posible que el tiempo de espera propuesto de fence_kdump deba adaptarse al entorno específico.

Se recomienda configurar fence_kdump fencing solo cuando sea necesario para recopilar diagnósticos dentro de la máquina virtual y siempre en combinación con métodos de fencing tradicionales, como SBD o el agente de fence de Azure.

Los siguientes artículos de KB de Red Hat contienen información importante sobre la configuración de la barrera fence_kdump:

Ejecute los siguientes pasos opcionales para agregar fence_kdump como configuración de barrera de primer nivel, además de la configuración del agente de barrera de Azure.

  1. [A] Compruebe que kdump esté activo y configurado.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Instale el agente de barrera fence_kdump.

    sudo dnf install -y fence-agents-kdump
    
  3. [1] Cree un dispositivo de barrera fence_kdump en el clúster.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2" timeout=30
    
  4. [1] Configure los niveles de barrera de modo que el mecanismo de barrera fence_kdump se establezca primero.

    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] Permita los puertos necesarios para fence_kdump en el firewall.

    firewall-cmd --add-port=7410/udp --permanent
    firewall-cmd --reload
    
  6. [A] Realice la configuración de fence_kdump_nodes en el archivo /etc/kdump.conf para evitar que fence_kdump genere errores de tiempo de espera para algunas versiones de kexec-tools. Para obtener más información, consulte fence_kdump agota el tiempo de espera cuando no se especifica fence_kdump_nodes con kexec-tools versión 2.0.15 o posterior. La configuración de ejemplo para un clúster de dos nodos se muestra aquí. Después de realizar un cambio en el archivo /etc/kdump.conf, se debe regenerar la imagen de kdump. Para regenerarla, reinicie el servicio 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] Asegúrese de que el archivo de imagen initramfs contenga los archivos fence_kdump y 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. Pruebe la configuración bloqueando un nodo.

    Importante

    Si el clúster ya está en uso productivo, planee la prueba en consecuencia, ya que bloquear un nodo tendrá un impacto en la aplicación.

    echo c > /proc/sysrq-trigger
    

Pasos siguientes