••••••••••••••••••••••iLOポート大事なデータを守る！

•••••••••••••
•

•
•

企業

実装名

Dell

Integrated Dell Remote Access Controller (iDRAC)

HPE

HPE Integrated Lights Out - iLO

富士通

integrated Remote Management Controller (iRMC)

•vCenter
ESXi

VM1
ESXi

VM2
ESXi

VM1からvCenterにVM2のSTONITHを要求

••
•・・・

•
•

•••••••••••••••••••••「red hat ha」で検索••••

vnet

サブネット
10.0.0.0/2410.0.0.4

10.0.0.5

10.0.0.6

アクセス確認用
クライアントサーバ

試験サーバ#1
ホスト名:vm-db-01
RHEL 9HA Add-Onあり

試験サーバ#2
ホスト名:vm-db-02
RHEL 9HA Add-Onあり

$ sudo dnf install -y pcs pacemaker fence-agents-azure-arm nmap-ncat resource-agents-cloud$ which fence_azure_arm/usr/sbin/fence_azure_arm•[vm-db-01]$ fence_azure_arm --msi --action=list※--msi は認証にマネージドIDを使用するフラグ--action=list は操作対象のVMの一覧を表示するアクション
2024-02-13 08:25:22.229 ERROR: Failed: (AuthorizationFailed) The
client '2ea・・・f2' with object id '2ea・・・f2' does not haveauthorization to perform action'Microsoft.Compute/virtualMachines/read' over scope'/subscriptions/4a・・・d3/resourceGroups/rg-ha-test001/providers/Microsoft.Compute' ・・・省略・・・

