Azure で Red Hat Enterprise Linux に Pacemaker を設定する

この記事では、Red Hat Enterprise Linux(RHEL)上で基本的な2ノードのPacemakerクラスタのセットアップと設定方法を説明します。 説明書は RHEL 8.6+RHEL 9.xRHEL 10.xをカバーしています。

前提条件

概要

このガイドは、必要なリソースグループ、Azureの仮想ネットワーク、サブネット、仮想マシン(VM)をすでに展開している前提です。

Linux上で動くクラスターは、不健康なノードをフェンシングするためにフェンシングエージェントが必要です。 この作業をAzureで行うには、以下のいずれかの方法を用いてください。

  • Azure Shared Disk を用いた Storage Based Death (SBD)
  • iSCSIターゲットを用いたストレージベースデス(SBD)
  • Azure Fencing Agent (Azure フェンシング エージェント)

本文書で使用されている接頭辞は以下の通りです:

  • [A]: すべてのノードに当てはまります。
  • [1]: ノード 1 にのみ当てはまります。
  • [2]: ノード 2 にのみ当てはまります。

重要

Azureでは、ストレージベースのフェンシング(fence_sbd)を持つRHELの高可用性クラスタは、ソフトウェアエミュレートされたウォッチドッグを使用します。 SBDを使用する際は以下のドキュメントを確認してください。

Azure共有ディスクでのSBD使用方法

Azure Shared Disksを使うことで、クラスター内のすべての仮想マシンに同じディスクをマウントできます。 SBDデバイスをその共有ディスク上でホストすれば、追加のインフラ要件なしで可能です。

Pacemakerクラスタ内のSBDデバイスとしてのAzure共有ディスクの図。

Benefits

  • 追加のリソースを必要としない、SBD向けのネイティブなAzure共有ブロックデバイスオプションを提供します。
  • 仮想マシンはマネージドディスクを直接接続し、追加のネットワーク要素への依存を減らすことができます。

重要な考慮事項

  • Premium SSD SKU の Azure 共有ディスクを SBD デバイスとして使用できます。
  • サポートされているオペレーティングシステムの一覧を確認してください。
  • Azureプレミアム共有ディスクを使用するSBDデバイスは、ローカル冗長ストレージ(LRS)およびゾーン冗長ストレージ(ZRS)をサポートします。
  • デプロイのタイプに応じて、SBD デバイスとしてAzure共有ディスクに適した冗長ストレージを選択します。
    • Azure Premium Shared Disk(skuName - Premium_LRS)で LRS を使用する SBD デバイスは、可用性セットでのデプロイのみをサポートします。
    • Azureプレミアム共有ディスク(skuName - Premium_ZRS)にZRSを使用するSBDデバイスは、可用性ゾーンでの展開に推奨されます。
  • SBD デバイスに使用するAzure共有ディスクは、大きくする必要はありません。 共有ディスクを使用できるクラスター ノードの数は、maxShares 値によって決まります。 例えば、SAP ASCS/ERSやSAP HANAのスケールアップのような2ノードクラスタで、SBDデバイスにP1またはP2のディスクサイズを使用できます。
    • ノードが2つ以上あるクラスタの場合は、選択したディスクの文書化された maxShares を参照してください。
  • Azure共有ディスクSBDデバイスを異なるPacemakerクラスタ間に接続しないでください。
  • 複数のAzure共有ディスク SBD デバイスを使用する場合は、VM に接続できるデータ ディスクの最大数の制限を確認します。
  • Azure共有ディスクの制限事項の詳細については、Azure共有ディスクのドキュメントの「制限事項」セクションを慎重に確認してください。

iSCSIターゲットを用いたSBDの使用

このソリューションでは、少なくとも1台の追加仮想マシン(VM)上でInternet Small Computer System Interface(iSCSI)ターゲットをホストする必要があります。

Pacemakerクラスタ内のSBDデバイス用iSCSIターゲットをホストするiSCSIサーバーの図。

