Konfigurowanie programu Pacemaker w systemie Red Hat Enterprise Linux w Azure

Ten artykuł wyjaśnia, jak skonfigurować i uruchomić podstawowy dwuwęzłowy klaster Pacemaker w systemie Red Hat Enterprise Linux (RHEL). Instrukcje obejmują RHEL 8.6+, RHEL 9.x, oraz RHEL 10.x.

Wymagania wstępne

Omówienie

Ten przewodnik zakłada, że już wdrożyłeś wymaganą grupę zasobów, sieć wirtualną Azure, podsieć oraz maszyny wirtualne (VM).

Klastry działające w systemie Linux wymagają agenta odgradzania do odgradzania niesprawnych węzłów. Aby wykonać to zadanie na Azure, użyj jednej z następujących metod:

  • Storage Based Death (SBD) w usłudze Azure Shared Disk
  • Storage Based Death (SBD) z targetami iSCSI
  • Azure Fencing Agent

Uwaga

W tym dokumencie użyto następujących przedrostków:

  • [A]: Dotyczy wszystkich węzłów.
  • [1]: Dotyczy tylko węzła 1.
  • [2]: Dotyczy tylko węzła 2.

Ważne

Na platformie Azure klastry wysokiej dostępności RHEL z mechanizmem fencing opartym na magazynie danych (fence_sbd) korzystają z programowo emulowanego mechanizmu watchdog. Zapoznaj się z poniższą dokumentacją podczas korzystania z SBD.

Korzystanie z SBD z dyskiem współdzielonym Azure

Korzystając z Azure Shared Disks, możesz zamontować ten sam dysk na wszystkich maszynach wirtualnych należących do klastra. Możesz hostować swoje urządzenie SBD na tym współdzielonym dysku bez dodatkowych wymagań infrastrukturalnych.

Schemat dysku współdzielonego Azure jako urządzenia SBD w klastrze Pacemaker.

Benefits

  • Zapewnia natywną opcję współdzielonego urządzenia blokowego Azure dla SBD bez konieczności korzystania z dodatkowych zasobów.
  • Maszyny wirtualne bezpośrednio podłączają zarządzany dysk, zmniejszając zależność od dodatkowych aspektów sieciowych.

Istotne zagadnienia

  • Możesz używać dysku współdzielonego platformy Azure o jednostce SKU Premium SSD jako urządzenia SBD.
  • Przeglądaj listę obsługiwanych systemów operacyjnych.
  • Urządzenia SBD korzystające z Azure premium shared disk obsługują lokalnie redundantną pamięć masową (LRS) oraz magazynowanie strefowe redundantne (ZRS).
  • W zależności od typu wdrożenia wybierz odpowiedni magazyn redundantny na potrzeby dysku udostępnianego w Azure jako urządzenia SBD.
    • Urządzenie SBD, które używa mechanizmu LRS dla dysku współdzielonego Azure Premium (skuName - Premium_LRS), obsługuje tylko wdrożenia w ramach zestawu dostępności.
    • W przypadku wdrożeń w strefach dostępności zaleca się urządzenie SBD korzystające z ZRS dla współdzielonego dysku Azure Premium (skuName - Premium_ZRS).
  • Dysk udostępniony Azure używany na potrzeby urządzeń SBD nie musi być duży. Wartość maxShares określa, ile węzłów klastra może używać dysku udostępnionego. Na przykład możesz użyć rozmiarów dysków P1 lub P2 dla swojego urządzenia SBD na klastrze dwuwęzłowym, takim jak SAP ASCS/ERS lub skalowanie SAP HANA.
    • W przypadku klastrów liczących więcej niż dwa węzły zobacz opisaną w dokumentacji wartość parametru maxShares dla wybranego dysku.
  • Nie podłączaj urządzenia SBD z Azure na różnych klastrach Pacemaker.
  • Jeśli używasz wielu urządzeń SBD z dyskami udostępnionymi Azure, sprawdź limit maksymalnej liczby dysków danych, które mogą być dołączone do maszyny wirtualnej.
  • Aby uzyskać więcej informacji na temat ograniczeń dotyczących dysków udostępnionych Azure, uważnie zapoznaj się z sekcją "Ograniczenia" Azure dokumentacją dysku udostępnionego.

Wykorzystanie SBD z zasobami docelowymi iSCSI

