Configuração do Pacemaker no Red Hat Enterprise Linux no Azure

Este artigo explica como configurar e configurar um cluster básico Pacemaker de dois nós no Red Hat Enterprise Linux (RHEL). As instruções cobrem RHEL 8.6+, RHEL 9.x, e RHEL 10.x.

Pré-requisitos

Descrição geral

Este guia assume que já implementou o grupo de recursos necessário, a rede virtual Azure, a sub-rede e as máquinas virtuais (VMs).

Clusters a correr em Linux requerem um agente de fencing para proteger nós insalubres. Para realizar esta tarefa no Azure, utilize um dos seguintes métodos:

  • Morte Baseada em Armazenamento (SBD) com Azure Shared Disk
  • Morte Baseada em Armazenamento (SBD) com alvos iSCSI
  • Agente de isolamento do Azure

Nota

Os seguintes prefixos são usados neste documento:

  • [A]: Aplicável a todos os nós.
  • [1]: Aplicável apenas ao nó 1.
  • [2]: Aplicável apenas ao nó 2.

Importante

No Azure, os clusters RHEL de alta disponibilidade com isolamento baseado em armazenamento (fence_sbd) utilizam um watchdog emulado via software. Consulte a seguinte documentação ao utilizar o SBD.

Utilizar SBD com o Azure Shared Disk

Ao usar Azure Shared Disks, pode montar o mesmo disco em todas as máquinas virtuais que fazem parte do cluster. Podes alojar o teu dispositivo SBD nesse disco partilhado sem requisitos adicionais de infraestrutura.

Diagrama de um Disco Partilhado do Azure como dispositivo SBD num cluster do Pacemaker.

Benefits

  • Fornece uma opção nativa de dispositivo de bloco partilhado Azure para SBD sem necessidade de recursos adicionais.
  • As máquinas virtuais anexam o disco gerido diretamente, reduzindo a dependência de considerações adicionais de rede.

Considerações importantes

  • Podes usar um disco partilhado do Azure com o Premium SSD SKU como dispositivo SBD.
  • Consulte a lista de sistemas operativos suportados.
  • Os dispositivos SBD que utilizam um disco partilhado premium Azure suportam armazenamento localmente redundante (LRS) e armazenamento redundante por zona (ZRS).
  • Dependendo do tipo da sua implementação, escolha o armazenamento redundante apropriado para um disco partilhado Azure como dispositivo SBD.
    • Um dispositivo SBD que utiliza LRS para o disco partilhado Premium do Azure (skuName - Premium_LRS) suporta apenas implementações num conjunto de disponibilidade.
    • Recomenda-se um dispositivo SBD que utilize ZRS para um disco partilhado premium Azure (skuName - Premium_ZRS) para implementações em zonas de disponibilidade.
  • O disco partilhado do Azure que usas para dispositivos SBD não precisa de ser grande. O valor maxShares determina quantos nós de cluster podem usar o disco compartilhado. Por exemplo, pode usar tamanhos de disco P1 ou P2 para o seu dispositivo SBD num cluster de dois nós, como SAP ASCS/ERS ou SAP HANA scale-up.
    • Para clusters com mais de dois nós, consulte o valor de maxShares documentado para o disco selecionado.
  • Não ligue um dispositivo SBD de disco partilhado do Azure entre diferentes clusters do Pacemaker.
  • Se usar vários dispositivos SBD com disco partilhado Azure, verifique o limite para o número máximo de discos de dados que podem ser ligados a uma VM.
  • Para mais informações sobre limitações para Azure discos partilhados, consulte cuidadosamente a secção "Limitações" da documentação de discos partilhados Azure.

Utilizar SBD com destinos iSCSI

Esta solução exige que aloje alvos de Internet Small Computer System Interface (iSCSI) em pelo menos uma máquina virtual adicional (VM).

Diagrama dos servidores iSCSI que alojam alvos iSCSI para dispositivos SBD num Cluster Pacemaker.

Benefits

  • Estes servidores host iSCSI podem também alojar alvos iSCSI para outros clusters Pacemaker na mesma região.
  • Se já os usas localmente, não exigem alterações na forma como operas o cluster do Pacemaker.

Considerações importantes

  • Deve usar três servidores host iSCSI para ter o mais alto nível de resiliência para o seu cluster.
    • Ter apenas um servidor introduz um ponto único de falha que impede o cluster de executar fencing se este ficar indisponível.
    • O Pacemaker não permite esgrima se só tiveres dois alvos e um estiver em baixo.
  • Os servidores anfitriões de destino iSCSI devem residir na mesma região dos seus clusters.
  • O encaminhamento do tráfego de rede entre os seus clusters e os servidores anfitriões iSCSI não deve passar por quaisquer dispositivos de rede não redundantes (como um dispositivo virtual de rede).
    • Eventos de manutenção e outros problemas com dispositivos de rede podem afetar negativamente a estabilidade e fiabilidade da configuração global do cluster.

