Konfigurowanie programu Pacemaker na serwerze SUSE Linux Enterprise Server w ramach platformy Azure

Ten artykuł wyjaśnia, jak skonfigurować podstawowy dwuwęzłowy klaster Pacemaker w systemie SUSE Linux Enterprise Server (SLES) na platformie Azure. Instrukcje te obejmują SLES for SAP 12 SP5, SLES for SAP 15 SP 4+, oraz SLES for SAP 16.

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 fencing do izolowania niesprawnych węzłów. Aby wykonać to zadanie na Azure, użyj jednej z następujących metod:

  • SBD (Storage Based Death) z dyskiem współdzielonym platformy Azure
  • Storage Based Death (SBD) z celami 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.

Używanie SBD z Azure Shared Disk

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ć współużytkowanego dysku 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 nadmiarowy dla dysku udostępnionego platformy Azure jako urządzenie SBD.
    • Urządzenie SBD, które używa usługi LRS dla współdzielonego dysku 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 zalecane jest urządzenie SBD, które wykorzystuje ZRS we współdzielonym dysku Azure Premium (skuName - Premium_ZRS).
  • Dysk udostępniony platformy 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 składających się z więcej niż dwóch węzłów zapoznaj się z udokumentowaną wartością 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 dysku udostępnionego platformy Azure, sprawdź limit maksymalnej liczby dysków danych, które można dołączyć do maszyny wirtualnej.
  • Aby uzyskać więcej informacji na temat ograniczeń dotyczących dysków udostępnionych platformy Azure, dokładnie zapoznaj się z sekcją "Ograniczenia" w dokumentacji dysku udostępnionego platformy Azure.

Korzystanie z SBD z obiektami 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 iSCSI mogą również hostować cele iSCSI dla innych klastrów Pacemakerów 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 wprowadza pojedynczy punkt awarii, co uniemożliwia zastosowanie mechanizmu fencing w klastrze, jeśli ten serwer stanie się niedostępny.
    • Pacemaker nie pozwala na fencing, jeśli masz tylko dwa węzły, 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 ogrodzenia 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ą konieczność zarządzania poświadczeniami.

Istotne zagadnienia