To rozwiązanie wymaga hostowania celów Internet Small Computer System Interface (iSCSI) na co najmniej jednej dodatkowej maszynie wirtualnej (VM).

Schemat serwerów iSCSI udostępniających targety iSCSI dla urządzeń SBD w klastrze Pacemaker.

Benefits

  • Te serwery hostów iSCSI mogą również udostępniać obiekty docelowe iSCSI innym klastrom Pacemaker w tym samym regionie.
  • Jeśli już korzystasz z nich lokalnie, nie wymagają żadnych zmian w sposobie obsługi klastra Pacemaker.

Istotne zagadnienia

  • Aby zapewnić najwyższy poziom odporności klastra, musisz użyć trzech serwerów iSCSI.
    • Korzystanie tylko z jednego serwera powoduje pojedynczy punkt awarii, który uniemożliwia ogrodzenie klastra, jeśli jest niedostępny.
    • Pacemaker nie pozwala na fencing, jeśli masz tylko dwa węzły docelowe, a jeden z nich jest niedostępny.
  • Docelowe serwery iSCSI muszą znajdować się w tym samym regionie co Twoje klastry.
  • Trasowanie sieci między klastrami a serwerami iSCSI nie może przechodzić przez żadne urządzenia sieciowe nieredundantne (takie jak Wirtualne Urządzenie Sieciowe).
    • Zdarzenia konserwacyjne i inne problemy z urządzeniami sieciowymi mogą negatywnie wpływać na stabilność i niezawodność całej konfiguracji klastra.

Korzystanie z agenta Fence platformy Azure

Korzystając z agenta Azure Fence, klaster może ogrodzić węzły, wywołując bezpośrednio API Azure, aby ponownie uruchomić uszkodzone węzły.

Diagram agenta Azure Fence w klastrze Pacemaker.

Benefits

  • Nie potrzeba dodatkowych zasobów.
  • Tożsamości zarządzane eliminują potrzebę zarządzania poświadczeniami.

Istotne zagadnienia

Wdróż dysk współdzielony platformy Azure dla SBD

Aby utworzyć i dołączyć współdzielony dysk Azure za pomocą PowerShell, wykonaj następujące polecenia. Jeśli chcesz wdrażać zasoby za pomocą Azure CLI lub portalu Azure, zobacz Deploy a ZRS disk.

$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
}

Użyj obiektów docelowych iSCSI

Skonfiguruj serwery docelowe iSCSI

  1. Wdroż trzy maszyny wirtualne działające na obsługiwanej wersji systemu operacyjnego RHEL. Maszyny wirtualne nie muszą być duże. Rozmiary maszyn wirtualnych, takie jak Standard_E2s czy Standard_D2s, są wystarczające.

    Uwaga

    Nie musisz używać ani RHEL for SAP with HA and Update Services, ani obrazu systemu RHEL for SAP Apps OS dla serwera docelowego iSCSI. Możesz użyć standardowego obrazu systemu operacyjnego RHEL. Jednak cykl życia wsparcia różni się między różnymi wersjami produktów systemu operacyjnego.

  2. Zainstaluj najnowsze aktualizacje i zrestartuj komputer, jeśli trzeba.

    sudo dnf -y update
    
  3. Zainstaluj pakiet docelowy iSCSI.

    sudo dnf install -y targetcli
    
  4. Włącz i uruchom usługę iSCSI.

    sudo systemctl start target
    sudo systemctl enable target
    
  5. Otwórz port w zaporze.

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

Tworzenie celów iSCSI

