[pgcluster: 1041] リカバリでJDBC経由クエリが無応答

Masatoshi Higashiyama masatoshi.higashiyama @ gmail.com
2008年 10月 28日 (火) 13:34:54 JST


はじめまして。東山と申します。

PGClusterを導入しようと評価を始めましたが、リカバリするとJDBC経由では接続
はできるもののクエリ実行で無応答になり困っております。psqlでは接続だけでなく
参照も更新もできており、オプション-l -vで動作させてもerrorがないためリカバリも
正常にできていると思われます。

JDBC接続アプリではリカバリの恩恵を受けられないのでしょうか?
それとも、設定やアプリの作り方で回避できるのでしょうか?

なお、レプリケーションやクラスタ障害時のロードバランスはJDBC経由でも正常に
動作しており、リカバリ後にPGClusterを起動し直せば正常に動作します。
環境、構成、評価内容の詳細は以下になります。

[環境]
Red Hat Enterprise Linux ES (v. 4 for AMD64/Intel EM64T)
pgcluster-1.7.0rc12.tar.gz
postgresql-8.2-508.jdbc3.jar

[構成]
サーバAで以下を動作させ、別のサーバBで動作するアプリからロードバランサに
JDBC経由で接続しています。

クラスタDB 2つ:
 cluster1(マスタ)
 cluster2
レプリケーションサーバ 2つ(カスケード接続):
 replicate1(upper)
 replicate2
ロードバランサ 2つ:
 loadbalancer1
 loadbalancer2

評価のため1台で動作させていますが、実際は以下の4台構成を考えています。
1. loadbalancer1とJDBC接続アプリを動作させるサーバ
2. loadbalancer2とJDBC接続アプリを動作させるサーバ
3. replicate1とcluster1を動作させるサーバ
4. replicate2とcluster2を動作させるサーバ

[評価内容]
リカバリについて以下を試しましたが、症状は両Caseとも前述のとおりです。

Case1: -m immediateでcluster1を停止させ、-o "-R"でcluster1を復旧する
Case2: -m immediateでcluster2を停止させ、-o "-R"でcluster2を復旧する

psqlではロードバランサに接続してクエリを実行した後にcluster1、cluster2へ
直接接続してレプリケーションを確認できています。

psqlとJDBCで同クエリを実行した時のpglb.logは以下になります。

Tue Oct 28 13:23:21 2008  PGRscan_cluster:1 ClusterDB can be used
Tue Oct 28 13:23:21 2008  PGRscan_cluster:172.16.0.240
[46810],useFlag->2 max->32 use_num->0