Benefits

  • これらのiSCSIホストサーバーは、同じリージョン内の他のPacemakerクラスターのiSCSIターゲットもホストできます。
  • すでにオンプレミスで使っている場合、Pacemakerクラスタの運用方法を変更する必要はありません。

重要な考慮事項

  • クラスタのレジリエンシーを最高レベルにするには、3台のiSCSIホストサーバーを使用する必要があります。
    • サーバーを1台しか使用しないと、単一障害点が生じ、そのサーバーが停止した場合にクラスタはフェンシングできなくなります。
    • ペースメーカーは、ターゲットが2つしかなく、そのうち1人が倒れている場合はフェンシングを許可しません。
  • iSCSIのターゲットホストサーバーは、クラスタと同じリージョンに存在しなければなりません。
  • クラスタとiSCSIホストサーバー間のネットワークルーティングは、非冗長なネットワークデバイス( 例えばネットワーク仮想アプライアンス)を経由してはなりません。
    • ネットワーク機器のメンテナンスイベントやその他の問題は、クラスタ全体の安定性と信頼性に悪影響を及ぼすことがあります。

Azure Fence Agentの使用

Azure Fence Agentを使うことで、クラスターはAzure APIを直接呼び出してノードをフェンス化し、失敗したノードを再起動できます。

Pacemaker ClusterにおけるAzure Fence Agentの図。

Benefits

  • 追加のリソースは必要ありません。
  • 管理されたIDは認証情報のメンテナンスを一切削除します。

重要な考慮事項

  • 認証にはマネージドIDを使いましょう。 現在サービスプリンシパルを使っている場合は、Azure Fence AgentをSPNからMSIに更新してください。
  • Azure fence agentはパブリックAzureエンドポイントへのアウトバウンド接続が必要です。 考えられる解決策と詳細については、「標準 ILB を使用した VM のパブリック エンドポイント接続」を参照してください。
  • 監視およびフェンス操作は逆シリアル化されます。 その結果、長時間実行されている監視操作と同時フェンス イベントがある場合、既に実行されている監視操作により、クラスターのフェールオーバーに遅延は発生しません。

SBD 用の Azure Shared Disk をデプロイする

PowerShellを使ってAzure共有ディスクを作成・接続するには、以下のコマンドを実行します。 Azure CLIやAzureポータルを使ってリソースをデプロイしたい場合は、「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
}

iSCSIターゲットの使用

iSCSIターゲットホストサーバーを構築する

  1. サポートされているRHEL OSバージョンで動作する3台の仮想マシンを展開します。 VMは必ずしも大きくする必要はありません。 Standard_E2sやStandard_D2sなどのVMサイズで十分です。

    SAPにはHAやUpdate ServicesでRHELを使う必要はありませんし、iSCSIターゲットサーバーのSAP用OSイメージにはRHELを使う必要はありません。 代わりに標準のRHEL OSイメージを使うこともできます。 ただし、サポートライフサイクルは、OS 製品リリースによって異なります。

  2. 最新のアップデートをインストールし、必要なら再起動してください。

    sudo dnf -y update
    
  3. iSCSIターゲットパッケージをインストールしてください。

    sudo dnf install -y targetcli
    
  4. iSCSIサービスを有効化し、開始します。

    sudo systemctl start target
    sudo systemctl enable target
    
  5. ファイアウォールのポートを開けてください。

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

iSCSIターゲットの作成

各クラスターごとに、各iSCSIホストサーバーにiSCSIディスクをプロビジョニングし、すべてのクラスタノードにそのディスクへのアクセスを許可する必要があります。 この例では、2つの異なるクラスターごとにディスクを作成します:

  • ascsnw1:NW1のASCS/ERSクラスター
  • hdbnw1:NW1用のHANAデータベースクラスター
  • sap-cl1およびsap-cl2:NW1 ASCS/ERSクラスタノードのホスト名
  • sap-db1およびsap-db2:NW1 HANAクラスタノードのホスト名
  1. すべての SBD デバイスのルート フォルダーを作成します。
    sudo mkdir /sbd
    
  2. 最初のクラスタ(ascsnw1)用のSBDデバイスを作成します。
    # 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. 2つ目のクラスター(hdbnw1)用のSBDデバイスを作成します。
    # 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. 構成を保存します。
    sudo targetcli saveconfig
    
  5. セットアップを確認してください。
    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]
    