Dla każdego klastra musisz przydzielić dysk iSCSI na każdym serwerze iSCSI, a następnie przyzwolić każdemu węzłowi klastra dostęp do tego dysku. W tym przykładzie tworzysz dyski dla dwóch różnych klastrów:

  • ascsnw1: Klaster ASCS/ERS dla NW1
  • hdbnw1: Klaster baz danych HANA dla NW1
  • sap-cl1 i sap-cl2: Nazwy hostów dla węzłów klastrowych NW1 ASCS/ERS
  • sap-db1 i sap-db2: Nazwy hostów dla węzłów klastrowych NW1 HANA
  1. Utwórz folder główny dla wszystkich urządzeń SBD.
    sudo mkdir /sbd
    
  2. Utwórz urządzenie SBD dla pierwszego klastra (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. Utwórz urządzenie SBD dla drugiego klastra (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. Zapisz konfigurację.
    sudo targetcli saveconfig
    
  5. Sprawdź konfigurację.
    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]
    

Skonfiguruj agenta ogrodzenia platformy Azure

  1. Tworzenie tożsamości

    Aby utworzyć zarządzaną tożsamość (MSI), należy utworzyć systemowo przypisaną zarządzaną tożsamość dla każdej maszyny wirtualnej w klastrze. Obecnie nie są obsługiwane tożsamości zarządzane przypisane przez użytkownika.

  2. Stwórz niestandardową rolę.

    Aby wykonywać operacje izolowania względem Twoich maszyn wirtualnych, Twoja tożsamość musi mieć uprawnienia przyznane za pomocą mechanizmu Azure RBAC. Aby spełnić wymagania Modelu Bezpieczeństwa Najmniej Uprzywilejowanego Dostępu (LPA), stwórz niestandardową rolę RBAC.

    Użyj poniższej definicji swojej roli, zastępując identyfikator(y) subskrypcji tam, gdzie jest to potrzebne:

    {
          "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. Przypisz własną rolę do swoich tożsamości.

    Dla każdej maszyny wirtualnej w klastrze przypisz jej tożsamość zarządzaną do niestandardowej roli „Linux Fence Agent” dla każdej maszyny wirtualnej w klastrze, w tym dla niej samej. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie dostępu tożsamości zarządzanej do zasobu przy użyciu witryny Azure Portal.

    Ważne

    Pamiętaj, że przydzielenie i usunięcie autoryzacji z tożsamościami zarządzanymi może zostać opóźnione do momentu wejścia w życie.

Utwórz i skonfiguruj klaster

  1. [A] Zaktualizuj system operacyjny i zrestartuj, jeśli zajdzie taka potrzeba.

    sudo dnf -y update
    
  2. [A] Instalacja wymaganych pakietów klastrowych.

    sudo dnf install -y nmap-ncat pcs pacemaker resource-agents resource-agents-cloud
    
  3. [A] Instalacja wymaganych pakietów ogrodzeń.

    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] Skonfiguruj DNS.

    Można użyć serwera DNS lub zmodyfikować /etc/hosts na wszystkich węzłach. Ten przykład pokazuje, jak używać pliku /etc/hosts.

    Zaktualizuj wpisy, aby pasowały do Twoich adresów IP i nazw hostów.

    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] Zaktualizuj hasło, hacluster aby było takie samo na wszystkich węzłach.

    sudo passwd hacluster
    
  6. [A] Zaktualizuj zaporę.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --reload
    
  7. [A] Włącz usługi Pacemaker.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Stwórz klaster.

    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. Skonfiguruj opóźnienie uruchamiania rozrusznika serca.

    Uruchomienie Pacemakera natychmiast po rozruchu systemu może spowodować, że węzeł ponownie dołączy do klastra, zanim zakończy się przełączenie awaryjne, uniemożliwiając to przełączenie lub opóźniając odzyskiwanie sprawności. Aby rozwiązać ten problem, użyj usługi timera, która opóźni uruchomienie rozrusznika po restarcie.

    1. [A] Konfiguruj usługę timera.
      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] Włącz usługę timera.
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] Wyłącz usługi rozruszników serca.
      sudo pcs cluster disable --all
      
  10. Zweryfikowaj klaster.

    1. [1] Zweryfikuj klaster 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] Walidacja usług.
      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
      

Konfiguruj ogrodzenie

  1. [A] Włącz usługę SBD.
    sudo systemctl enable sbd
    
  2. [A] Włącz system nadzorujący oprogramowanie.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] Odkryj identyfikator urządzenia iSCSI.
    1. Określ punkt montażu na podstawie numeru LUN
      ls -l /dev/disk/azure/scsi1/lun1
      lrwxrwxrwx. 1 root root 12 Apr 16 20:22 /dev/disk/azure/scsi1/lun1 -> ../../../sdb
      
    2. Pobierz identyfikator urządzenia iSCSI z mount.
      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] Tworzenie urządzenia SBD.
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] Dodaj urządzenie SBD do klastra.
    sudo pcs stonith create sbd fence_sbd devices=/dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 op monitor interval=600 timeout=15
    
  2. [1] Zmień ustawienia konfiguracji SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Zweryfikowaj plik konfiguracyjny SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] Włącz wymagane usługi.
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] Włącz system nadzorujący oprogramowanie.
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] Zaktualizuj InitiatorName dla węzła 1.
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] Zaktualizuj InitiatorName dla węzła 2.
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] Zrestartuj usługi iSCSI.
    sudo systemctl restart iscsi iscsid
    
  6. [A] Zamontuj cele iSCSI ze wszystkich serwerów hostów 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] Odkryj identyfikatory urządzeń iSCSI.
    1. Określ punkty montażowe 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. Zdobądź identyfikatory urządzeń 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] Stwórz urządzenia 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] Dodaj urządzenia SBD do klastra.
    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] Zmień ustawienia konfiguracji SBD.
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] Zweryfikowaj plik konfiguracyjny SBD.
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] Configure Azure Fence Agent.

    Uwaga

    Podczas korzystania z chmury Azure Government należy określić opcję cloud= podczas konfigurowania agenta Azure Fence Agent. Na przykład cloud=usgov dla chmury Azure dla instytucji rządowych USA.

    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] Skonfiguruj klaster dla agenta ogrodzenia platformy Azure.

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