Usando o Azure Fence Agent

Ao utilizar o Azure Fence Agent, o cluster pode isolar nós chamando diretamente as APIs do Azure para reiniciar nós com falha.

Diagrama do Azure Fence Agent num cluster do Pacemaker.

Benefits

  • Não são necessários recursos extra.
  • As Identidades Geridas removem qualquer manutenção de credenciais.

Considerações importantes

  • Use Identidades Geridas para autenticação. Se estiver a usar atualmente um principal de serviço, atualize o Azure Fence Agent do SPN para o MSI.
  • O fence agent do Azure necessita de conetividade de saída para os pontos finais públicos do Azure. Para obter mais informações e possíveis soluções, consulte Conectividade de ponto de extremidade público para VMs usando o ILB padrão.
  • As operações de monitoramento e vedação são desserializadas. Como resultado, se houver uma operação de monitoramento em execução mais longa e um evento de vedação simultâneo, não haverá atraso para o failover de cluster porque a operação de monitoramento já está em execução.

Implementar um disco partilhado do Azure para SBD

Para criar e anexar um disco partilhado no Azure usando o PowerShell, execute os seguintes comandos. Se quiser implementar recursos utilizando a CLI do Azure ou o portal do Azure, consulte Implementar um 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. Implemente três máquinas virtuais que corram numa versão suportada de RHEL OS. As VMs não precisam de ser grandes. Tamanhos de VM como Standard_E2s ou Standard_D2s são suficientes.

    Nota

    Não é necessário utilizar o RHEL for SAP com HA e Update Services, nem a imagem do sistema operativo RHEL for SAP Apps para o servidor de destino iSCSI. Podes usar uma imagem RHEL OS padrão em vez disso. No entanto, o ciclo de vida do suporte varia entre diferentes versões de produtos do sistema operacional.

  2. Instala as atualizações mais recentes e reinicia se for necessário.

    sudo dnf -y update
    
  3. Instale o pacote de destino iSCSI.

    sudo dnf install -y targetcli
    
  4. Ative e inicie o serviço iSCSI.

    sudo systemctl start target
    sudo systemctl enable target
    
  5. Abre a porta do firewall.

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

Criar alvos iSCSI

