Pacemaker/Heartbeat/Corosync は Linux をクラスタ化する際に使用されるツールです。例えば 2台のサーバ(ActiveとStandby)を起動しておき、Activeサーバがダウンした場合に、自動的にStandbyサーバに切り替えることにより耐故障性を高めます。
ツール | 説明 |
---|---|
Heartbeat | Linux-HA グループによって提供される Linux 用のクラスタソフト。クラスタ内のノードを監視し、障害発生時に VIP などのリソースを他のノードに移動させる機能を持ちます。監視機能と、クラスタリソース管理機能(CRM)から構成されていましたが、V3 からは CRM が Pacemaker として独立しました。 |
Corosync | Heartbeat と同様の監視機能を持つ OSS です。RHEL6/CentOS6 では Heartbeat+Pacemaker が一般的でしたが、RHEL7/CentOS7 では Corosync+Pacemaker の組み合わせがよく利用されているようです。 |
Pacemaker | Heartbeat+Pacemaner または Corosync+Pacemaker の組み合わせで使用します。Heartbeat のクラスタリソース管理(CRM)が独立強化されたもので、Corosync など他の監視ツールから起動され、リソースの制御を行います。 |
pcs | Pacemaker Configuration Tool。Corosync+Pacemaker を操作するコマンドラインツールです。 |
以下では、2台の CentOS 7.2 (centos7a, centos7b) に Corosync+Pacemaker の環境を構築する手順を示します。
centos7a で、IPv6 を無効にし、corosync, pacemaker, pcs をインストールし、pcsd を起動後、/etc/hosts にホスト情報を登録します。
centos7a# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf centos7a# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf centos7a# systemctl restart network centos7a# yum -y install corosync pacemaker resource-agents pcs fence-agents-all centos7a# passwd hacluster centos7a# systemctl enable pcsd centos7a# systemctl start pcsd centos7a# vi /etc/hosts 192.168.56.110 centos7a 192.168.56.111 centos7b
centos7b にも同様のインストールを行います。
centos7b# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf centos7b# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf centos7b# systemctl restart network centos7b# yum -y install corosync pacemaker resource-agents pcs fence-agents-all centos7b# passwd hacluster centos7b# systemctl enable pcsd centos7b# systemctl start pcsd centos7b# vi /etc/hosts 192.168.56.110 centos7a 192.168.56.111 centos7b
以降の操作は、centos7a でのみ行います。今回は STONITH(不安定ノードの強制停止/再起動機能) は使用しない設定にしています。
centos7a# pcs cluster auth centos7a centos7b -u hacluster centos7a# pcs cluster setup --name testcluster centos7a centos7b centos7a# pcs cluster start --all centos7a# pcs property set stonith-enabled=false centos7a# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.56.112 cidr_netmask=24 op monitor interval=10s
クラスタの状態を表示します。testcluster というクラスタの中に、2つのノード(centos7a, centos7b)と、1つのリソース(VIP:192.168.56.112) が定義されています。centos7a, centos7b は共にオンラインで、VIP は centos7a で動作しています。
centos7a# pcs status Cluster name: testcluster Last updated: Sun Jun 12 01:58:00 2016 Last change: Sun Jun 12 01:39:58 2016 by root via cibadmin on centos7a Stack: corosync Current DC: centos7a (version 1.1.13-10.el7_2.2-44eb2dd) - partition with quorum 2 nodes and 1 resource configured Online: [ centos7a centos7b ] Full list of resources: VIP (ocf::heartbeat:IPaddr2): Started centos7a PCSD Status: centos7a: Online centos7b: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
アドレス情報を見ると、VIP:192.168.56.112 が enp0s8 のセカンダリIPとして設定されています。
centos7a# ip addr | grep "inet " inet 127.0.0.1/8 scope host lo inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 inet 192.168.56.110/24 brd 192.168.56.255 scope global dynamic enp0s8 inet 192.168.56.112/24 brd 192.168.56.255 scope global secondary enp0s8
centos7a をシャットダウンすると、VIP:192.168.56.112 が centos7b にフェイルオーバーします。
centos7b# ip addr | grep "inet " inet 127.0.0.1/8 scope host lo inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 inet 192.168.56.110/24 brd 192.168.56.255 scope global dynamic enp0s8 inet 192.168.56.112/24 brd 192.168.56.255 scope global secondary enp0s8
下記に運用で使用する主な pcs コマンドを示します。
クラスタの状態を見る # pcs status すべてのノードを起動する # pcs cluster start --all 特定ノードを起動する # pcs cluster start centos7a 特定ノードを停止する # pcs cluster stop centos7a 特定ノードをスタンバイにする # pcs cluster standby centos7a 特定ノードをスタンバイから復帰する # pcs cluster unstandby centos7a リソース(例:VIP)を特定ノードに移動する # pcs resource move VIP centos7b