Tworzenie klastra Pacemaker składającego się z więcej niż dwóch węzłów

Jeśli budujesz większy klaster, miej na uwadze następujące kwestie:

  1. [1] Dostosuj konfigurację gromady.

    Wartości Votequorum - Flags - 2Node i Votequorum - Expected votes są automatycznie aktualizowane, gdy dodasz trzeci węzeł lub kolejne. Sprawdź, czy flaga 2Node jest nieobecna i jest równa Votequorum - Expected votes liczbie węzłów w klastrze.

    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. Dostosuj konfigurację ogrodzenia.

    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
    

Konfigurowanie programu Pacemaker pod kątem zaplanowanych zdarzeń Azure

Scheduled Events to usługa metadanych Azure, która daje Twojej aplikacji czas na przygotowanie się do konserwacji maszyny wirtualnej. Dostarcza informacji o nadchodzących wydarzeniach konserwacyjnych, takich jak restart, aby aplikacja mogła się na nie przygotować i ograniczyć zakłócenia.

Agent zasobów azure-events-az monitoruje tę usługę metadanych. Gdy agent wykryje zdarzenia i ustali, że dostępny jest inny węzeł klastra, ustawia atrybut kondycji na poziomie węzła #health-azure na -1000000. Ta wartość powoduje, że klaster uznaje węzeł za niezdrowy i migruje zasoby z dala od dotkniętego węzła. Ograniczenie lokalizacji zapewnia, że zasoby zaczynające się od health- są wykluczone, ponieważ agent azure-events-az nadal musi działać na obu węzłach. Gdy dotknięty węzeł klastra jest wolny od aktywnych zasobów klastra, agent powiadamia usługę metadanych i zaplanowane zdarzenie może być kontynuowane. Po zakończeniu wszystkich zdarzeń agent zasobów przywraca #health-azure atrybut do 0, oznaczając węzeł ponownie jako zdrowy.

Ważne

Wcześniej w tym dokumencie opisano użycie agenta zasobów azure-events. Nowy agent azure-events-az w pełni obsługuje środowiska Azure wdrożone w różnych strefach dostępności. Użyj nowszego agenta azure-events-az dla wszystkich wysoko dostępnych systemów SAP z Pacemakerem.

  1. Zainstaluj i zaktualizuj resource-agents pakiet.

    sudo dnf install -y resource-agents
    
  2. [1] Umieść klaster w trybie konserwacji.

    sudo pcs property set maintenance-mode=true
    
  3. [1] Ustaw strategię i ograniczenie węzła zdrowia klastra Pacemaker.

    Ważne

    Nie należy definiować żadnych innych zasobów w klastrze, które zaczynają się od health-, chyba że są one opisane w następnych krokach.

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
       rule score-attribute='#health-azure' \
       "defined #uname"
    
  4. [1] Ustaw początkową wartość atrybutów klastra.

    Uruchom polecenie dla każdego węzła klastra. W środowiskach skalowanych horyzontalnie dołącz maszynę wirtualną 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] Konfigurowanie zasobów w narzędziu Pacemaker. Zasoby muszą zaczynać się od 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. Wyjmij klaster rozruszników z trybu konserwacji i usuń wszelkie błędy

    sudo pcs property set maintenance-mode=false
    sudo pcs resource cleanup
    
  7. Sprawdź, czy health-azure-events uruchamia się pomyślnie na wszystkich węzłach.

    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
    

    Wykonywanie zapytania po raz pierwszy dla zaplanowanych zdarzeń może potrwać do dwóch minut. Testy Pacemaker z zaplanowanymi zdarzeniami mogą używać akcji ponownego uruchomienia i wdrożenia dla maszyn wirtualnych w klastrze. Aby uzyskać więcej informacji, zobacz Zaplanowane zdarzenia.

