[pgsql-jp: 31765] PGClusterのリカバリ機能について
YOSHIDA Toshikazu
yoshida.toshikazu @ nttcom.co.jp
2003年 12月 11日 (木) 14:54:14 JST
はじめまして。吉田と申します。
PGClusterのリカバリ機能に関して質問させて下さい。
#長文で真に申し訳ございませんm(__)m
現在下記構成にて使用中です。
・PGCluster1.0.5
・クラスタDB 2台
・レプリケーションサーバ 1台
・ロードバランサ 1台
・サーバの使用OS:RedHat7.2J
http://www.csra.co.jp/~mitani/jpug/pgcluster/rc2/index.html
このページを参考に環境構築を行い、正常に稼動
(レプリケーション機能やバランシング機能も)している状態です。
ちなみにrsyncも正常に動きます。
#rsyncはcluster.conf中のRsync_Optionを空白にし、
#sslを使用しない設定にしております。
そこで、2台目のクラスタDBが異常な状態にしたときに、
・自動的に切り離しをするか
・正常に復旧するか
の2点を試していたところ、復旧処理が正常に行われませんでした。
行った手順は以下の通りです。
---------------------------------------------------------------
(1)
・レプリケーションサーバ起動
/usr/local/pgsql/bin/pgreplicate -v
・クラスタDB起動(1台目)
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -o "-i"
・クラスタDB起動(2台目)
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -o "-i"
・ロードバランサ起動
/usr/local/pgsql/bin/pglb -vn
(2)
正常に起動している事を確認し、クラスタDB(2台目)の
プロセスをkillする。
postgres 32541 1 0 13:59 pts/0 00:00:00 /usr/local/pgsql/bin/postmaster
postgres 32543 32541 0 13:59 pts/0 00:00:00 postgres: stats buffer process
postgres 32545 32541 0 13:59 pts/0 00:00:00 /usr/local/pgsql/bin/postmaster
postgres 32546 32543 0 13:59 pts/0 00:00:00 postgres: stats collector proces
$kill -9 32541 32545
その後、ロードバランサにSQLコマンド等を投げてやると、レプリケーションサーバのログに
エラーがセットされ、切り離される。
pgreplicate.log
Wed Dec 10 17:55:57 2003 port(5432) host:クラスタDB(2台目)error
(3)
クラスタDB(2台目)の「postmaster.pid」ファイルを削除し、
正常に起動できる状態にする。
(4)
クラスタDB(2台目)から切り戻しコマンド投入。
以下はそのときのログです。
$/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data/ -o "-i -R"
postmaster successfully started
$ps -ef|grep postg (プロセスを確認してみました。)
postgres 28022 1 0 17:47 pts/0 00:00:00 /usr/local/pgsql/bin/postmaster
postgres 28023 28022 2 17:47 pts/0 00:00:00 rsync -r -z --delete クラスタDB(2台目)
postgres 28024 28023 0 17:47 pts/0 00:00:00 rsh クラスタDB(2台目)
postgres 28025 28024 0 17:47 pts/0 00:00:00 rsh クラスタDB(2台目)
postgres 28026 28023 11 17:47 pts/0 00:00:00 rsync -r -z --delete クラスタDB(2台目)
LOG: database system was interrupted at 2003-12-10 18:09:21 JST
LOG: checkpoint record is at 0/4C2EBF0
LOG: redo record is at 0/4C2EBF0; undo record is at 0/0; shutdown FALSE
LOG: next transaction id: 804; next oid: 320081
LOG: database system was not properly shut down; automatic recovery in progress
LOG: ReadRecord: record with zero length at 0/4C2EC30
LOG: redo is not required
LOG: recycled transaction log file 0000000000000003
LOG: database system is ready
レプリケーションサーバのログは、、
Wed Dec 10 17:49:55 2003 port(5432) host:クラスタDB(2台目) error
Wed Dec 10 17:51:50 2003 port(5432) host:クラスタDB(2台目) initiarize
Wed Dec 10 17:51:50 2003 port(5432) host:クラスタDB(2台目) initiarize
Wed Dec 10 17:53:39 2003 port(5432) host:クラスタDB(2台目) start use
Wed Dec 10 17:53:39 2003 port(5432) host:クラスタDB(2台目) start use
上記のログを見ると正常にrsyncが行われ、クラスタDBも切り戻されたと判断できます。
(5)
その後ロードバランサへテーブルの内容を書き換えるような
更新系のSQLコマンドを投げると再びクラスタDB(2台目)が
切り離されてしまう。
レプリケーションサーバのログ
Wed Dec 10 17:55:57 2003 port(5432) host:クラスタDB(2台目) error
クラスタDB(2台目)へは
特にログがありませんでした。
--------------------------------------------------------
この状態を見ると、rsyncは正常に終了して、クラスタDBが再起動
するが、ロードバランサが正常に切り戻し処理を行えていない
ような気がします。何らかの手順が抜けているのでしょうか?
どうか、ご教授お願い致します。
pgsql-jp メーリングリストの案内