この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
HeartbeatとPacemakerをインストールする
まずはインストールに必要なライブラリを事前にインストールします。
$ sudo vi /etc/yum.repos.d/CentOS-Base.repo
[centos-base]
name=CentOS-6 - Base
mirrorlist=http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os
enabled=0
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
$ sudo yum --enablerepo=centos-base install openhpi-libs.x86_64 -y
次にレポジトリとrpmのセットをダウンロードします。
$ sudo wget http://keihanna.dl.sourceforge.jp/linux-ha/56470/pacemaker-1.0.12-1.2.el6.x86_64.repo.tar.gz
$ sudo tar zxvf pacemaker-1.0.12-1.2.el6.x86_64.repo.tar.gz
$ sudo mv pacemaker-1.0.12-1.2.el6.x86_64.repo /tmp
$ cd /tmp/pacemaker-1.0.12-1.2.el6.x86_64.repo/
そしてインストール!
$ sudo yum -c pacemaker.repo install pacemaker.x86_64 heartbeat.x86_64 -y
...
Installed:
heartbeat.x86_64 0:3.0.5-1.1.el6 pacemaker.x86_64 0:1.0.12-1.el6
Dependency Installed:
OpenIPMI-libs.x86_64 0:2.0.16-12.7.amzn1 cluster-glue.x86_64 0:1.0.9-1.el6
cluster-glue-libs.x86_64 0:1.0.9-1.el6 gnutls.x86_64 0:2.8.5-4.6.amzn1
heartbeat-libs.x86_64 0:3.0.5-1.1.el6 libtasn1.x86_64 0:2.3-3.4.amzn1
libxslt.x86_64 0:1.1.26-2.6.amzn1 pacemaker-libs.x86_64 0:1.0.12-1.el6
resource-agents.x86_64 0:3.9.3-1.el6
Complete!
サクっと終わりました。
Heartbeatの設定をする
Heartbeatの設定ファイルは、/usr/share/doc/heartbeat-3.0.5にサンプルがありますのでコピーして編集します。
$ cd /usr/share/doc/heartbeat-3.0.5
$ sudo cp ha.cf /etc/ha.d/ha.cf
$ sudo cp haresources /etc/ha.d/haresources
$ sudo cp authkeys /etc/ha.d/authkeys
$ sudo cp apphbd.cf /etc/logd.cf
ha.cfに基本的な設定を書きます。ucastには相手方(スレーブ)のIPアドレスを書きます。また、ノードとしてホスト名を列挙します。死活監視をするためのポート番号として694を指定していますので、AWS Management Console等でセキュリティグループの設定を忘れずに。
$ cd /etc/ha.d/
$ sudo vi ha.cf
crm off
use_logd yes
keepalive 1
deadtime 30
initdead 60
udpport 694
auto_failback off
ucast eth0 10.146.101.XXX
logfacility none
node ip-10-150-179-YYY
node ip-10-146-101-XXX
authkeysは、rootユーザのみ修正できるようにchmodして編集します。
$ sudo vi authkeys
auth 1
1 crc
$ sudo chmod 600 authkeys
haresourcesは、リソースの設定をします。DRBDと連動する部分を書きます。自身のホスト名の後にリソースをスペース区切りで列挙してください。リソースの値は以前行ったDRBDに合わせてください。
ip-10-150-179-YYY drbddisk::drbd_res0 Filesystem::/dev/drbd0::/data::xfs
logd.cfは、ログに関する設定を記述します。
$ cd /etc/
$ sudo vi logd.cf
debug_level 0
debugfile /var/log/apphbd.debug
logfile /var/log/apphbd.log
サービスを起動を行ってみましょう。
$ sudo service logd start
Starting ha_logd: ok
$ sudo service heartbeat start
Starting High-Availability services: Done.
$ sudo service heartbeat status
heartbeat OK [pid 28720 et al] is running on ip-10-150-179-YYY [ip-10-150-179-YYY]...
うまく設定できたらしく起動してもエラーがでませんね。次に同じようにもう1台のインスタンスにインストールと設定をします。
Heartbeatを落としたら
さて、Heartbeatのプロセスを落としたときに、DRBDのマスター側はスレイブに切り替わるか見てみましょう。まずは、マスターとなるサーバーでDRBDをプライマリとして起動しておきます。また、マスターとスレーブの両方でHeartbeatも起動しておいてください。
フェイルオーバー前のマスター側
$ sudo service heartbeat status
heartbeat OK [pid 31987 et al] is running on ip-10-150-179-YYY [ip-10-150-179-YYY]...
$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6
m:res cs ro ds p mounted fstype
0:drbd_res0 Connected Primary/Secondary UpToDate/UpToDate C /data xfs
フェイルオーバー前のスレーブ側
$ sudo service heartbeat status
heartbeat OK [pid 1189 et al] is running on ip-10-146-101-XXX [ip-10-146-101-XXX]...
$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6
m:res cs ro ds p mounted fstype
0:drbd_res0 Connected Secondary/Primary UpToDate/UpToDate C
そして、マスター側でHeartbeatを止めてみましょう!。スレーブからマスターに戻れるようにHeartbeatの起動は忘れずに。
フェイルオーバー後のマスター側
$ sudo service heartbeat stop
Stopping High-Availability services: Done.
$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6
m:res cs ro ds p mounted fstype
0:drbd_res0 Connected Secondary/Primary UpToDate/UpToDate C
$ sudo service heartbeat start
Starting High-Availability services: Done.
おお、スレーブのDRBDが昇格してプライマリとなっていますね。続けてスレーブ側で確認してみましょう。
フェイルオーバー後のスレーブ側
$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6
m:res cs ro ds p mounted fstype
0:drbd_res0 Connected Primary/Secondary UpToDate/UpToDate C /data xfs
ちゃんと昇格していることを確認できました。ちなみに、リソースはHeartbeatが勝手に起動するのでchkconfigをOFFにしておくようにとのこと。んで、HeartbeatはONにしておきましょう。
$ sudo chkconfig drbd off
$ sudo chkconfig heartbeat on
まとめ
今回は、Heartbeatを用いて何か問題があったときにマスターからスレーブに切り替える手法を学びました。特に、DRBDを組み合わせることで、同期レプリケーションされたデータを直ぐに使う事ができるようになり、より実務で使えそうになってきました。次回は、MySQLやPostgreSQLで試してみたいと思います。今日から君もオレオレRDSを作ろう!
参考資料
今回のお題 - heartbeat でいろんなサービスを冗長化する
DRBDとHeartbeat [2] インストールから起動まで