[pgsql-jp: 31767] Re: PGClusterのリカバリ機能について

YOSHIDA Toshikazu yoshida.toshikazu @ nttcom.co.jp
2003年 12月 11日 (木) 20:10:46 JST


吉田です。


この後再び原因をさぐっていたところ、
(5)で投入していたコマンドがまずかったみたいです。

更新系を含むコマンドと書きましたが、
pgbench -h ロードバランサ -i -s 1 BenchDB
を投げていました。

このコマンドの中には、CREATE TABLEも含まれています。
既にTABLEがある状態でしたので、これがエラーの引き金に
なったのでは、と思います。

ちなみに以下のコマンドを投入したら、正常にレプリケートされました。
psql -h ロードバランサ BenchDB
SELECT * from tellers where tid=2;
BEGIN ;
UPDATE tellers SET tbalance =9999 where tid=2;
commit;

お騒がせしました。


P.S.
通常の状態では
pgbench -h ロードバランサ -i -s 1 BenchDB
を投げても、DBが切り離されたりといった問題は起きません。

何故DBの復旧後にこのコマンドを投げるとNGになるのかが
少々疑問ではあります。


以上。



On Thu, 11 Dec 2003 14:54:14 +0900
YOSHIDA Toshikazu <yoshida.toshikazu @ nttcom.co.jp> wrote:

> はじめまして。吉田と申します。
> 
> 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 メーリングリストの案内