[pgcluster: 259] レプリケーションがうまく動作しません。

miyazawa makoto miyazawa_pgcluster_mailling @ yahoo.co.jp
2004年 4月 21日 (水) 11:54:04 JST


現在、Solaris8(OS5.8)2台でPGClusterの検証を行っておりま
す、宮澤と申します。

さて、ご相談させていただきたい現象なのですが
レプリケーションがうまくできていません。
いろいろ試してみたのですが、どうにもわからず皆様のお知恵
をお借りできたらと
思って投稿させていただております。
長文で申し訳ありませんが、よろしくお願いいたします。

以下に環境等の情報を挙げます。
------------------------------------------------------
実機環境:Solaris8(sparc、OS5.8)  2台
サーバ構成:
PGClusterバージョン:PGReplicate version [1.0.6cv13]
0系…レプリケーションサーバ+クラスタサーバ(マスタ)
1系…クラスタサーバ(スレーブ)
ロードバランサは未インストール、未設定

(1)インストール方法(フルパッケージ版)
  PGClusterの設定方法、rsyncの設定は
 
http://www.csra.co.jp/~mitani/jpug/pgcluster/stable/index.html
  の設定方法を参照。
  お互いのサーバでrsyncを実行し、ファイルが転送されるこ
とを確認。

(2)動作確認手順
   以下の手順でサーバを起動した。
   (1)1系のクラスタサーバ起動
   (2)0系のレプリケーションサーバ起動
   (3)0系のクラスタサーバ起動
   
   (4)1系で以下の更新系SQLを発行
      insert into shinamono values('sell',6000);

      その際のレプリケーションログは以下の通り。
      
      DEBUG(get_ip_by_name): replicate main: selected
      DEBUG(replicate_loop): replicate_loop selected
      DEBUG(read_packet): query size=41
      DEBUG(read_packet): read[41] query[insert into
shinamono values('sell',6000)]
      DEBUG(read_packet): query :: insert into shinamono
values('sell',6000)
      DEBUG(replicate_packet_send): cmdSts=Q
      DEBUG(replicate_packet_send): cmdType=I
      DEBUG(replicate_packet_send): port=5432
      DEBUG(replicate_packet_send): pid=708
      DEBUG(replicate_packet_send): except_host=test2
      DEBUG(replicate_packet_send): from_host=test2
      DEBUG(replicate_packet_send): dbName=template1
      DEBUG(replicate_packet_send): userName=postgres
      DEBUG(replicate_packet_send): recieve sec=1082514395
      DEBUG(replicate_packet_send): recieve usec=382726
      DEBUG(replicate_packet_send): query_size=41
      DEBUG(replicate_packet_send): query=insert into
shinamono values('sell',6000)
      DEBUG(replicate_packet_send): useFlag[2]
      DEBUG(get_ip_by_name): not same host:5432 @ 4255360a -
5432 @ 4155360a
      DEBUG(is_need_response): same_host[0] mode[1]
current[0]
      DEBUG(is_need_response): sem_lock[1]
      DEBUG(replicate_packet_send_each_server):
except:5432 @ test2 host:5432 @ test1.adtest.foo.co.jp
      DEBUG(replicate_packet_send_each_server): send
replicate to:test1.adtest.foo.co.jp
      DEBUG(PGRsend_replicate_packet_to_server):
host(test1.adtest.foo.co.jp) : port(5432)
      DEBUG(getDBServerTbl): search host is
(test1.adtest.foo.co.jp)
      DEBUG(get_ip_by_name): not found
      DEBUG(setDBServerTbl): host:test1.adtest.foo.co.jp
dbName:template1
      DEBUG(getDBServerTbl): search host is
(test1.adtest.foo.co.jp)
      DEBUG(get_ip_by_name): not found
      DEBUG(pgr_createConn): PQsetdbLogin ok!!
      DEBUG(get_ip_by_name):
send_replicate_packet_to_server query=insert into
shinamono values('sell',6000)
      DEBUG(get_ip_by_name): db:template1 port:5432
user:postgres host:test1.adtest.foo.co.jp query:insert
into shinamono values('sell',6000)
      DEBUG(get_ip_by_name): sync_command(SELECT
PGR_SYSTEM_COMMAND_FUNCTION(3,1082514395,382726) )
      DEBUG(replicate_loop): wait replicate
      DEBUG(get_ip_by_name): PQexec send :insert into
shinamono values('sell',6000)
      DEBUG(get_ip_by_name): PQstatus(0)
      DEBUG(child_wait): replicate main: selected      
      
   (5)0系、1系でレプリケーションで、レプリケーションされ
ていることを確認。
   
   (6)再び、1系で以下の更新系SQLを発行
      insert into shinamono values('buy',3000);
      
      すると、レプリケーションログで以下の出力が表示され
、
      1系のpsqlからの反応がなくなる。
      
      DEBUG(replicate_loop): replicate_loop selected
      DEBUG(read_packet): query size=54
      DEBUG(read_packet): read[54] query[SELECT
PGR_SYSTEM_COMMAND_FUNCTION(2,test1,8777,7779)]
      DEBUG(read_packet): replicate_loop selected
      DEBUG(read_packet): query size=40
      DEBUG(read_packet): read[40] query[insert into
shinamono values('buy',3000)]
      DEBUG(read_packet): query :: insert into shinamono
values('buy',3000)
      DEBUG(replicate_packet_send): cmdSts=Q
      DEBUG(replicate_packet_send): cmdType=I
      DEBUG(replicate_packet_send): port=5432
      DEBUG(replicate_packet_send): pid=752
      DEBUG(replicate_packet_send): except_host=test2
      DEBUG(replicate_packet_send): from_host=test2
      DEBUG(replicate_packet_send): dbName=template1
      DEBUG(replicate_packet_send): userName=postgres
      DEBUG(replicate_packet_send): recieve sec=1082514854
      DEBUG(replicate_packet_send): recieve usec=814832
      DEBUG(replicate_packet_send): query_size=40
      DEBUG(replicate_packet_send): query=insert into
shinamono values('buy',3000)
      DEBUG(replicate_packet_send): useFlag[2]
      DEBUG(get_ip_by_name): not same host:5432 @ 4255360a -
5432 @ 4155360a
      DEBUG(is_need_response): same_host[0] mode[1]
current[0]
      DEBUG(is_need_response): sem_lock[1]
      DEBUG(replicate_loop): wait replicate      

      しばらくすると、1系のpsqlのプロンプトが帰ってくる
が
      レプリケーションされていない(1系のDBにもinsertされ
ていない)

      いくつかの更新系のコマンド(create table、drop
table,delete)
を試してみましたが
      サーバ起動時の最初のときのみレプリケーションされて
、それ以降のコマンドは受け付けていないようです。
      
お聞きしたい点は以下の通りです。
(1)この現象はデッドロック等のBugに由来するものでしょうか
?レプリケーションから各クラスタサーバへクエリーを
発行する処理がうまく実行されずに、TIMEOUTしているように
見えます。
   それとも、設定等で回避できる現象なのでしょうか?
   
以上、よろしくお願いいたします。

__________________________________________________
Do You Yahoo!?
http://bb.yahoo.co.jp/




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