[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 メーリングリストの案内