[pgcluster: 457] リカバリー終了時時にシーケンスが同期されない

kazunari takahashi kazunari.takahashi @ ctc-g.co.jp
2004年 8月 5日 (木) 22:38:49 JST


高橋です.
お世話になっております.

リカバリー検証をしております.
リカバリー中にloadbalancer経由で更新系のクエリを発行しても、
正常にリカバリできません.
クエリを発行しなければリカバリできます.
度々申し訳ありませんが、ご教授願えませんでしょうか?

####################################
現象
####################################

・リカバリーしたclusterDBのシーケンス番号が、masterDBと整合性が取れていない.

####################################
#環境
####################################
pgcluster-1.0.7av11

pglb × 1 (solaris8 sparc)
clusterDB ×3 (solaris8 sparc) host名:serverA , serverB , serverC
rgrp × 1 (solaris8 sparc)

-------------------------
1.テーブル作成
-------------------------

test=> create TABLE test(id serial , name varchar(10));
NOTICE:  CREATE TABLE will create implicit sequence 'test_id_seq' for SERIAL column 'test.id'
CREATE TABLE

-------------------------
2.データをloadbalancer経由でインサート
-------------------------

test=> insert into test(name) values('a');
INSERT 33366 1


3clusterDBとも正常にインサートされる.

----------------------------
3.serverCのpostmasterを落とす
-----------------------------

test=> insert into test(name) values('b');
サーバA,Bには正常にインサート
test=> select * from test ;
 id | name
----+------
  1 | a
  2 | b

----------------------------
3.更にインサート
----------------------------
test=> insert into test(name) values('b');

#pgreplicate.sts,pglb.stsに以下のメッセージ

Thu Aug  5 21:19:29 2004  port(5432) host:serverC error

----------------------------
4.serverCのpostmasterを起動
----------------------------
$ pg_ctl start -D /usr/local/pgsql/data -o "-i -R"
Start in recovery mode!
Please wait until a data synchronization finishes from Master DB...
postmaster successfully started


----------------------------
5.更にインサートを5件
----------------------------

test=> insert into test(name) values('c');
「OK!  The data synchronization with Master DB was finished.」のメッセー
ジが出る前に上記SQLをloadblancerから5回実行

----------------------------
6.結果確認
----------------------------

OK!〜メッセージが出てからしばらくして確認.


serverA,serverB:
test=> select * from test ;
 id | name
----+------
  1 | a
  2 | b
  3 | c
  4 | c
  5 | c
  6 | c
  7 | c
(7 rows)

serverC:
test=> select * from test ;
 id | name
----+------
  1 | a
  2 | b
  3 | c
  4 | c
  5 | c
  6 | c
 35 | c



-------------------------------------------------------------
DEBUGログ
-------------------------------------------------------------
DEBUG(send_recovery_packet): 2nd master serverA - 5432
DEBUG(send_recovery_packet): 2nd target serverC - 5432
DEBUG(send_recovery_packet): second_setup_recovery end :1
DEBUG(replicate_loop): wait replicate

DEBUG(pgrecovery_loop): recovery accept port 7778

DEBUG(replicate_loop): wait replicate

DEBUG(replicate_loop): wait replicate

DEBUG(replicate_loop): wait replicate

DEBUG(read_packet): receive packet no:9

DEBUG(read_packet): last master serverA - 5432
DEBUG(read_packet): last target serverC - 5432
DEBUG(PGRsend_queue): master serverA - 5432

DEBUG(PGRget_HostTbl): target serverC - 5432

DEBUG(PGRget_HostTbl): msgrcv[INSERT INTO test (name) VALUES ('c')]
DEBUG(PGRsend_replicate_packet_to_server): host(serverA) : port(5432)
DEBUG(getTransactionTbl): hit !! transaction tbl host serverA db:test pid:1377
6
DEBUG(getTransactionTbl): db:test port:5432 user:test host:serverA query:INSERT INTO test (name) VALUES ('c')
DEBUG(getTransactionTbl): sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,1091
709812,837395,2) )
DEBUG(getTransactionTbl): PQexec send :INSERT INTO test (name) VALUES ('c')
DEBUG(getTransactionTbl): PQexec end
DEBUG(PGRsend_replicate_packet_to_server): host(serverC) : port(5432)
DEBUG(getTransactionTbl): not found in transaction tbl host serverB db:test pi
d:13776
DEBUG(getTransactionTbl): not found in getTransactionTbl
DEBUG(getTransactionTbl): not found in transaction tbl host serverB db:test pi
d:13776
DEBUG(pgr_createConn): PQsetdbLogin host[serverC] port[5432] db[test] user[test]
DEBUG(pgr_createConn): PQsetdbLogin ok!!
DEBUG(insertTransactionTbl): db:test port:5432 user:test host:serverC query:INSERT
 INTO test (name) VALUES ('c')
DEBUG(insertTransactionTbl): sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,1
091709812,837395,2) )
DEBUG(insertTransactionTbl): PQexec send :INSERT INTO test (name) VALUES ('c')
DEBUG(insertTransactionTbl): PQexec end
DEBUG(delete_template): send_queue return status 0

DEBUG(delete_template): PGRsend_queue ok

高橋 一成 <kazunari.takahashi @ ctc-g.co.jp>




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