この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
MongoDBとNagiosをPacemakerで起動制御出来るようにした時のメモです。
ApacheやMySQL等は専用のスクリプトが用意されていますが、MongoDBとNagiosのは無くて、作るのも労力なので、汎用的に使えそうなanythingで代用しました。
●Pacemakerリソース追加
既にyum updateしてcrmコマンドが無くなっているので、pcsを使います。
crmの方は、yum updateしたらcrmコマンドが無くなった!(pcsコマンド対照表)も参考にしてください。
・MongoDBの場合
Nagios Pluginのcheck_tcpを使って、死活監視をしています。
# pcs resource create mongodb ocf:heartbeat:anything params \
user="mongodb" \
binfile="/usr/bin/mongod" \
cmdline_options="-f /etc/mongodb.conf > /dev/null 2>&1" \
pidfile="/var/run/mongodb/mongodb.pid" \
monitor_hook="/usr/lib64/nagios/plugins/check_tcp -H localhost -p 27017" \
op monitor interval="20s"
# pcs resource group add nfs-group mongodb
・Nagiosの場合
Nagiosはサービスに影響がないので、落ちてもフェールオーバしないように死活監視はしてません。
Nagios自体は外部監視するのが良いと思います。
# pcs resource create nagios ocf:heartbeat:anything params \
user="nagios" \
binfile="/usr/bin/nagios" \
cmdline_options="-d /etc/nagios/nagios.cfg" \
pidfile="/var/nagios/nagios.pid"
# pcs resource group add nfs-group nagios
●anythingカスタマイズ
上記で終わりと思いきや、実際には動きません。
理由はanythingで作ったPIDファイルをMongoDBやNagios側でも作成して上書きしてしまう為です。
anythingが使いたいPIDではなくなってしまう。。。
別のファイルを指定したりもしましたが、上手く動かず断念!
なので、少し細工します。但し、元々の挙動でも動くように。
# cd /usr/lib/ocf/resource.d/heartbeat
# cp -a anything anything,201309
# vi anything
### START 2013/09 taka ###
# eval $cmd > $pidfile
eval $cmd > $pidfile.tmp
sleep 1
if [ -e $pidfile ]; then
rm -f $pidfile.tmp
else
mv -f $pidfile.tmp $pidfile
fi
### END ###
●まとめ
これで無事、意図通り動くようになりました。
見ての通り、起動ユーザやコマンド(起動スクリプトを見れば解ります)と監視コマンドを用意すれば、MongoDBやNagios以外にも利用出来ます。
●追記(2013/11/04)
yum updateしたらanythingが無くなり、Corosyncが停止出来なくなりました。(crmに続き、またか〜)
幸いバックファイル(anything,201309)が残っていたので、そいつをベースに再度カスタマイズを施し修復!
新規構築等で最初からない場合は、下記等から入手してください。
https://github.com/ClusterLabs/resource-agents/blob/master/heartbeat/anything
そもそもyum updateする時はCorosync止めてからじゃないと危険だね。
再起動したまま帰ってこないくて、最悪、オンコールリブートになりそうな。