[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 メーリングリストの案内