T

pgpool-IIのオンラインリカバリではrsyncに要注意

pgpool-IIでレプリケーションをしていて縮退運転に入ったとき、オンラインリカバリを実行してrsyncでデータディレクトリを転送するときにちょっとしたコツがいる。

最近、どうもリカバリーに失敗したりすぐに縮退運転に入ってしまうので困っていたのだが、原因はどうも継承を利用しているテーブルにあることがわかった。PostgreSQLの継承はとても便利な機能で、例えばデータがたまる一方のログ用テーブルなどを、日付などで分けて親テーブルを継承した別テーブルに入れてしまうことができて、しかもデータの検索は親テーブルにクエリを投げるだけで実現できるのだが、バッチ処理で作成していた継承テーブルの親子関係がリカバリを実行すると壊れてしまうのだ。

原因は、rsyncされるPostgreSQLのデータ領域の継承関係のデータが格納されているファイルはレプリケーションされた二つのサーバの両方で最終更新日時とファイルサイズが同じで中身だけ違うので、転送を「rsync -avz」などで実行してもリモートサーバ側では更新の対象にならず、スルーされていたからだ。rsyncにはchecksumを利用する「c」オプションがあるので、そちらを利用しないと継承関係のデータが転送されず、結果として上のようなことになる。

Posted by on 7月 16, 2009 in pgpool, PostgreSQL

コメントを残す