Azure Fence Agent を構成する

  1. ID の作成

    マネージドアイデンティティ(MSI)を作成するには、クラスタ内の各VMごとに システム割り当てのマネージドアイデンティティを作成します 。 現時点ではユーザー割り当てのマネージドIDはサポートされていません。

  2. カスタム ロールを作成する。

    あなたのアイデンティティは、VMに対してフェンシングアクションを行うためにAzure RBACの許可が必要です。 最小権限アクセス(LPA)セキュリティモデルに準拠するために、 カスタムRBACロールを作成します

    必要に応じてサブスクリプションIDを置き換え、あなたの役割には以下の定義を用いてください。

    {
          "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. カスタムロールをあなたのアイデンティティに割り当ててください。

    クラスタ内の各VMごとに、その管理IDをクラスタ内のすべてのVM(自身も含む)のカスタム「Linux Fence Agent」ロールに割り当てます。 詳細な手順については、「Azure portal を使用してリソースにマネージド ID アクセスを割り当てる」を参照してください。

    重要

    マネージドIDでの権限の割り当ておよび解除は、有効期限まで 遅延する可能性がある ことに注意してください。

クラスタの作成と構成

  1. [A] OSを更新し、必要に応じて再起動してください。

    sudo dnf -y update
    
  2. [A] 必要なクラスタパッケージをインストールしてください。

    sudo dnf install -y nmap-ncat pcs pacemaker resource-agents resource-agents-cloud
    
  3. [A] 必要なフェンスパッケージを設置してください。

    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] DNSの設定を。

    DNS サーバーを使用するか、すべてのノードで /etc/hosts を変更できます。 この例では、/etc/hosts ファイルを使用する方法を示します。

    エントリを使用しているIPアドレスとホスト名に一致するように更新してください。

    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]hacluster パスワードをすべてのノードで同じに更新してください。

    sudo passwd hacluster
    
  6. [A] ファイアウォールを更新しろ。

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --reload
    
  7. [A] ペースメーカーサービスを有効にしてください。

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] クラスターを作成してください。

    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. Pacemakerの起動遅延を設定してください。

    起動直後にPacemakerを起動すると、フェイルオーバー完了前にノードがクラスタに再加入し、フェイルオーバーや回復遅延を防ぐ可能性があります。 この問題を解決するには、再起動時のペースメーカー起動を遅らせるタイマーサービスを使う方法があります。

    1. [A] タイマーサービスの設定。
      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] タイマーサービスを有効にしてください。
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] ペースメーカーサービスを無効化。
      sudo pcs cluster disable --all
      
  10. クラスターの検証。

    1. [1] ペースメーカークラスターの検証。
      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] サービスの検証。
      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
      