•••
•{
"properties": {"roleName": "Linux Fence Agent Role test","description": "Allows to power-off and start virtual machines with Pacemaker","assignableScopes": ["/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"permissions": [{"actions": ["Microsoft.Compute/*/read","Microsoft.Compute/virtualMachines/powerOff/action","Microsoft.Compute/virtualMachines/start/action"],"notActions": [],"dataActions": [],"notDataActions": []
}
]
}}

•

••••

•

カスタムロール名で検索•

•
•
•

•

[vm-db-01 ~]$ fence_azure_arm --msi --action=list
vm-db-01,

••[vm-db-01 ~]$ fence_azure_arm --msi --action=list
vm-db-01,
vm-db-02,

•
•

サブネット
10.0.0.0/24

10.0.0.4[vm-db-01]$ ip a～～省略～～
2: eth0: ・・・
inet 10.0.0.5/24 ・・・
valid_lft ・・・
inet 10.0.0.34/24valid_lft ・・・～～省略～～

10.0.0.5
仮想IP
10.0.0.34[client]$ ping -c 3 10.0.0.34
PING 10.0.0.34 (10.0.0.34) 56(84) bytes of data.
From 10.0.0.4 icmp_seq=1 Destination Host Unreachable

アクセス確認用
クライアントサーバ

試験サーバ#1
ホスト名:vm-db-01
RHEL 9HA Add-Onあり

From 10.0.0.4 icmp_seq=2 Destination Host Unreachable
From 10.0.0.4 icmp_seq=3 Destination Host Unreachable--- 10.0.0.34 ping statistics --3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2052ms
pipe 3••サブネット
10.0.0.0/24

10.0.0.5

10.0.0.4

内部LB
フロントエンドIP構成
10.0.0.34
アクセス確認用
クライアントサーバ

10.0.0.6

仮想IP
10.0.0.34
試験サーバ#1
ホスト名:vm-db-01
RHEL 9HA Add-Onあり

試験サーバ#2
ホスト名:vm-db-02
RHEL 9HA Add-Onあり

•
•
•
•

•

•

•

•

•

•

•

•

•
•

•
•

•

$ firewall-cmd --get-active-zones
publicinterfaces: eth0
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="168.63.129.16/32" accept"$ sudo firewall-cmd --reload••••[vm-db-01]# fence_azure_arm --verbose --msi --action=list
2024-02-19 05:55:40,782 INFO: Request URL:
'https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx/resourceGroups/rg-ha-test001/providers/Microsoft.Compute/virtualMachines?api-version=REDACTED'
2024-02-19 05:55:40,782 INFO: Request method: 'GET'
2024-02-19 05:55:40,784 DEBUG: Starting new HTTPS connection (1):management.azure.com:443

••••••••••

サブネット
10.0.0.0/24

フロントエンド
パブリックIP

10.0.0.4

内部LB

アクセス確認用
クライアントサーバ

フロントエンド
IP構成
10.0.0.34

PublicLB

10.0.0.5

10.0.0.6

仮想IP
10.0.0.34
試験サーバ#1
ホスト名:vm-db-01
RHEL 9HA Add-Onあり

試験サーバ#2
ホスト名:vm-db-02
RHEL 9HA Add-Onあり

•
••••

•••

••

•

[vm-db-01 ~]$ fence_azure_arm --msi --action=list
vm-db-01,
vm-db-02,

$ sudo firewall-cmd --permanent --add-service=high-availability$ sudo firewall-cmd --add-service=high-availability$ sudo systemctl enable pcsd.service --now$ sudo passwd hacluster
Changing password for user hacluster.
New password:Retype new password:
passwd: all authentication tokens updated successfully.

[vm-db-01 ]$ sudo pcs host auth vm-db-01 addr=10.0.0.5 vm-db-02 addr=10.0.0.6
Username: hacluster
Password: （先ほど設定したパスワードを入力）
vm-db-01 : Authorized
vm-db-02 : Authorized[vm-db-01 ]$ sudo pcs cluster setup DB_Cluster vm-db-01 addr=10.0.0.5 vm-db-02 addr=10.0.0.6[vm-db-01 ]$ sudo pcs cluster start --all•# pcs resource defaults resource-stickiness=200# pcs resource defaults migration-threshold=1# pcs resource create filesystem1 ocf:heartbeat:Filesystem device="/dev/mapper/mpatha2" directory="/dbfp/pgdata" fstype="xfs"
force_unmount="safe" op start timeout=60s on-fail=restart monitor timeout=60s interval=10s on-fail=restart stop timeout=60s on-fail=fence# pcs resource create filesystem2 ocf:heartbeat:Filesystem device="/dev/mapper/mpatha3" directory="/dbfp/pgwal" fstype="xfs"
force_unmount="safe" op start timeout=60s on-fail=restart monitor timeout=60s interval=10s on-fail=restart stop timeout=60s on-fail=fence# pcs resource create filesystem3 ocf:heartbeat:Filesystem device="/dev/mapper/mpatha4" directory="/dbfp/pgarch" fstype="xfs"
force_unmount="safe" op start timeout=60s on-fail=restart monitor timeout=60s interval=10s on-fail=restart stop timeout=60s on-fail=fence# pcs resource create ipaddr ocf:heartbeat:IPaddr2 ip="192.168.1.87" nic="ens4" cidr_netmask="24" op start timeout=60s on-fail=restart monitor
timeout=60s interval=10s on-fail=restart stop timeout=60s on-fail=fence# pcs resource create pgsql ocf:linuxhajp:pgsql pgctl="/usr/pgsql-11/bin/pg_ctl" psql="/usr/pgsql-11/bin/psql" pgdata="/dbfp/pgdata/data"
pgdba="postgres" pgport="5432" pgdb="template1" op start timeout=300s on-fail=restart monitor timeout=60s interval=10s on-fail=restart stop
timeout=300s on-fail=fence# pcs resource group add pgsql-group filesystem1 filesystem2 filesystem3 ipaddr pgsql# pcs resource create ping ocf:pacemaker:ping name="ping-status" host_list="192.168.1.1" attempts="2" timeout="2" debug="true" op start
timeout=60s on-fail=restart monitor timeout=60s interval=10s on-fail=restart stop timeout=60s on-fail=fence# pcs resource clone ping
# pcs stonith create fence1-ipmilan fence_ipmilan delay="10" pcmk_host_list="r81-1" ip="192.168.2.85" username="root" password="XXXXXX"
lanplus="1" ipmitool_path="/usr/bin/ipmitool_stub" op start timeout=60s on-fail=restart monitor timeout=60s interval=3600s on-fail=restart stop
timeout=60s on-fail=ignore# pcs stonith create fence2-ipmilan fence_ipmilan delay="0" pcmk_host_list="r81-2" ip="192.168.2.86" username="root" password="XXXXXX"
lanplus="1" ipmitool_path="/usr/bin/ipmitool_stub" op start timeout=60s on-fail=restart monitor timeout=60s interval=3600s on-fail=restart stop
timeout=60s on-fail=ignore# pcs constraint location pgsql-group prefers r81-1=200# pcs constraint location pgsql-group prefers r81-2=100# pcs constraint location fence1-ipmilan avoids r81-1# pcs constraint location fence2-ipmilan avoids r81-2# pcs constraint location pgsql-group rule score=-INFINITY ping-status lt 1 or not_defined ping-status# pcs constraint colocation add pgsql-group with ping-clone score=INFINITY# pcs constraint order ping-clone then pgsql-group symmetrical=false

•

•
•

# dnf install pm_extra_tools-1.5-1.el9.noarch.rpm/usr/share/pm_extra_tools/pm_pcsgen_sample.xlsx にサンプルファイルがあります。

このようなExcelを書いて、リソースの設定ができます。

•csv
pm_pcsgenpcsコマンド$ pm_pcsgen resource-def.csv
resource-def.xml(CIB), resource-def.sh(PCS)を出力しました。
$ lsresource-def.csv resource-def.xml resource-def.shcib（cluster start後に）$ sudo pcs cluster cib-push resource-def.xml --config

•#1 vm-db-01#2 vm-db-02

GroupGroup
ipaddr(仮想IP割り当て)

ipaddr(仮想IP割り当て)
azure-lb-primary(正常性プローブ応答)

fence2-azure-arm (fence_azure_arm)

フェイルオーバ

azure-lb-primary(正常性プローブ応答)

fence1-azure-arm (fence_azure_arm)

#1 vm-db-01#2• クラスタのActとなるサーバに仮想IPアドレスを設定します。
Group• 内部LBから振り分け先の死活監視とGroup
ipaddr(仮想IP割り当て)
azure-lb-primary(正常性プローブ応答)

ipaddrして、正常性プローブがport60000(仮想IP割り当て)
フェイルオーバに送付されます。これを受ける
azure-lb-primary(正常性プローブ応答)

azure-lb リソースを設定します。
• これらは同一のVMで動くべきため、Groupを組みます。

fence2-azure-arm (fence_azure_arm)

fence1-azure-arm (fence_azure_arm)

•
•
•••
•••
•••
•

•
•

#1

#2

GroupGroup
ipaddr(仮想IP割り当て)

ipaddr(仮想IP割り当て)
azure-lb-primary(正常性プローブ応答)

fence2-azure-arm (fence_azure_arm)

フェイルオーバ

azure-lb-primary• フェンシングエージェントは、「相(正常性プローブ応答)手のサーバをSTONITHする」ように設定します。

fence1-azure-arm (fence_azure_arm)

•
•
•••

•[vm-db-01]# pcs status --full～～省略～～
Node List:* Node vm-db-01 (1): online, feature set 3.16.2* Node vm-db-02 (2): online, feature set 3.16.2
Full List of Resources:* Resource Group: primary-group:* ipaddr(ocf::heartbeat:IPaddr2): Started vm-db-01* azure-lb-primary(ocf::heartbeat:azure-lb): Started vm-db-01* fence1-azure-arm(stonith:fence_azure_arm):
Started vm-db-02* fence2-azure-arm(stonith:fence_azure_arm):
Started vm-db-01～～省略～～

•[vm-db-01]# systemctl status pacemaker --no-pager
pacemaker.service - Pacemaker High Availability Cluster Manager～～省略～～
CGroup: /system.slice/pacemaker.service│- 省略└-3766 /usr/bin/nc -l -k 60000～～省略～～

••[vm-db-01]# vi /usr/lib/ocf/resource.d/heartbeat/azure-lb～～省略～～
lb_stop(){return $OCF_ERR_GENERIC
stop_rc=$OCF_SUCCESS～～省略～～

••[vm-db-01]# pkill -KILL -f /usr/bin/nc

•

Sby側だった2号機で確認[vm-db-02]# pcs stonith history
reboot of vm-db-01 successful: delegate=vm-db-02, client=pacemakercontrold.19554, origin=vm-db-02, completed='日付時刻'
1 event found•[vm-db-02]# pcs status --full～～省略～～
Node List:* Node vm-db-01 (1): OFFLINE* Node vm-db-02 (2): online, feature set 3.16.2
Full List of Resources:* Resource Group: primary-group:* ipaddr(ocf::heartbeat:IPaddr2): Started vm-db-02* azure-lb-primary(ocf::heartbeat:azure-lb): Started vm-db-02* fence1-azure-arm(stonith:fence_azure_arm):
Started vm-db-02* fence2-azure-arm(stonith:fence_azure_arm):
Stopped～～省略～～

•

クライアントから仮想IPアドレスへのping[client]# ping 10.0.0.34～～省略～～
64bytes from 10.0.0.34: icmp_seq=4 ttl=64 time=1.45 ms
64bytes from 10.0.0.34: icmp_seq=5 ttl=64 time=1.83 ms
64bytes from 10.0.0.34: icmp_seq=6 ttl=64 time=1.40 ms
64bytes from 10.0.0.34: icmp_seq=7 ttl=64 time=1.74 ms
64bytes from 10.0.0.34: icmp_seq=8 ttl=64 time=33.8 ms
64bytes from 10.0.0.34: icmp_seq=23 ttl=64 time=2.62 ms
64bytes from 10.0.0.34: icmp_seq=24 ttl=64 time=2.02 ms～～省略～～

切り替え時に当たって、時間がかかっている。

切り替え時に流れたものはロスしている。

•••