Para cada cluster, é necessário provisionar um disco iSCSI em cada servidor anfitrião iSCSI e depois conceder acesso a cada nó do cluster a esse disco. Neste exemplo, crias discos para dois clusters diferentes:

  • ascsnw1: Cluster ASCS/ERS de NW1
  • hdbnw1: O cluster de bases de dados HANA para NW1
  • sap-cl1 e sap-cl2: Nomes de host para os nós do cluster ASCS/ERS do NW1
  • sap-db1 e sap-db2: Nomes de host para os nós do cluster HANA do NW1
  1. Crie a pasta raiz para todos os dispositivos SBD.
    sudo mkdir /sbd
    
  2. Crie o dispositivo SBD para o primeiro 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. Crie o dispositivo SBD para o segundo 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. Salve a configuração.
    sudo targetcli saveconfig
    
  5. Verifica a configuração.
    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 o Azure Fence Agent

  1. Criar identidade

    Para criar uma identidade gerida (MSI), crie uma identidade gerida atribuída pelo sistema para cada VM no cluster. Identidades geridas atribuídas pelos utilizadores não são suportadas neste momento.

  2. Crie um papel personalizado.

    A sua identidade precisa de permissões atribuídas através do Azure RBAC para realizar ações de isolamento nas suas VMs. Para cumprir o Modelo de Segurança de Acesso Mínimo Privilegiado (LPA), crie um papel RBAC personalizado.

    Utilize a definição seguinte para a sua função, substituindo, quando necessário, o(s) ID(s) da subscrição:

    {
          "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. Atribui o papel personalizado às tuas identidades.

    Para cada VM no seu cluster, atribua a sua identidade gerida ao papel personalizado "Linux Fence Agent" para cada VM do cluster, incluindo ela própria. Para obter etapas detalhadas, consulte Atribuir um acesso de identidade gerenciado a um recurso usando o portal do Azure.

    Importante

    Esteja ciente de que a atribuição e remoção da autorização com identidades geridas pode ser adiada até entrar em vigor.

Criar e configurar o cluster

  1. [A] Atualize o sistema operativo e reinicie se necessário.

    sudo dnf -y update
    
  2. [A] Instalar pacotes de cluster necessários.

    sudo dnf install -y nmap-ncat pcs pacemaker resource-agents resource-agents-cloud
    
  3. [A] Instalar os pacotes de vedação necessários.

    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 o DNS.

    Pode usar um servidor DNS ou modificar /etc/hosts em cada um dos nós. Este exemplo mostra como usar o /etc/hosts arquivo.

    Atualize as entradas para corresponderem aos seus IPs e nomes 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] Atualize a hacluster palavra-passe para ser a mesma em todos os nós.

    sudo passwd hacluster
    
  6. [A] Atualiza o firewall.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --reload
    
  7. [A] Ativar os serviços do Pacemaker.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Cria o 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 um atraso de arranque para o Pacemaker.

    Iniciar o Pacemaker imediatamente após o arranque pode potencialmente permitir que um nó volte a juntar-se ao cluster antes da conclusão do failover, prevenindo o failover ou atrasando a recuperação. Para resolver este problema, use um serviço de temporizador para atrasar o arranque do pacemaker ao reiniciar.

    1. [A] Configurar o serviço do 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] Ativar serviço de temporizador.
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] Desativar os serviços do Pacemaker.
      sudo pcs cluster disable --all
      
  10. Valida o cluster.

    1. [1] Validar o cluster do marcapasso.
      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 serviços.
      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 a vedação

  1. [A] Ativar o serviço SBD.
    sudo systemctl enable sbd
    
  2. [A] Ativar o sistema de vigilância de software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] Descubra o ID do dispositivo iSCSI.
    1. Determinar o ponto de montagem com base no 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. Obter o ID do dispositivo iSCSI a partir do ponto de montagem.
      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] Crie o dispositivo SBD.
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] Adicionar o dispositivo SBD ao cluster.
    sudo pcs stonith create sbd fence_sbd devices=/dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 op monitor interval=600 timeout=15
    
  2. [1] Alterar as definições de configuração do SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Validar ficheiro de configuração SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] Permitir os serviços necessários.
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] Ativar o sistema de vigilância de software.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] Atualize o InitiatorName para o nó 1.
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] Atualize o InitiatorName para o nó 2.
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] Reiniciar os serviços iSCSI.
    sudo systemctl restart iscsi iscsid
    
  6. [A] Monte os destinos iSCSI de todos os servidores anfitriões de 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] Descobre os IDs dos dispositivos iSCSI.
    1. Determina os pontos de montagem do 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. Obtenha os IDs dos 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] Criar os 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] Adicionar os dispositivos SBD ao 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] Alterar as definições de configuração do SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Validar ficheiro de configuração SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] Configure o agente de delimitação do Azure.

    Nota

    Ao usar o Azure Government Cloud, deve especificar essa cloud= opção ao configurar o Azure Fence Agent. Por exemplo, cloud=usgov para a Azure cloud do governo dos EUA.

    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] Configurar o cluster para o Azure Fence Agent.

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

Construir um cluster Pacemaker com mais de dois nós

Se está a construir um cluster maior, tenha estas considerações em mente:

  1. [1] Ajustar a configuração do cluster.

    Os Votequorum - Expected votes valores e Votequorum - Flags - 2Node atualizam-se automaticamente quando adicionas um terceiro ou mais nós. Valida que a 2Node flag está ausente e Votequorum - Expected votes é igual ao número de nós no teu 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. Ajusta a configuração da vedação.

    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
    

Configure o Pacemaker para eventos agendados no Azure

Eventos Programados é um Serviço de Metadados do Azure que dá tempo à sua aplicação para se preparar para a manutenção da VM. Fornece informações sobre eventos de manutenção futuros, como um reinício, para que a sua aplicação possa preparar-se para eles e limitar as interrupções.

O agente de recursos azure-events-az monitoriza este serviço de metadados. Quando o agente deteta eventos e determina que outro nó do cluster está disponível, define o atributo de estado de funcionamento ao nível do nó #health-azure para -1000000. Este valor faz com que o cluster considere o nó doente e migra recursos para longe do nó afetado. A restrição de localização garante que os recursos que começam por health- são excluídos, pois o agente azure-events-az ainda precisa de correr em ambos os nós. Quando o nó do cluster afetado já não tiver recursos do cluster em execução, o agente notifica o serviço de metadados e o evento programado pode continuar. Quando todos os eventos estiverem concluídos, o agente de recursos define o atributo #health-azure novamente como 0, assinalando o nó como saudável outra vez.

Importante

