[pgsql-jp: 34005] pgpoolのmasterデータベース停止時の動作について(pgpool-2.0.9)

Yoichi ISOZAKI iso @ mindgame.net
2004年 9月 19日 (日) 18:33:51 JST


石井さん、皆さん、はじめまして。
磯崎と申します。
初めてメールを送らせていただきます。
いつもROMばかりで恐縮です。

この度実際の業務システムでの使用を前提として、
pgpoolを使用したレプリケーション機能の動作確認を行っております。
簡単な内容ではありますが、幾つかの障害ケースを人為的に発生させ、
pgpool経由で接続している際にどのようなエラーが発生するのか
パターンを洗い出しておりました。
その際に、pgpoolがSQL文やpsqlコマンドに対して無反応になってしまう
現象が発生したため、そのことをご報告致します。

本MLの過去のメールの中で、今年7月上旬の[pgsql-jp: 33449]から始まる
一連のスレッドにおいてケビン シュワンツ氏が報告された件と
現象がほぼ同じようです。

以下、私の手元の環境構成と再現手順を列記します。

◎master側サーバー構成
  Red Hat Enterprise Linux 3.0 ES
  PostgreSQL 7.4.5 (本家RPM公開版)
  pgpool 2.0.9 (tarball)

◎secondary側サーバー構成
  Red Hat Linux 9
  PostgreSQL 7.4.5 (本家RPM公開版)

◎主な設定変更点
  ・pgpoolからmaster側PostgreSQLへはUNIXドメインソケット経由で、
    secondary側PostgreSQLへはTCP/IP経由で接続しています。
  ・master/secondaryともにPostgreSQLのポート番号を5433へ変更しています。  

◎pgpool.conf
  pgpool.conf.sampleから変更している設定項目は以下のとおりです。
------------------------------------------------------------
allow_inet_domain_socket = true
port = 5432
backend_port = 5433
secondary_backend_host_name = 'nnn.nnn.nnn.nnn'
secondary_backend_port = 5433
replication_mode = true
------------------------------------------------------------

◎再現手順
1. masterおよびsecondaryのPostgreSQLを起動する。
     # service postgresql start

2. pgpoolを起動する。
     $ pgpool -d -n

3. psqlからpgpool経由でPostgreSQLに接続する。
     $ psql -U hogehoge

4. psqlより一回以上SQL文やpsqlコマンドを実行する。

5. psqlを終了する。

6. master側のPostgreSQLを停止する。
     # service postgresql stop

7. 再度psqlからpgpool経由でPostgreSQLに接続する。
   この時点ではpgpoolはまだmaster側の停止を検知しておらず(?)
   エラーが発生しないため、psqlのプロンプトまで正常に表示されます。

8. psqlよりSQL文やpsqlコマンドを実行する。
   ※pgpoolからの応答がなくなり、Ctrl+Cによるキャンセルもできなくなる。
     show pool_statusコマンドの場合も応答がありません。
     他から別にpsqlで接続を行うと、応答なしの状態が解消され、
     接続に関するエラーメッセージが表示されます。

もし時間的に余裕があれば自分でソースの解読を行えればと思いますが、
C言語ブランクありの私ですとえらく時間が掛かりそうです。
申し訳ありません。

以上です。

Yo[u]ichi ISOZAKI
E-Mail:iso @ mindgame.net




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