HAクラスタシステム構築(Pacemaker+Corosync+pcs)

最終更新日: 2018.02.21

■概要

Pacemaker+Corosync+pcsでアクティブ・スタンバイ型のHA(High Availability:高可用性)クラスタシステムを構築する。
ここでは、2台のサーバーでクラスタシステムを構築し、アクティブ側サーバーダウン時に自動でスタンバイ側サーバーにサービスを切り替え(フェイルオーバー)、スタンバイ側でサービスを継続できるようにする。

【クラスタシステム構成】
(1)通常時

(2)ノードダウン時

【前提条件】
サーバー1 192.168.1.15 node1
サーバー2 192.168.1.16 node2
仮想IPアドレス 192.168.1.17


■ホスト名設定

[root@node1 ~]# echo 192.168.1.15 node1 >> /etc/hosts ← ホスト名node1でIPアドレス192.168.1.15に通信できるようにする

[root@node1 ~]# echo 192.168.1.16 node2 >> /etc/hosts ← ホスト名node2でIPアドレス192.168.1.16に通信できるようにする

■Pacemaker+Corosync+pcsインストール

[root@node1 ~]# yum -y install pacemaker corosync pcs ← Pacemaker+Corosync+pcs

■pcsd起動

[root@node1 ~]# systemctl start pcsd ← pcsd起動

[root@node1 ~]# systemctl enable pcsd ← pcsd自動起動設定
※ここまでをnode2側でも実施

■クラスタ作成

(1)クラスタノードの認証
[root@nodex ~]# passwd hacluster ← pcs管理者ユーザーにパスワード設定※node1とnode2側の両方で実施
ユーザー hacluster のパスワードを変更。
新しいパスワード: ← 任意のパスワードを応答
新しいパスワードを再入力してください: ← 任意のパスワードを応答(確認)
passwd: 全ての認証トークンが正しく更新できました。

[root@node1 ~]# pcs cluster auth node1 node2 -u hacluster ← node1とnode2をクラスタノードとして認証する
Password: ← pcs管理者ユーザーのパスワードを応答
node1: Authorized
node2: Authorized

(2)クラスタノードの設定
[root@node1 ~]# pcs cluster setup --name mycluster node1 node2 --force ← node1とnode2でmyclusterという名前でクラスタノードを設定する
Destroying cluster on nodes: node1, node2...
node1: Stopping Cluster (pacemaker)...
node2: Stopping Cluster (pacemaker)...
node1: Successfully destroyed cluster
node2: Successfully destroyed cluster

Sending 'pacemaker_remote authkey' to 'node1', 'node2'
node1: successful distribution of the file 'pacemaker_remote authkey'
node2: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
node1: Succeeded
node2: Succeeded

Synchronizing pcsd certificates on nodes node1, node2...
node1: Success
node2: Success
Restarting pcsd on the nodes in order to reload the certificates...
node2: Success
node1: Success

(3)クラスタノードの起動
[root@node1 ~]# pcs cluster start --all ← クラスタノード起動
node1: Starting Cluster...
node2: Starting Cluster...

[root@node1 ~]# pcs cluster enable --all ← クラスタノード自動起動設定
node1: Cluster Enabled
node2: Cluster Enabled

[root@node1 ~]# pcs status ← クラスタノード状態確認(node1側)
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Sat Dec  9 11:55:35 2017
Last change: Sat Dec  9 11:54:12 2017 by hacluster via crmd on node2

2 nodes configured
0 resources configured

Online: [ node1 node2 ] ← node1、node2ともにオンライン状態

No resources


Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

[root@node2 ~]# pcs status ← クラスタノード状態確認(node2側)
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Sat Dec  9 11:55:35 2017
Last change: Sat Dec  9 11:54:12 2017 by hacluster via crmd on node2

2 nodes configured
0 resources configured

Online: [ node1 node2 ] ← node1、node2ともにオンライン状態

No resources


Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

■仮想IPアドレス設定