フェンシングの設定

  1. [A] SBDサービスを有効にする。
    sudo systemctl enable sbd
    
  2. [A] ソフトウェアウォッチドッグを有効にしてください。
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] iSCSIデバイスIDを発見。
    1. LUN番号に基づいてマウントポイントを決定します
      ls -l /dev/disk/azure/scsi1/lun1
      lrwxrwxrwx. 1 root root 12 Apr 16 20:22 /dev/disk/azure/scsi1/lun1 -> ../../../sdb
      
    2. マウントからiSCSIデバイスIDを取得してください。
      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] SBD デバイスを作成します。
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] SBDデバイスをクラスタに追加します。
    sudo pcs stonith create sbd fence_sbd devices=/dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 op monitor interval=600 timeout=15
    
  2. [1] SBDの設定を変更してください。
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] SBDの設定ファイルを検証してください。
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] 必要なサービスを有効にしてください。
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] ソフトウェア ウォッチドッグを有効にする。
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] ノード1の InitiatorName を更新してください。
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] ノード2の InitiatorName を更新してください。
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] iSCSIサービスを再起動してください。
    sudo systemctl restart iscsi iscsid
    
  6. [A] すべてのiSCSIホストサーバーから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] iSCSIデバイスIDを発見する。
    1. 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. iSCSIデバイスIDを取得してください。
      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] 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] SBDデバイスをクラスタに追加します。
    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] SBDの設定を変更してください。
    sudo pcs property set stonith-timeout=210
    sudo pcs property set stonith-enabled=true
    
  3. [A] SBDの設定ファイルを検証してください。
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] Azure Fence Agent を設定します。

    政府クラウドAzure使用する場合は、Azure Fence Agentの設定時にcloud=オプションを指定する必要があります。 たとえば、Azure米国政府機関向けクラウドのcloud=usgovなどです。

    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] Azure Fence Agent 用にクラスタを設定してください。

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

2つ以上のノードを持つPacemakerクラスタの構築

より大きなクラスターを構築する場合は、以下の点を念頭に置いてください:

  1. [1] クラスター構成を調整。

    ノードが3つ以上追加されると、 Votequorum - Expected votesVotequorum - Flags - 2Node の値は自動的に更新されます。 2Nodeフラグが存在せず、Votequorum - Expected votesがクラスタ内のノード数と等しいかを検証します。

    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. フェンスの配置を調整してください。

    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
    

Azure のスケジュールされたイベントに対して Pacemaker を構成する

Scheduled Eventsは、アプリケーションがVMのメンテナンス準備をする時間を与えるAzureメタデータサービスです。 再起動などの今後のメンテナンスイベントに関する情報を提供し、アプリケーションがそれに備えて混乱を抑えられます。

azure-events-az リソースエージェントはこのメタデータサービスを監視します。 エージェントがイベントを検出し、別のクラスタノードが利用可能であると判断すると、ノードレベルのヘルス属性 #health-azure-1000000に設定します。 この値によりクラスタはノードを不健康とみなし、影響を受けたノードからリソースを移動させます。 ロケーション制約により、 health- から始まるリソースは除外されます。なぜなら、azure-events-azエージェントは両方のノードで動作する必要があるからです。 影響を受けたクラスタノードが実行中のクラスタリソースから解放されると、エージェントはメタデータサービスに通知し、スケジュールされたイベントは継続されます。 すべてのイベントが完了すると、リソースエージェントは #health-azure 属性を 0に戻し、ノードを再び健康状態にマークします。

重要

前回は、リソース エージェント azure-events の使用について説明しました。 新しいリソース エージェント azure-events-az は、さまざまな可用性ゾーンに展開された Azure 環境を完全にサポートします。 Pacemakerを使ったすべてのSAPハイアプライシステムには、新しいazure-events-azエージェントを使いましょう。

  1. resource-agentsパッケージをインストールしてアップデートしてください。

    sudo dnf install -y resource-agents
    
  2. [1] クラスターをメンテナンスモードに切り替えろ。

    sudo pcs property set maintenance-mode=true
    
  3. [1] ペースメーカークラスターの健康ノード戦略と制約を設定します。

    重要

    次の手順で説明するリソース以外に、health- で始まるクラスター内の他のリソースは定義しないでください。

    sudo pcs property set node-health-strategy=custom
    sudo pcs constraint location 'regexp%!health-.*' \
       rule score-attribute='#health-azure' \
       "defined #uname"
    
  4. [1] クラスター属性の初期値を設定します。

    各クラスタノードごとにコマンドを実行します。 スケールアウト環境には、マジョリティメーカーのVMを含めてください。

    # 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] Pacemaker 内でリソースを構成します。 資源は 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. ペースメーカーのクラスターをメンテナンスモードから解除し、エラーを消してください

    sudo pcs property set maintenance-mode=false
    sudo pcs resource cleanup
    
  7. すべてのノードで health-azure-events が正常に起動しているか確認してください。

    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
    

    スケジュール化されたイベントに対する初回クエリの実行には、最大 2 分かかることがあります。 スケジュール化されたイベントを使用した Pacemaker テストでは、クラスター VM の再起動または再デプロイ アクションを使用できます。 詳細については、「スケジュールされたイベント」を参照してください。