Wdróż dysk współdzielony platformy Azure dla mechanizmu 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 hosta docelowego iSCSI

  1. Wdroż trzy maszyny wirtualne działające na obsługiwanej wersji systemu operacyjnego SLES. 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ć obrazu systemu operacyjnego SLES for SAP Applications dla serwera docelowego iSCSI. Możesz użyć standardowego obrazu systemu operacyjnego SLES. 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 zypper -n update
    
  3. Zainstaluj pakiet docelowy iSCSI.

    sudo zypper -n install targetcli-fb
    
  4. Włącz i uruchom usługę iSCSI.

    sudo systemctl start targetcli
    sudo systemctl enable targetcli
    

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 Fence dla 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ę.

    Twoja tożsamość potrzebuje uprawnień w usłudze Azure RBAC, aby wykonywać operacje odgradzania względem Twoich maszyn wirtualnych. 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 zarządzaną tożsamość 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 zypper -n update
    
  2. [A] Instalacja wymaganych pakietów klastrowych.

    sudo zypper -n install socat pacemaker resource-agents 
    
  3. [A] Instalacja wymaganych pakietów ogrodzeń.

    sudo zypper -n install sbd
    
    sudo zypper -n install sbd open-iscsi
    
    sudo zypper -n install 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] Wymień klucze SSH użytkownika root między węzłami.

    sudo ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
    sudo cat /root/.ssh/id_ed25519.pub
    sudo vi /root/.ssh/authorized_keys
    [...]
    <Contents from cat command on other server>
    
  6. [A] Skonfiguruj system operacyjny.

    1. Dostosuj brudną pamięć podręczną dla klientów NFS na systemach o wysokiej pamięci. Zobacz ten artykuł, aby uzyskać więcej informacji.
      sudoedit /etc/sysctl.d/30-nfs.conf && sudo sysctl --system
      
      vm.dirty_bytes = 629145600
      vm.dirty_background_bytes = 314572800
      
    2. Upewnij się, że vm.swappiness jest ustawione na 10, aby zmniejszyć zużycie swapu i faworyzować pamięć.
      sudoedit /etc/sysctl.d/31-memswap.conf && sudo sysctl --system
      
      vm.swappiness = 10
      
    3. Tylko SLES 12 SP 5: Pacemaker sporadycznie tworzy wiele procesów, co może spowodować wyczerpanie dozwolonego limitu. W takim przypadku puls między węzłami klastra może zakończyć się niepowodzeniem i prowadzić do przejścia w tryb failover zasobów. Zwiększ maksymalną liczbę dozwolonych procesów, ustawiając następujący parametr:
      # Edit the configuration file
      sudo vi /etc/systemd/system.conf
      [...]
      DefaultTasksMax=4096
      [...]
      
      # Activate this setting
      sudo systemctl daemon-reload
      
      # Test to ensure that the change was successful
      sudo systemctl --no-pager show | grep DefaultTasksMax
      
  7. [1] Stwórz klaster.

    sudo crm cluster init --yes --name ascsnw1 --node sap-cl1 --node sap-cl2
    
  8. [1] Konfiguruj ustawienia klastra.

    sudo crm corosync set totem.token 30000
    sudo csync2 -xv
    sudo crm cluster run "corosync-cfgtool -R"
    
  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=216
      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 crm cluster disable --all
      
  10. Zweryfikowaj klaster.

    1. [1] Zweryfikuj klaster Pacemaker.
      sudo crm status
      
      Cluster Summary:
        * Stack: corosync (Pacemaker is running)
        * Current DC: sap-cl1 (version 2.1.7+20231219.0f7f88312-150600.6.15.1-2.1.7+20231219.0f7f88312) - partition with quorum
        * Last updated: Tue Aug  4 17:50:24 2026 on sap-cl1
        * Last change:  Thu Jul 30 19:02:56 2026 by hacluster via hacluster on sap-cl1
        * 2 nodes configured
        * 0 resource instances configured
      
      Node List:
        * Online: [ sap-cl1 sap-cl2 ]
      
      Full List of Resources:
      
    2. [A] Walidacja usług.
      systemctl list-unit-files pacemaker.timer pacemaker.service corosync.service
      
      UNIT FILE         STATE    PRESET
      corosync.service  disabled disabled
      pacemaker.service disabled disabled
      pacemaker.timer   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 crm cluster init --yes sbd -s /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617
    
  2. [1] Zmień ustawienia konfiguracji SBD.
    sudo crm configure property stonith-timeout=210
    sudo crm configure property stonith-enabled=true
    # For the below command, 600 is the interval, and 120 is the timeout
    sudo crm configure monitor stonith-sbd 600:120
    sudo crm configure set stonith-sbd.pcmk_delay_max 15
    
  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 crm cluster init --yes sbd \
       -s /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 \
       -s /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff \
       -s /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5
    
  2. [1] Zmień ustawienia konfiguracji SBD.
    sudo crm configure property stonith-timeout=210
    sudo crm configure property stonith-enabled=true
    # For the below command, 600 is the interval, and 120 is the timeout
    sudo crm configure monitor stonith-sbd 600:120
    sudo crm configure set stonith-sbd.pcmk_delay_max 15
    
  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 crm configure primitive rsc_st_azure stonith:fence_azure_arm params 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 crm configure property stonith-enabled=true
    sudo crm configure property 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 quorum.expected_votes i quorum.two_node są automatycznie aktualizowane, gdy dodasz trzeci węzeł lub kolejne. Upewnij się, że quorum.two_node ma wartość 0, a quorum.expected_votes jest równe liczbie węzłów w klastrze.

    sudo crm corosync get quorum.two_node
    sudo crm corosync get quorum.expected_votes
    
  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 dla zaplanowanych zdarzeń platformy 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. Tylko dla SLES 12 SP5 Sprawdź wersję pakietu resource-agents i zaktualizuj go w razie potrzeby. SLES 15 i wyższe domyślnie zawierają go w swoich wersjach zainstalowanych.

    zypper info resource-agents
    

    Minimalna wersja to resource-agents-4.3.018.a7fb5035-3.98.1.

  2. [1] Umieść klaster w trybie konserwacji.

    sudo crm configure property maintenance-mode=true
    
  3. [1] Ustaw strategię i ograniczenie dla węzła kondycji klastra Pacemaker.

    Ważne

    Nie definiuj żadnych innych zasobów w klastrze zaczynając od health-, poza zasobami opisanymi w kolejnych krokach.

    sudo crm configure property node-health-strategy=custom
    sudo crm configure location loc_azure_health \
       /'!health-.*'/ rule '#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 crm configure primitive health-azure-events ocf:heartbeat:azure-events-az \
       meta failure-timeout=120s \
       op start start-delay=60s \
       op monitor interval=10s
    
    sudo crm configure clone health-azure-events-cln health-azure-events \
       meta allow-unhealthy-nodes=true
    

    Uwaga

    Po skonfigurowaniu health-azure-events zasobu możesz zignorować następujący komunikat ostrzegawczy.

    OSTRZEŻENIE: health-azure-events: nieznany atrybut „allow-unhealthy-nodes”.

  6. Wyprowadź klaster Pacemaker z trybu konserwacji i wyczyść wszystkie błędy.

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

    crm status
    
    Cluster Summary:
      * Stack: corosync (Pacemaker is running)
      * Current DC: sap-cl1 (version 3.0.0+20250218.64cd85422c-160000.4.1-3.0.0+20250218.64cd85422c) - partition with quorum
      * Last updated: Thu Jul 30 19:07:49 2026 on sap-cl1
      * Last change:  Thu Jul 30 19:06:01 2026 by root via root on sap-cl1
      * 2 nodes configured
      * 3 resource instances configured
    
    Node List:
      * Online: [ z04ascs3 z04ascs4 ]
    
    Full List of Resources:
      * stonith-sbd (stonith:fence_sbd):     Started sap-cl1
      * Clone Set: health-azure-events-cln [health-azure-events]:
        * Started: [ sap-cl1 sap-cl2 ]
    

    Pierwsze wykonanie zapytania dla zaplanowanych zdarzeń może trwać do 2 minut. Testowanie pacemakera przy zaplanowanych zdarzeniach może obejmować akcje ponownego uruchamiania lub wdrażania dla maszyn wirtualnych klastra. Więcej informacji można znaleźć w zaplanowanych wydarzeniach.

    Uwaga

    Po skonfigurowaniu zasobów Pacemakera dla agenta azur-events, jeśli włączysz klaster w tryb konserwacji lub go wyłączysz, możesz otrzymać komunikaty ostrzegawcze, takie jak:

    OSTRZEŻENIE: cib-bootstrap-options: nieznany atrybut "hostName_hostname"
    OSTRZEŻENIE: cib-bootstrap-options: nieznany atrybut "azure-events_globalPullState"
    OSTRZEŻENIE: cib-bootstrap-options: nieznany atrybut 'hostName_ hostname'
    Możesz zignorować te ostrzeżenia.

Następne kroki