pgpoolのレプリケーションや負荷分散の動作や設定を検証のため、わざと片方のpostgresqlを落とすということをすると思います。
その後、pgpoolの機能を使って落としたpostgresqlのリカバリをして立ち上げるのではなく、落とした方のpostgresqlと落としていない方のpostgresqlのデータを整合させて(具体的には双方ともに予めバックアップしておいたファイルをインポートする等ですね)、pgpoolを再立ち上げすることが多いかなと思います。
※pgpoolでオンラインリカバリが出来るように設定するのは結構骨が折れると思っています。権限の設定とか忘れたりします。
マニュアルに書いてあるとおり、pgpoolは停止する際にpgpool_statusというファイルにバックエンドの状態を書き込みます。そして、再度pgpoolを起動するとき、pgpool_statusが存在すると、 バックエンドの状態をpgpool_statusの通りに復元します。
何を言っているのかというと…以下のようになります。
その後、pgpoolの機能を使って落としたpostgresqlのリカバリをして立ち上げるのではなく、落とした方のpostgresqlと落としていない方のpostgresqlのデータを整合させて(具体的には双方ともに予めバックアップしておいたファイルをインポートする等ですね)、pgpoolを再立ち上げすることが多いかなと思います。
※pgpoolでオンラインリカバリが出来るように設定するのは結構骨が折れると思っています。権限の設定とか忘れたりします。
マニュアルに書いてあるとおり、pgpoolは停止する際にpgpool_statusというファイルにバックエンドの状態を書き込みます。そして、再度pgpoolを起動するとき、pgpool_statusが存在すると、 バックエンドの状態をpgpool_statusの通りに復元します。
何を言っているのかというと…以下のようになります。
[ID] hostname:port Status (weight)
------------------------------------------------
[00] erogamescape14:5432 Connected (1932735282)
[01] erogamescape15:5432 Connected (214748364)
という状態でIDが01のpostgresqlを落とすと[ID] hostname:port Status (weight) ------------------------------------------------ [00] erogamescape14:5432 Connected (1932735282) [01] erogamescape15:5432 down (214748364)
という状態になります。
この状態でpgpoolを落として、erogamescape14とerogamescape15のpostgresqlのDBの内容を一致化させたとします。
再度pgpoolを起動した際には
pgpoolを落としたときに
※たまにオンラインリカバリがうまくいかない場合、pg_dumpしたデータをインポートして2つのpostgresqlのデータを同期させることを、今でもたまにやるのですが(やると30分くらいサービスが中断しますので、あまりやりたくないのですが…)、その際にpgpool_statusを消し忘れてpgpoolを起動してしまって、ぐあーっ!となったことがよくありました。まあ、その場合はなぜかオンラインリカバリができるようになっているので、再度pg_dumpしたデータから復旧させることはないので、いいっちゃあいいのですが、オンラインリカバリができなかったら悲しいです。
[ID] hostname:port Status (weight)
------------------------------------------------
[00] erogamescape14:5432 Connected (1932735282)
[01] erogamescape15:5432 Connected (214748364)
となって欲しいのですが、そうなりません。pgpoolを落としたときに
[ID] hostname:port Status (weight)
------------------------------------------------
[00] erogamescape14:5432 Connected (1932735282)
[01] erogamescape15:5432 down (214748364)
という状態だったとpgpool_statusに書いてあるので、[ID] hostname:port Status (weight) ------------------------------------------------ [00] erogamescape14:5432 Connected (1932735282) [01] erogamescape15:5432 down (214748364)
という状態で起動してしまいます。
これを防ぐには、pgpoolを起動する前にpgpool_statusを削除するか、Ver3.0以上のpgpoolの場合、起動する際に-Dまたは--discard-statusのオプションをつけて起動することが必要です。
※たまにオンラインリカバリがうまくいかない場合、pg_dumpしたデータをインポートして2つのpostgresqlのデータを同期させることを、今でもたまにやるのですが(やると30分くらいサービスが中断しますので、あまりやりたくないのですが…)、その際にpgpool_statusを消し忘れてpgpoolを起動してしまって、ぐあーっ!となったことがよくありました。まあ、その場合はなぜかオンラインリカバリができるようになっているので、再度pg_dumpしたデータから復旧させることはないので、いいっちゃあいいのですが、オンラインリカバリができなかったら悲しいです。