概要
クラウド環境でのPacemaker+Corosyncのクラスタ構成のシステム構築の際、GW宛のPing結果次第でリソースのフェイルオーバーを実装しようとしたらインターネットに通じるDMZのGWがPingを返さなかった。
GW側の設定変更も難しかった為、場当たり的な対応としてインスタンスの持つNICのIP叩いて監視することに。
環境
RHEL 7.9
pacemaker-1.1.15
corosync-2.3.6
drbd-9.15.0-1(Master/Slaveリソース)
host1(master):192.168.1.1
host2(slave):192.168.1.2
/etc/hosts
192.168.1.1 host1
192.168.1.2 host2
リソース設定
pcsコマンドからリソースを作成する。
PING-HOSTXや各種パラメータは適宜変更
host_listはホスト名でもIPv6でもおーけー。
# Pingリソース作成 HOST1
# 今回は自らのNICの監視のみなので --cloneは付与せず
pcs resource create PING-HOST1 ocf:pacemaker:ping \
dampen=5s multiplier=1000 \
host_list=192.168.1.1
# Pingリソース作成 HOST2
pcs resource create PING-HOST2 ocf:pacemaker:ping \
dampen=5s multiplier=1000 \
host_list=192.168.1.2
自分の持つNICに対してのみPing監視を行うように制限を付与する。
(masterのnicが死んだときslaveが死んだnicを見ないように)
# 自サーバが保有するNICに向けてPing
# 除外ホスト指定のため、対向のホスト名を入力
pcs constraint location PING-HOST1 avoids host2
pcs constraint location PING-HOST2 avoids host1
pingの結果でMaster/Slaveリソースをフェイルオーバーする。
他にping監視を追加していた場合はそれもフェイルオーバー条件に入るので注意
# Ping系が失敗した場合フェイルオーバー
pcs constraint location マスタースレーブリソース \
rule score=-INFINITY pingd lt 1 or not_defined pingd