Anteriormente, este documento descrevia o uso do agente de recursos azure-events. O novo agente de recursos azure-events-az suporta totalmente ambientes do Azure implantados em diferentes zonas de disponibilidade. Utilize o agente azure-events-az mais recente para todos os sistemas SAP de alta disponibilidade com Pacemaker.

  1. Instala e atualiza o resource-agents pacote.

    sudo dnf install -y resource-agents
    
  2. [1] Coloque o cluster em modo de manutenção.

    sudo pcs property set maintenance-mode=true
    
  3. [1] Defina a estratégia e restrição do nó de saúde do cluster Pacemaker.

    Importante

    Não defina nenhum outro recurso no cluster começando com health- além dos recursos descritos nas próximas etapas.

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
       rule score-attribute='#health-azure' \
       "defined #uname"
    
  4. [1] Defina o valor inicial dos atributos do cluster.

    Executa um comando para cada nó do cluster. Para ambientes de escalabilidade, inclua a 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] Configure os recursos no Pacemaker. Os recursos devem começar por 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. Tire o cluster do Pacemaker do modo de manutenção e elimine quaisquer erros

    sudo pcs property set maintenance-mode=false
    sudo pcs resource cleanup
    
  7. Verifique se health-azure-events é iniciado com êxito em todos os nós.

    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
    

    A execução da primeira consulta para eventos agendados pode levar até dois minutos. O teste de Pacemaker com eventos agendados pode usar ações de reinicialização ou reimplantação para as VMs do cluster. Para obter mais informações, consulte Eventos agendados.

Configuração opcional de vedação

Sugestão

Esta seção só é aplicável se você quiser configurar o dispositivo fence_kdumpde vedação especial.

Se precisar coletar informações de diagnóstico na VM, pode ser útil configurar outro dispositivo de isolação com base no agente de cerca fence_kdump. O fence_kdump agente pode detetar que um nó entrou na recuperação após falha com kdump e pode permitir que o serviço de recuperação de falhas do sistema seja concluído antes que outros métodos de isolamento sejam invocados. Note que o fence_kdump não substitui mecanismos tradicionais de vedação, como o SBD ou o agente Azure de vedação, quando está a usar Azure VMs.

Importante

Lembre-se de que, quando fence_kdump está configurado como um dispositivo de cercamento de primeiro nível, ele introduz atrasos nas operações de cercamento e, consequentemente, atrasos na comutação de recursos da aplicação.

Se um crash dump for detetado com sucesso, a proteção será adiada até que o serviço de recuperação após falha seja concluído. Se o nó com falha estiver inacessível ou não responder, a vedação será atrasada pelo tempo determinado, pelo número configurado de iterações e pelo fence_kdump tempo limite.

O tempo limite proposto fence_kdump poderá ter de ser adaptado ao ambiente específico.

Recomendamos que configure o fencing fence_kdump apenas quando necessário para recolher diagnósticos dentro da VM e sempre em combinação com métodos tradicionais de fencing, como SBD ou o agente de fence do Azure.

Os seguintes artigos da Base de Dados de Conhecimento Red Hat contêm informações importantes sobre como configurar fence_kdump a esgrima:

Siga os seguintes passos opcionais para adicionar fence_kdump como configuração de cerca de primeiro nível, além da configuração do agente de vedação Azure.

  1. [A] Verifique se kdump está ativo e configurado.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Instale o agente de fence.

    sudo dnf install -y fence-agents-kdump
    
  3. [1] Crie um fence_kdump dispositivo de vedação no cluster.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2" timeout=30
    
  4. [1] Configure os níveis de vedação para que o mecanismo de fence_kdump vedação seja acionado primeiro.

    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 as portas necessárias para fence_kdump através do firewall.

    firewall-cmd --add-port=7410/udp --permanent
    firewall-cmd --reload
    
  6. [A] Execute a configuração fence_kdump_nodes em /etc/kdump.conf para evitar que fence_kdump falhe com um tempo limite para algumas versões de kexec-tools. Para mais informações, consulte fence_kdump expira quando fence_kdump_nodes não é especificado com a versão 2.0.15 ou posterior do kexec-tools. O exemplo de configuração para um cluster de dois nós é apresentado aqui. Depois de fazer uma alteração no /etc/kdump.conf, a imagem kdump deve ser regenerada. Para regenerar, reinicie o kdump serviço.

    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] Certifique-se de que o initramfs ficheiro de imagem contém os fence_kdump ficheiros 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. Teste a configuração travando um nó.

    Importante

    Se o cluster já estiver em uso produtivo, planeie o teste em conformidade, uma vez que a falha de um nó tem um impacto na aplicação.

    echo c > /proc/sysrq-trigger
    

Próximos passos