[pgpool-general-jp: 1057] Re: pgpoolの無応答(無限ループ?)について

Tatsuo Ishii ishii @ sraoss.co.jp
2012年 5月 11日 (金) 17:13:48 JST


石井です。

> はじめまして。
> 丸吉と申します。
> 
> pgpool-II 3.0.5を利用しており、2回ほどpgpoolが無応答になる
> 現象が発生しました。
> 
> 
> ●環境(ざっくりで申し訳ございませんが)
> Red Hat Enterprise Linux Server release 5.7 (Tikanga)
> PostgreSQL 9.0.6
> 2台でレプリケーション
> 
> 
> 実際の環境は、私が直接触ることができず、そして現象が発生した時は
> 復旧優先のため、pgpoolを取り急ぎ再起動しています。
> 
> ただし、1つだけ停止できないプロセスがあり、
> psの結果(?)かどうか定かではありませんが、「pgpool: accept」の
> プロセスが残っていて、最終的に kill -9 で強制終了しました。
> 
> 3.0.6のアナウンスで無限ループの問題が修正されておりますが、
> 現象が発生したときにはpostgresql.confを再読み込みはしておりません。
> ---------------------------------------------------------------------------
> * バグ修正
> ---------------------------------------------------------------------------
> 
> - 以下のスレッドで報告されている無限ループを修正しました。
>   http://www.pgpool.net/pipermail/pgpool-general/2011-December/000099.html
> 
>   プライマリからから受け取ったバッファが空である一方で、スタンバイのどれか
>   が受け取ったバッファが空でないとき、pgpool へのパケットが送られてしまう、
>   という可能性が考慮されていませんでした。
>   この事象は例えば、postgresql.conf を再読み込みしたときに発生することがあ
>   りました。
>   この修正では、スタンバイからしか受け取れなかったバッファは無視するように
>   しました。(Tatsuo Ishii)
> 
> ===========================================================================
> 
> 再読み込み以外にはどのようなパターンで起こりえるのか、教えていただきたいです。
> (プライマリからから受け取ったバッファが空である一方で、スタンバイのどれか
>   が受け取ったバッファが空でないとき、というのがどのような時に発生するのか…)

このあたりですね(PostgreSQL 9.1のマニュアルより)。

-------------------------------------------------------------------
46.2.6. 非同期操作

バックエンドが、フロントエンドのコマンドストリームで特に依頼されていな
いメッセージを送信する場合が複数あります。フロントエンドは、問い合わせ
作業を行っていない時であっても常に、これらのメッセージを扱う準備をしな
ければなりません。少なくとも、問い合わせの応答の読み込みを始める前にこ
れらを検査すべきです。
-------------------------------------------------------------------
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


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