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 ### # 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止めてからじゃないと危険だね。
再起動したまま帰ってこないくて、最悪、オンコールリブートになりそうな。