オプションのフェンス構成

ヒント

このセクションは、特殊なフェンス デバイス fence_kdump を構成する必要がある場合にのみ適用されます。

VM 内で診断情報を収集する必要がある場合は、フェンス エージェント fence_kdump に基づいて別のフェンス デバイスを構成すると有用な場合があります。 fence_kdump エージェントでは、他のフェンス メソッドが呼び出される前に、kdump クラッシュ復旧に入ったノードを検出してクラッシュ復旧サービスを完了できるようにすることができます。 Azure VM を使用している場合、fence_kdump は、SBD や Azure フェンス エージェントなどの従来のフェンス メカニズムに代わるものではないことに注意してください。

重要

fence_kdump が第 1 レベルのフェンス デバイスとして構成されている場合、それによってフェンス操作で遅延が発生し、アプリケーション リソースのフェールオーバーでそれぞれ遅延が発生することに注意してください。

クラッシュ ダンプが正常に検出された場合、フェンスはクラッシュ復旧サービスが完了するまで遅延されます。 失敗したノードが到達不能な場合や応答しない場合は、構成されている繰り返しの回数と、fence_kdump のタイムアウトによって決まる時間だけフェンスが遅延されます。

提案されている fence_kdump のタイムアウトは、実際の環境に合わせて調整する必要がある場合があります。

fence_kdump フェンスは、VM 内で診断を収集するために必要な場合にのみ構成し、SBD やAzureフェンス エージェントなどの従来のフェンスメソッドと常に組み合わせて構成することをお勧めします。

以下の Red Hat KB には、fence_kdump フェンスの構成に関する重要な情報が含まれています。

次の省略可能な手順を実行して、Azureフェンス エージェントの構成に加えて、fence_kdump を第 1 レベルのフェンス構成として追加します。

  1. [A]kdump がアクティブになっていて、構成されていることを確認します。

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A]fence_kdump フェンス エージェントをインストールします。

    sudo dnf install -y fence-agents-kdump
    
  3. [1] クラスター内に fence_kdump フェンス デバイスを作成します。

    pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="sap-cl1 sap-cl2" timeout=30
    
  4. [1] フェンス レベルを構成して、fence_kdump フェンス メカニズムが最初に動作するようにします。

    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] ファイアウォールを通過する fence_kdump のために必要なポートを許可します。

    firewall-cmd --add-port=7410/udp --permanent
    firewall-cmd --reload
    
  6. [A]fence_kdump_nodes の一部のバージョンでタイムアウトによる /etc/kdump.conf の失敗が発生しないように、fence_kdumpkexec-tools の構成を実行します。 詳細については、kexec-tools バージョン 2.0.15 以降で fence_kdump_nodes が指定されていない場合に fence_kdump がタイムアウトするを参照してください。 ここでは、2 ノード クラスターの構成例を示します。 /etc/kdump.conf で変更を加えた後に、kdump イメージを再生成する必要があります。 再生成するには、kdump サービスを再起動します。

    vi /etc/kdump.conf
    # On node prod-cl1-0 make sure the following line is added
    fence_kdump_nodes  prod-cl1-1
    # On node prod-cl1-1 make sure the following line is added
    fence_kdump_nodes  prod-cl1-0
    
    # Restart the service on each node
    systemctl restart kdump
    
  7. [A]initramfs イメージ ファイルに fence_kdumphosts のファイルが含まれることを確認します。

    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. ノードをクラッシュさせて構成をテストします。

    重要

    クラスターが既に運用環境で使用中の場合は、ノードをクラッシュさせるとアプリケーションに影響があるため、それに応じてテストを計画します。

    echo c > /proc/sysrq-trigger
    

次のステップ