Linuxのクラスタリングで利用されるPacemakerについてまとめました。インストールや設定、動作の確認はCentOS 7で実施していますので、Debian系(Ubuntuなど)ではインストール方法が異なります。
尚、SELinuxはdisabledに設定し、firewalldは停止してあります。
より実践的な内容については以下の記事で解説しています。
【Pacemaker+Corosync】Apacheクラスタを組んでフェイルオーバー/フェイルバックテストをおこなうタップできる目次
用語と役割
リソース
Pacemakerでクラスタ化する対象のアプリケーションやIPアドレスをリソースといいます。
リソースエージェント(RA)
Pacemakerはリソースエージョントを介してリソースを起動、停止、監視します。
Pacemakerは主系ノードで障害を検知すると従系ノードのリソースを起動します。
PacemakerとHeartbeat
Pacemakerの役割は、故障発生を検知して待機系にフェイルオーバーさせる事です。PacemakerはHeartbeat2の後継ソフトウェアで、Heartbeat2のリソース制御部分を切り出したものです。
Pacemakerは複数のコンポーネントの組み合わせの総称で、Pacemaker+CorosyncもしくはPacemaker+Heartbeart3を指します。
Corosync
CorosyncはOpenAISコミュニティによって開発されたクラスタソフトウェアのクラスタ制御部を切り出したものです。
インストール
業務でpacemakerをインストールする場合、どちらかの方法を採る事になるかと思います。
- yum を使ってネットワークインストールする
- Linux-HA Japan提供のローカルリポジトリ + yum を使ってインストールする
ここでは、Linux-HA Japanが提供するローカルリポジトリからインストールする方法を採用します。
パッケージダウンロード
CentOS 7(RHEL 7)向けのパッケージは以下のサイトからダウンロードします。
参考 Pacemaker-1.1系リポジトリパッケージ Linux-HA Japanインストール前の準備
Linux-HA Japanが提供するPacemakerとOS同梱のPacemakerを分けるためにCentOS-Base.repoのbaseとupdatesにexlude設定を追加します。
/etc/yum.repos.d/CentOS-Base.repo
exclude=pacemaker* corosync* resource-agents* crmsh* cluster-glue* libqb* fence-agents* pcs*
…
[updates]
exclude=pacemaker* corosync* resource-agents* crmsh* cluster-glue* libqb* fence-agents* pcs*
パッケージインストールする
2018年4月現在の最新パッケージは「pacemaker-repo-1.1.17-1.1」です。
# yum -y install pacemaker-repo-1.1.21-1.1.el7.x86_64.rpm
# yum -y install pacemaker-all
設定
環境
OSはCentOS 7.4を使用します。2台のサーバは192.168.0.0/24で接続しています。
基本設定としてPacemakerでVIPを設定します。
基本的なPacemakerの設定
クラスタ制御部の設定 – Corosync
サンプルの設定が /etc/corosync/corosync.conf.example にあるので /etc/corosync/corosync.conf にコピーして利用する事ができます。
最低限必要な設定は以下の通りです。
- totem
- logging
- nodelist
- quorum
node0とnode1でクラスタを組むにあたり、192.168.0.0/24のセグメントでクラスタ制御を行います。
totem { version: 2 crypto_cipher: none crypto_hash: none interface { ringnumber: 0 bindnetaddr: 192.168.0.0 mcastaddr: 239.255.1.1 mcastport: 5405 ttl: 1 } } logging { fileline: off to_stderr: no to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } quorum { provider: corosync_votequorum expected_votes: 2 two_node: 1 }
設定を行ったら、pacemakerを起動してみます。node0とnode1でpacemakerを起動します。
# systemctl start pacemaker
このコマンドでcorosyncも起動します。エラーが発生しなければ、ステータスを確認します。
Stack: corosync
Current DC: node0 (version 1.1.17-1.el7-b36b869) – partition with quorum
Last updated: Sun Apr 8 12:39:16 2018
Last change: Sun Apr 8 12:36:45 2018 by hacluster via crmd on node0
2 nodes configured
0 resources configured
Online: [ node0 node1 ]
No active resources
node0とnode1でクラスタが組めている事を確認できます。ただし、この時点ではリソースを設定していないため「0 resources configured」と表示されています。
リソースの設定 – IPaddr2
VIP(仮想IP)のリソースを追加して、node0とnode1でIPアドレスを共有させます。
node0でのみ設定を実行しています。
# crm crm(live)# configure crm(live)configure# primitive vip_192.168.0.203 ocf:heartbeat:IPaddr2 params ip="192.168.0.203" cidr_netmask="24" nic="ens33" crm(live)configure# property no-quorum-policy="ignore" stonith-enabled="false" crm(live)configure# node node0 crm(live)configure# node node1 crm(live)configure# commit crm(live)configure# crm(live)configure# show node 3232300745: node0 node 3232300746: node1 primitive vip_192.168.0.203 IPaddr2 params ip=192.168.0.203 cidr_netmask=24 nic=ens33 property cib-bootstrap-options: have-watchdog=false dc-version=1.1.17-1.el7-b36b869 cluster-infrastructure=corosync no-quorum-policy=ignore stonith-enabled=false crm(live)configure# crm(live)configure# exit bye #
設定が完了したらリソース状態を確認します。現在、node1がVIPを持っていることが分かります。
# crm_mon -A -1
Stack: corosync
Current DC: node1 (version 1.1.17-1.el7-b36b869) – partition with quorum
Last updated: Sun Apr 8 14:40:21 2018
Last change: Sun Apr 8 14:32:10 2018 by hacluster via crmd on node02 nodes configured
1 resource configuredOnline: [ node0 node1 ]Active resources:vip_192.168.0.203 (ocf::heartbeat:IPaddr2): Started node1Node Attributes:
* Node node0:
* Node node1:
#