(1)VIPcheckリソースエージェントインストール
スプリットブレイン(両現用状態)対策として、クラスタ起動時の最初にVIPcheckにより仮想IPアドレスへ通信できるか確認し、通信できる場合は非現用として起動し、両現用状態にならないようにする。
[root@node1 ~]# rpm -ivh --nodeps https://osdn.jp/dl/linux-ha/hb-extras-1.02-1.x86_64.rpm ← VIPcheckリソースエージェントを含むhb-extrasをインストール※64bitの場合
[root@node1 ~]# rpm -ivh --nodeps https://osdn.jp/dl/linux-ha/hb-extras-1.02-1.i386.rpm ← VIPcheckリソースエージェントを含むhb-extrasをインストール※32bitの場合
ln: シンボリックリンク `/usr/lib64/stonith/plugins/external/stonith-wrapper' の 作成に失敗しました: そのようなファイルやディレクトリはありません
警告: %post(hb-extras-1.02-1.x86_64) スクリプトの実行に失敗しました。終了ステー タス 1

※最新版のURLはダウンロードページで確認すること


[root@node1 ~]# mkdir /usr/lib/ocf/resource.d/myres ← VIPcheckリソースエージェント格納先ディレクトリ作成

[root@node1 ~]# cp /usr/lib64/heartbeat/hb-extras/VIPcheck /usr/lib/ocf/resource.d/myres/ ← VIPcheckリソースエージェントを上記ディレクトリへコピー
※VIPcheckリソースエージェントインストールをnode2側でも実施

(2)VIPcheckリソースエージェント起動
[root@node1 ~]# pcs resource create vipcheck_res ocf:myres:VIPcheck target_ip=192.168.1.17 count=1 wait=10 --group apachegroup ← VIPcheckリソースエージェント起動

[root@node1 ~]# pcs property set stonith-enabled=false ← stonithを無効化

[root@node1 ~]# pcs property set no-quorum-policy=ignore ← 2ノード構成のためquorumを無効化

(3)仮想IPアドレス設定
[root@node1 ~]# pcs resource create VirtualIP IPaddr2 ip=192.168.1.17 cidr_netmask=24 op monitor interval=30s --group apachegroup ← 仮想IPアドレス設定
Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')

[root@node1 ~]# pcs resource show ← リソース確認(node1側)
 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node1 ← VIPcheckがnode1側で起動している
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node1 ← 仮想IPアドレスがnode1側で起動している

[root@node2 ~]# pcs resource show ← リソース確認(node2側)
 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node1 ← VIPcheckがnode1側で起動している
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node1 ← 仮想IPアドレスがnode1側で起動している



■仮想IPアドレス確認

(1)クラスタ確認
[root@node1 ~]# ping -c 1 192.168.1.17 ← 仮想IPアドレス通信確認(node1側)
PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data.
64 bytes from 192.168.1.13: icmp_seq=1 ttl=64 time=0.071 ms ← 通信成功

--- 192.168.1.13 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.071/0.071/0.071/0.000 ms

[root@node2 ~]#  ping -c 1 192.168.1.17 ← 仮想IPアドレス通信確認(node2側)
PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data.
64 bytes from 192.168.1.13: icmp_seq=1 ttl=64 time=1.38 ms ← 通信成功

--- 192.168.1.13 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 1.388/1.388/1.388/0.000 ms

(2)フェイルオーバー
[root@node1 ~]# halt ← node1(現用側)システム停止

[root@node2 ~]# pcs status ← クラスタ状態確認
Cluster name: mycluster
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Thu Dec 14 11:11:35 2017
Last change: Thu Dec 14 10:59:51 2017 by root via cibadmin on node1

2 nodes configured
2 resources configured

Online: [ node2 ]
OFFLINE: [ node1 ] ← node1がオフライン状態になった

Full list of resources:

 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node2 ← リソースがnode2側に移動
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node2 ← リソースがnode2側に移動

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

[root@node2 ~]# ping -c 1 192.168.1.17 ← 仮想IPアドレス通信確認
PING 192.168.1.17 (192.168.1.17) 56(84) bytes of data.
64 bytes from 192.168.1.17: icmp_seq=1 ttl=64 time=0.041 ms ← 通信成功

--- 192.168.1.17 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.041/0.041/0.041/0.000 ms

(3)フェイルバック
node1起動

[root@node1 ~]# pcs status ← クラスタ状態確認
Cluster name: mycluster
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Thu Dec 14 11:14:42 2017
Last change: Thu Dec 14 10:59:51 2017 by root via cibadmin on node1

2 nodes configured
2 resources configured

Online: [ node1 node2 ] ← node1がオンライン状態になった

Full list of resources:

 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node2 ← リソースはnode2側のまま
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node2 ← リソースはnode2側のまま

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

[root@node2 ~]# pcs cluster standby node2 ← node2側をスタンバイ(非現用)状態へ切替

[root@node1 ~]# pcs status ← クラスタ状態確認
Cluster name: mycluster
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Thu Dec 14 11:16:25 2017
Last change: Thu Dec 14 11:16:17 2017 by root via cibadmin on node2

2 nodes configured
2 resources configured

Node node2: standby ← node2がスタンバイ(非現用)状態になった
Online: [ node1 ]

Full list of resources:

 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node1 ← リソースがnode1側に移動
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node1 ← リソースがnode1側に移動

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

[root@node2 ~]# pcs cluster unstandby node2 ← node2側のスタンバイ(非現用)状態を解除

[root@node1 ~]# pcs status ← クラスタ状態確認
Cluster name: mycluster
Stack: corosync
Current DC: node2 (version 1.1.16-12.el7_4.5-94ff4df) - partition with quorum
Last updated: Thu Dec 14 11:16:59 2017
Last change: Thu Dec 14 11:16:49 2017 by root via cibadmin on node2

2 nodes configured
2 resources configured

Online: [ node1 node2 ] ← node2がオンライン状態になった

Full list of resources:

 Resource Group: apachegroup
     vipcheck_res       (ocf::myres:VIPcheck):  Started node1 ← リソースはnode1側のまま
     VirtualIP  (ocf::heartbeat:IPaddr2):       Started node1 ← リソースはnode1側のまま

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

[root@node1 ~]# ping -c 1 192.168.1.17 ← 仮想IPアドレス通信確認(node1側)
PING 192.168.1.17 (192.168.1.17) 56(84) bytes of data.
64 bytes from 192.168.1.17: icmp_seq=1 ttl=64 time=0.042 ms ← 通信成功

--- 192.168.1.17 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.042/0.042/0.042/0.000 ms

[root@node2 ~]# ping -c 1 192.168.1.17 ← 仮想IPアドレス通信確認(node2側)
PING 192.168.1.17 (192.168.1.17) 56(84) bytes of data.
64 bytes from 192.168.1.17: icmp_seq=1 ttl=64 time=0.318 ms ← 通信成功

--- 192.168.1.17 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.318/0.318/0.318/0.000 ms


■関連コンテンツ




▲このページのトップへ戻る

ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします