[pgpool-general-jp: 515] Re: recovery_timeoutについて

Tatsuo Ishii ishii @ sraoss.co.jp
2008年 12月 30日 (火) 20:57:48 JST


石井です.

> はじめまして。荒川と申します。
> Powergres Plus 5とpgpool-IIを利用してレプリケーションをしています。

PowerGres Plusですか?pgpool-IIでのオンラインリカバリには問題があるか
も知れません(うまくいくかもしれませんが,私は未確認です).ご契約のサ
ポート窓口を通じてお問い合わせ頂いた方が良いと思います.

以下,通常のPostgreSQL(もしくはPowerGres PlusではないPowerGres)を前提
としてお答えします.また,最新版のpgpool-II 2.1をお使いであると想定し
ます.

> オンラインリカバリをpgpoolAdmin経由で使用しようとしていますが、エラー終了して
> しまいます。
> 
> アプリケーション側で接続プーリングを行なっており、切断がうまく行かず
> 失敗してしまうのではないかという想定で現在調査中です。

アプリケーションで接続プーリングを行なっていると,pgpoolから見ていつま
でたっても接続が終了しないので,オンラインリカバリは失敗します.

> データの同期はrsyncを使用して行なおうとしています。PGDATA領域をごっそり同期しています。
> ファーストステージのスクリプトに関しては最後まで実行されていることを確認しましたが、その後の動作がよく見えない状況です。
> 
> うまくいったり、いかなかったり。
> という状況が続いており、タイムアウト時間を疑っています。

タイムアウトの場合は,pgpool-IIのエラーログに何か出力されるはずです.

> そこで、設定ファイル上の
> child_life_time
>> recovery_timeout
> 
> の因果関係について教えて頂きたく投稿させて頂きました。
> 現在child_life_timeが`300`
> recovery_timeoutが`100`で設定されています。
> 
> (疑問点1)
> recovery_timeoutとはオンラインリカバリ中どこからどこまでの間の期間に
> 関するタイムアウト時間でしょうか?

2つあります.

一つはセカンドステージに入る前の,クライアントの接続終了待ち時間です.

もう一つは,セカンドステージの最後にリカバリが終了したpostmasterの起動
完了を待つ時間です.

> child_life_timeより値を大きくする必要があるのでしょうか?

ありません.child_life_timeは,クライアントからの接続が切断されないと,
カウントを開始しないからです.

接続を終了していないクライアントのアイドル時間によるタイムアウトを設定
したい場合は,client_idle_limitを使用してください.その際は,

client_idle_limit < recovery_timeout

になるようにしてください.

> (疑問点2)
> recovery_timeoutに0を追記した場合、
> タイムアウトしない。のでしょうか。

即座にタイムアウトします.
--
Tatsuo Ishii
SRA OSS, Inc. Japan


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