Opcjonalna konfiguracja ogrodzenia

Wskazówka

Ta sekcja ma zastosowanie tylko wtedy, gdy chcesz skonfigurować specjalne urządzenie fence_kdumpogrodzeniowe .

Jeśli musisz zebrać informacje diagnostyczne w ramach maszyny wirtualnej, może być przydatne skonfigurowanie innego urządzenia do odgradzania na podstawie agenta ogrodzenia fence_kdump. fence_kdump Agent może wykryć, że węzeł wszedł w tryb odzyskiwania po awarii kdump i może pozwolić na ukończenie usługi odzyskiwania awaryjnego przed wywołaniem innych metod izolacji. Należy pamiętać, że fence_kdump nie zastępuje tradycyjnych mechanizmów ogrodzenia, takich jak SBD lub agent fencing dla Azure, gdy używasz maszyn wirtualnych Azure.

Ważne

Należy pamiętać, że jeśli fence_kdump jest skonfigurowane jako urządzenie odgradzające pierwszego poziomu, powoduje to opóźnienia w operacjach odgradzania, a co za tym idzie, opóźnienia w przełączaniu awaryjnym zasobów aplikacji.

Jeśli zrzut awaryjny zostanie pomyślnie wykryty, izolacja zostanie opóźniona aż do zakończenia usługi odzyskiwania po awarii. Jeśli węzeł, który zakończył się niepowodzeniem, jest nieosiągalny lub nie odpowiada, izolacja jest opóźniona o określony z góry czas, skonfigurowaną liczbę iteracji i fence_kdump limit czasu.

Może być konieczne dostosowanie proponowanego fence_kdump limitu czasu do określonego środowiska.

Zalecamy skonfigurowanie fence_kdump fencing tylko wtedy, gdy jest to konieczne do zbierania diagnostyki na maszynie wirtualnej i zawsze w połączeniu z tradycyjnymi metodami fencing, takimi jak SBD lub Azure fence agent.

Następujące artykuły z bazy wiedzy red hat zawierają ważne informacje dotyczące konfigurowania fence_kdump ogrodzenia:

Uruchom następujące opcjonalne kroki, aby dodać fence_kdump jako konfigurację ogrodzenia pierwszego poziomu, oprócz konfiguracji agenta ogrodzenia Azure.

  1. [A] Sprawdź, czy kdump jest aktywny i skonfigurowany.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Zainstaluj agenta ogrodzenia fence_kdump .

    sudo dnf install -y fence-agents-kdump
    
  3. [1] Utwórz fence_kdump urządzenie ogrodzeniowe w klastrze.

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2" timeout=30
    
  4. [1] Skonfiguruj poziomy ogrodzenia, fence_kdump aby mechanizm ogrodzenia został uruchomiony jako pierwszy.

    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] Zezwalaj na wymagane porty w zaporze fence_kdump.

    firewall-cmd --add-port=7410/udp --permanent
    firewall-cmd --reload
    
  6. [A] Wykonaj konfigurację w fence_kdump_nodes, aby uniknąć sytuacji, w której /etc/kdump.conf kończy się niepowodzeniem z powodu upływu limitu czasu w niektórych wersjach fence_kdump. Więcej informacji znajdziesz w fence_kdump przestaje odpowiadać, gdy nie określono fence_kdump_nodes w narzędziu kexec-tools w wersji 2.0.15 lub nowszej. W tym miejscu przedstawiono przykładową konfigurację klastra z dwoma węzłami. Po dokonaniu zmiany w /etc/kdump.conf trzeba ponownie wygenerować obraz kdump. Uruchom ponownie usługę kdump, aby odtworzyć ją na nowo.

    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] Upewnij się, że initramfs plik obrazu zawiera pliki fence_kdump i 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. Przetestuj konfigurację, rozbijając węzeł.

    Ważne

    Jeśli klaster jest już wydajnie używany, należy odpowiednio zaplanować test, ponieważ awaria węzła ma wpływ na aplikację.

    echo c > /proc/sysrq-trigger
    

Następne kroki