[pgcluster: 652] Re: Clusterリカバリ中の更新クエリについて

Chikahisa Yabuzuka yabuzuka @ cseltd.co.jp
2005年 1月 14日 (金) 19:17:33 JST


三谷様

お世話になっております。
薮塚です。

前回ご教示いただいた方法で試してみましたが
結果は同様でした。ロードバランサを停止せずに
クラスタの停止→起動を交互に実行すると

$ psql -U testDB -h pgc01.postgresql.jp -p 5432
psql: Sorry, backend connection is full

が発生いたしました。
一つ検証していてわかったのですが、
psqlで2つ以上のセッションを確立した状態で行うと発生するようです。
(私が試していた方法では1つのセッション確立でも発生しましたが)

状況を整理いたしますと、
マシンは2台用意しております。
それぞれに、ロードバランサ×1、クラスタ×2、レプリケーション×1を起動しま
す。
設定ファイル(pglb.conf)は三谷様よりご提案いただいたものです。
検証手順は、全てのサーバを起動した後にpsqlでDB接続をします。
コンソールを2つ用意して2つのセッションを確立します。
このうち一つのpsqlで更新クエリを実行します。
クラスタはマスタDB以外のものを順番に停止→起動(-R)します。
下記のpglb.confを参照にすると、
pgc02:6432 → pgc01:7432 → pgc02:7432 の順に停止します。
すると、pgc02:7432を停止した後にpsqlから更新クエリを実行すると

testDB=> insert into test values ('1');
WARNING:  Message from PostgreSQL backend:
        The Postmaster has informed me that some other backend
        died abnormally and possibly corrupted shared memory.
        I have rolled back the current transaction and am
        going to terminate your database system connection and exit.
        Please reconnect to the database system and repeat your query.
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!>

と出力され、更新クエリは実行されませんでした。
また、この後に別のコンソールからpsqlで接続をしようとすると
psql: Sorry, backend connection is full
となります。

psqlが1つだけの時は最後の「Failed」が「Success」となります。
psqlの接続も可能です。

取り急ぎ現象の報告をさせていただきました。
原因等わかりましたらご教示いただければ幸いです。
よろしくお願いいたします。



> こんな感じではどうでしょうか?
> Max_Connectを0にしているのが表から接続されないリカバリ用のマスタです。
>
> ----- pglb.conf --------------------
> # Master
> <Cluster_Server_Info>
>     <Host_Name>   pgc01.postgresql.jp </Host_Name>
>     <Port>        6432                </Port>
>     <Max_Connect> 0                   </Max_Connect>
> </Cluster_Server_Info>
> #
> <Cluster_Server_Info>
>     <Host_Name>   pgc02.postgresql.jp </Host_Name>
>     <Port>        6432                </Port>
>     <Max_Connect> 32                  </Max_Connect>
> </Cluster_Server_Info>
> <Cluster_Server_Info>
>     <Host_Name>   pgc01.postgresql.jp </Host_Name>
>     <Port>        7432                </Port>
>     <Max_Connect> 32                  </Max_Connect>
> </Cluster_Server_Info>
> <Cluster_Server_Info>
>     <Host_Name>   pgc02.postgresql.jp </Host_Name>
>     <Port>        7432                </Port>
>     <Max_Connect> 32                  </Max_Connect>
> </Cluster_Server_Info>
>
> <Backend_Socket_Dir>    /tmp     </Backend_Socket_Dir>
> <Receive_Port>          5432     </Receive_Port>
> <Recovery_Port>         6001     </Recovery_Port>
> <Max_Cluster_Num>        128     </Max_Cluster_Num>
> <Use_Connection_Pooling>  no     </Use_Connection_Pooling>
> ---------------------------------
>




pgcluster メーリングリストの案内