CentOS5.3 + Red Hat Cluster + PostgreSQL + Slony-I でテイクオーバーをやってみた

前回まででSlony-I のテイクオーバー、フェイルオーバーの方法が分かったので、CentOS 5 のRed Hat Cluster と組み合わせて、冗長化を行ってみた。CentOS 5 で使えるフェンスデバイスを持っていないため、フェイルオーバーの方はまだ試していない。 あくまで両側が正常に動作している状態でのみ実施できるやり方である。

Slony-I を動かすためには、両側でPostgreSQL, slon を動かすことになるが、これらはRHCSに組み込んでもあまりメリットが無いので、(プロセスが個別にクラッシュした場合自動で再起動がかかるというメリットはあるが ... ) 基本的には、RHCSのサービスとしては登録しなくてもよいと思う。しかし、PostgreSQLのinitスクリプトがRHCSで利用できるようになっているかを確かめておきたかったので、一応これらも設定に組み込んだ。

PostgreSQLは両ノードで動いている必要があるので、各ノードだけをメンバーとしたフェイルオーバードメインを作成し、そのドメインだけでPostgreSQLのサービスを起動する必要がある。 (設定にはsystem-config-cluster を使用した。 ) 基本的にはサービスとしては、スクリプト: /etc/init.d/postgresql を使用したのだが、 /etc/init.d/ のスクリプトは常にRHCSで使えるようになっているわけではない。筆者が試したところ、postgresqlスクリプトではステータス確認や、リソース移動などは問題なく行えるのだが、手動でPostgreSQLをkillした場合、正常に再起動が行われないという事象が生じた。

RHCSは、 status コマンドでサービスの停止を検出した後、 stop, start の順でコマンドを実行しサービスを復旧するのだが、/var/log/messages を確認したところ、 stop コマンドがnon-zero の値を返しており、stop が正常に終了しなかったとみなされていた。 これは、プロセスが無い状態で /etc/init.d/postgresql stop を打った際に$? がnon-zero になる事象に対応しており、この時に 0 を返すようにスクリプトを修正することで、 PostgreSQLをRHCSに組み込むことができた。。


長くなりそうなので、続きは次回。。