Amazon LinuxでDRBDとHeartbeat 3.0.5を連動させる
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] インストールから起動まで