Tue Oct 28 13:23:21 2008  I am 12610
Tue Oct 28 13:23:21 2008  I am 12610 accept fd 6
Tue Oct 28 13:23:21 2008  Protocol Major: 3 Minor: 0 database: TESTDB
user: TESTUSER
Tue Oct 28 13:23:21 2008  pool_read_message_length: lenghth: 8
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 25
Tue Oct 28 13:23:21 2008  name: client_encoding value: UTF8
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 23
Tue Oct 28 13:23:21 2008  name: DateStyle value: ISO, YMD
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 26
Tue Oct 28 13:23:21 2008  name: integer_datetimes value: off
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 21
Tue Oct 28 13:23:21 2008  name: is_superuser value: off
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 25
Tue Oct 28 13:23:21 2008  name: server_encoding value: UTF8
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 25
Tue Oct 28 13:23:21 2008  name: server_version value: 8.2.6
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 35
Tue Oct 28 13:23:21 2008  name: session_authorization value: TESTUSER
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 36
Tue Oct 28 13:23:21 2008  name: standard_conforming_strings value: off
Tue Oct 28 13:23:21 2008  pool_read_message_length2: master lenghth: 19
Tue Oct 28 13:23:21 2008  name: TimeZone value: Japan
Tue Oct 28 13:23:21 2008  pool_read_message_length: lenghth: 12
Tue Oct 28 13:23:21 2008  pool_send_auth_ok: send pid 12611 to frontend
Tue Oct 28 13:23:21 2008  read kind from backend pending data Z len: 5 po: 262
Tue Oct 28 13:23:21 2008  pool_process_query: kind from backend: Z
Tue Oct 28 13:23:21 2008  pool_read_message_length: lenghth: 5
Tue Oct 28 13:23:21 2008  ReadyForQuery: message length: 5
Tue Oct 28 13:23:21 2008  ReadyForQuery: transaction state: I
Tue Oct 28 13:23:30 2008  read kind from frontend Q(51)
Tue Oct 28 13:23:30 2008  statement: SELECT NAME FROM SERVICER;
Tue Oct 28 13:23:30 2008  read kind from backend T
Tue Oct 28 13:23:30 2008  pool_process_query: kind from backend: T
Tue Oct 28 13:23:30 2008  read kind from backend pending data D len: 64 po: 30
Tue Oct 28 13:23:30 2008  pool_process_query: kind from backend: D
Tue Oct 28 13:23:30 2008  read kind from backend pending data D len: 49 po: 45
Tue Oct 28 13:23:30 2008  pool_process_query: kind from backend: D
Tue Oct 28 13:23:30 2008  read kind from backend pending data C len: 17 po: 77
Tue Oct 28 13:23:30 2008  pool_process_query: kind from backend: C
Tue Oct 28 13:23:30 2008  read kind from backend pending data Z len: 5 po: 89
Tue Oct 28 13:23:30 2008  pool_process_query: kind from backend: Z
Tue Oct 28 13:23:30 2008  pool_read_message_length: lenghth: 5
Tue Oct 28 13:23:30 2008  ReadyForQuery: message length: 5
Tue Oct 28 13:23:30 2008  ReadyForQuery: transaction state: I
Tue Oct 28 13:23:31 2008  read kind from frontend X(58)
Tue Oct 28 13:24:08 2008  PGRscan_cluster:1 ClusterDB can be used
Tue Oct 28 13:24:08 2008  PGRscan_cluster:172.16.0.240
[46810],useFlag->2 max->32 use_num->0

Tue Oct 28 13:24:08 2008  I am 12636
Tue Oct 28 13:24:08 2008  I am 12636 accept fd 6
Tue Oct 28 13:24:08 2008  Protocol Major: 3 Minor: 0 database: TESTDB
user: TESTUSER
Tue Oct 28 13:24:08 2008  pool_read_message_length: lenghth: 8
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 28
Tue Oct 28 13:24:08 2008  name: client_encoding value: UNICODE
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 23
Tue Oct 28 13:24:08 2008  name: DateStyle value: ISO, YMD
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 26
Tue Oct 28 13:24:08 2008  name: integer_datetimes value: off
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 21
Tue Oct 28 13:24:08 2008  name: is_superuser value: off
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 25
Tue Oct 28 13:24:08 2008  name: server_encoding value: UTF8
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 25
Tue Oct 28 13:24:08 2008  name: server_version value: 8.2.6
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 35
Tue Oct 28 13:24:08 2008  name: session_authorization value: TESTUSER
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 36
Tue Oct 28 13:24:08 2008  name: standard_conforming_strings value: off
Tue Oct 28 13:24:08 2008  pool_read_message_length2: master lenghth: 19
Tue Oct 28 13:24:08 2008  name: TimeZone value: Japan
Tue Oct 28 13:24:08 2008  pool_read_message_length: lenghth: 12
Tue Oct 28 13:24:08 2008  pool_send_auth_ok: send pid 12637 to frontend
Tue Oct 28 13:24:08 2008  read kind from backend pending data Z len: 5 po: 265
Tue Oct 28 13:24:08 2008  pool_process_query: kind from backend: Z
Tue Oct 28 13:24:08 2008  pool_read_message_length: lenghth: 5
Tue Oct 28 13:24:08 2008  ReadyForQuery: message length: 5
Tue Oct 28 13:24:08 2008  ReadyForQuery: transaction state: I
Tue Oct 28 13:24:30 2008  read kind from frontend P(50)
Tue Oct 28 13:24:30 2008  Parse: portal name <>

以上、よろしくお願いいたします。



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