今回は
公式サイトを参考にApacheをクラスタサービスとして追加してみます。
◆Apacheをインストールする
[root@pcmk-1 ~]# dnf install -y httpd wget
[root@pcmk-1 ~]# firewall-cmd --permanent --add-service=http
success
[root@pcmk-1 ~]# firewall-cmd --reload
success
◆ウェブサイト文書の作成
[root@pcmk-1 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>My Test Site - $(hostname)</body>
</html>
END
[root@pcmk-1 ~]# cat /var/www/html/index.html
<html>
<body>My Test Site - pcmk-1</body>
</html>
Apache Status URLを有効にする
ペースメーカーはリソースエージェントを使って状態を監視します
[root@pcmk-1 ~]# cat <<-END >/etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Require local
</Location>
END
別ノード(pcmk-2)にもここまでの流れと同じ事を実施します。
(上記と同じなので内容は省略します)
◆クラスタの設定
[root@pcmk-1 ~]# pcs resource create WebSite ocf:heartbeat:apache \
configfile=/etc/httpd/conf/httpd.conf \
statusurl="http://localhost/server-status" \
op monitor interval=1min
デフォルトでは、すべてのリソースの開始、停止、監視、および その他の操作は20秒です。
ここではグローバルオペレーションのタイムアウトのデフォルトを240秒に調整します
[root@pcmk-1 ~]# pcs resource op defaults
[root@pcmk-1 ~]# pcs resource op defaults update timeout=240s
Warning: Defaults do not apply to resources which override them with their own defined values
[root@pcmk-1 ~]# pcs resource op defaults
Meta Attrs: op_defaults-meta_attributes
timeout=240s
暫くたった後、クラスターの状態を確認します。
[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: pcmk-1 (version 2.1.10-1.1.el9_7-5693eaeee) - MIXED-VERSION partition with quorum
* Last updated: Wed Apr 1 03:25:22 2026 on pcmk-1
* Last change: Wed Apr 1 03:23:34 2026 by root via root on pcmk-1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ pcmk-1 pcmk-2 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1
* WebSite (ocf:heartbeat:apache): Started pcmk-2
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
「WebSite」の行で「(ocf:heartbeat:apache):」とapache起動が確認できますが、「Started pcmk-2」となっています。
なお、もしリソース起動が失敗したら以下のコマンドで原因を探ります
wget -O - http://localhost/server-status
Not FoundForbidden<Location /server-status>
この様に表示された場合、ブロックが正しいか確認します。
◇リソースが同じホスト上で実行されることを確実にする
Pacemakerは、1台のマシンの負荷を軽減するために、一般的に 設定済みのリソースをクラスタノード間に分散させます。
しかし、クラスタに対して、同じホストの2つのリソースが関連していて、実行する必要があることを伝えることができます。
これを実現するために、リソースを起動するノードのスコア値を設定し、同居制約を用います。
スコア値の優先度は以下になります。
-INFINITY < 負の値 < 0 < 正の値 < INFINITY
[root@pcmk-1 ~]# pcs constraint colocation add WebSite with ClusterIP INFINITY
[root@pcmk-1 ~]# pcs constraint
Colocation Constraints:
resource 'WebSite' with resource 'ClusterIP'
score=INFINITY
[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: pcmk-2 (version 2.1.10-1.1.el9_7-5693eaeee) - partition with quorum
* Last updated: Wed Apr 1 03:34:50 2026 on pcmk-1
* Last change: Wed Apr 1 03:34:20 2026 by root via root on pcmk-1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ pcmk-1 pcmk-2 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1
* WebSite (ocf:heartbeat:apache): Started pcmk-1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
上記の様に、WebSiteのStartedがpcmk-1になったことが確認出来ます。
◇リソースの開始と停止を順序通りに行う
[root@pcmk-1 ~]# pcs constraint order ClusterIP then WebSite
Adding ClusterIP WebSite (kind: Mandatory) (Options: first-action=start then-action=start)
[root@pcmk-1 ~]# pcs constraint
Colocation Constraints:
resource 'WebSite' with resource 'ClusterIP'
score=INFINITY
Order Constraints:
start resource 'ClusterIP' then start resource 'WebSite'
◇あるノードを他より優先する
[root@pcmk-1 ~]# pcs constraint location WebSite prefers pcmk-2=50
[root@pcmk-1 ~]# pcs constraint
Location Constraints:
resource 'WebSite' prefers node 'pcmk-2' with score 50
Colocation Constraints:
resource 'WebSite' with resource 'ClusterIP'
score=INFINITY
Order Constraints:
start resource 'ClusterIP' then start resource 'WebSite'
[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: pcmk-2 (version 2.1.10-1.1.el9_7-5693eaeee) - partition with quorum
* Last updated: Wed Apr 1 03:52:00 2026 on pcmk-1
* Last change: Wed Apr 1 03:51:22 2026 by root via root on pcmk-1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ pcmk-1 pcmk-2 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1
* WebSite (ocf:heartbeat:apache): Started pcmk-1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
現在のスコア値を確認するには以下のコマンドを入力します。
[root@pcmk-1 ~]# crm_simulate -sL
Current cluster status:
* Node List:
* Online: [ pcmk-1 pcmk-2 ]
* Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1
* WebSite (ocf:heartbeat:apache): Started pcmk-1
Assignment Scores:
* pcmk__primitive_assign: ClusterIP allocation score on pcmk-1: 200
* pcmk__primitive_assign: ClusterIP allocation score on pcmk-2: 50
* pcmk__primitive_assign: WebSite allocation score on pcmk-1: 100
* pcmk__primitive_assign: WebSite allocation score on pcmk-2: -INFINITY
上記の場合、スコア値からpcmk-1の方がClusterIP及び WebSiteリソースが優先されます。
◇資源を手動で移動する
上記ではWebSiteのリソースがpcmk-1でしたが、これをpcmk-2に移動してみます。
[root@pcmk-1 ~]# pcs resource move WebSite pcmk-2
Location constraint to move resource 'WebSite' has been created
Waiting for the cluster to apply configuration changes...
Location constraint created to move resource 'WebSite' has been removed
Waiting for the cluster to apply configuration changes...
resource 'WebSite' is running on node 'pcmk-2'
[root@pcmk-1 ~]# pcs constraint
Location Constraints:
resource 'WebSite' prefers node 'pcmk-2' with score 50
Colocation Constraints:
resource 'WebSite' with resource 'ClusterIP'
score=INFINITY
Order Constraints:
start resource 'ClusterIP' then start resource 'WebSite'
[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: pcmk-2 (version 2.1.10-1.1.el9_7-5693eaeee) - partition with quorum
* Last updated: Wed Apr 1 04:01:04 2026 on pcmk-1
* Last change: Wed Apr 1 03:59:59 2026 by root via root on pcmk-1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ pcmk-1 pcmk-2 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-2
* WebSite (ocf:heartbeat:apache): Started pcmk-2
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled