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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です