[pgsql-jp: 38012] Re: pgpool 3.2 released

Yoshiyuki Asaba y-asaba @ sraoss.co.jp
2007年 2月 13日 (火) 15:44:46 JST


浅羽です。

From: TAKAO Kouji <kouji @ netlab.jp>
Subject: [pgsql-jp: 38009] Re: pgpool 3.2 released
Date: Tue, 13 Feb 2007 14:29:23 +0900

> > 変更内容は次の通りです(NEWS から引用).
> (snip)
> > o コネクションプールを再利用するときに,ソケットがクローズされて
> >   いたら再度コネクションを開くようにした(Yoshiyuki)
> 
> こちらについて、詳しい情報をいただけないでしょうか。
> 「コネクションプールを再利用するとき」というのは、例えばどのような時な
> のでしょうか。
> また、3.2で対応されたということは、3.2まではソケットがクローズされてい
> たときに再度コネクションを開いていなかったということですよね。3.2までだ
> と、コネクションプールを再利用するとき、ソケットがクローズされていた場
> 合はどのような挙動になるのでしょうか。

例えばコネクションプールを有効にしていて、別のミドルウェアを使って
PostgreSQL をフェイルオーバ(もしくはスイッチオーバ)させた場合に、
pgpool <--> PostgreSQL の接続が一度閉じてしまいます。

この状態でクライアントが pgpool に接続にいくと、3.1.2 までは壊れたソケッ
トに対して write() を呼ぶため、以下のログを出力していました。

ERROR: pid 21730: pool_flush_it: write failed (Broken pipe) offset: 0 wlen: 16
LOG:   pid 21730: notice_backend_error: master: 1 fail over request from pid 21730

そこでクライアントが接続した場合にソケットが壊れていないかチェックし、
問題があれば pgpool が再接続するようしました。再接続してもダメだった場
合には異常と判断します。

以下の手順で試すことができます。

  1. pgpool 起動
  2. psql で pgpool に接続
  3. postmaster を fast shutdown する
  4. postmaster を再起動する
  5. psql で pgpool に接続

--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp



pgsql-jp メーリングリストの案内