[pgcluster: 828] リカバリー後にcreatedbが出来ない

Akihiro Manabe spooky_mana @ ybb.ne.jp
2005年 10月 5日 (水) 18:41:54 JST


お世話になります、真鍋といいます。

PGClusterでリカバリーのテストをしていたのですが、
リカバリー終了後、DBを新たに作ろうとすると、
復旧した方のDBは問題ないのですが、マスタになっていたほうのDBで、

createdb: database creation failed: ERROR:  source database "template1" 
is being accessed by other users

というエラーが出ていまいます。
このときエラーが出たDBのプロセスに、

postgres   945  0.0  0.9 16576 8376 tty1     S    17:29   0:00 
 postgres: postgres template1 192.168.0.106(32783) idle
(192.168.0.106はreplicateサーバのIP)

というプロセスが残っていました。
また、しばらく放っておけばプロセスが切れるかと思ったのですが、
切れることはなく、さらにreplicateサーバ上でpgreplicateプロセスが
ゾンビ化しているのをpsコマンドで確認しました。
これらが原因であるとは思うのですが、どのようにすれば
この現象を回避する方法がわかりません。
また、pgreplicateのプロセスが、"pgreplicate stop"では切れない
という現象も確認しております。
ご存じの方がおられましたら、ご指摘いただければと思います。
よろしくお願いします。

環境及び設定・ログは以下の通りです。

■PGClusterのバージョン
・1.1.1a及び1.3.0c(どちらでも同じ現象が起こります)

■全体の構成
・レプリケーションサーバ 1台(pgc1:192.168.0.106)
・クラスタサーバ     2台(db1:192.168.0.102  db2:192.168.0.103)

■OS及びマシンスペック
・レプリケーションサーバ
 OS: debian3.1-sarge
 CPU: Pentium 3 1GHz
 Memory: 512M
・クラスタサーバ(2台とも)
 OS: debian3.1-sarge(kernelは2.4.31に変更)
 CPU: Pentium 4 3.4GHz
 Memory: 1G

■行った操作
・pgreplicate起動
・db1、db2のclusterを起動
・createdbで、db1、db2の両方にtestが作成されることを確認
・db2を停止
・db1でtestをdrop
・db2をリカバリーモードで起動(pg_ctl start -o "-R")
・db1でcreatedb

■pgreplicate.conf
<Cluster_Server_Info>
    <Host_Name>           db1         </Host_Name>
    <Port>                5432        </Port>
    <Recovery_Port>       7101        </Recovery_Port>
    <LifeCheck_Port>      7201        </LifeCheck_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
    <Host_Name>           db2         </Host_Name>
    <Port>                5432        </Port>
    <Recovery_Port>       7101        </Recovery_Port>
    <LifeCheck_Port>      7201        </LifeCheck_Port>
</Cluster_Server_Info>
<Status_Log_File>  /tmp/pgreplicate.sts  </Status_Log_File>
<Error_Log_File>   /tmp/pgreplicate.log  </Error_Log_File>
<Replication_Port>       8001            </Replication_Port>
<Recovery_Port>          8101            </Recovery_Port>
<LifeCheck_Port>         8201            </LifeCheck_Port>
<RLOG_Port>              8301            </RLOG_Port>
<Response_Mode>        normal            </Response_Mode>
<Use_Replication_Log>      no            </Use_Replication_Log>
<Reserved_Connections>      1            </Reserved_Connections>

■cluster.conf
<Replicate_Server_Info>
        <Host_Name> pgc1 </Host_Name>
        <Port> 8001 </Port>
        <Recovery_Port> 8101 </Recovery_Port>
        <LifeCheck_Port> 8201 </LifeCheck_Port>
</Replicate_Server_Info>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
<Rsync_Path> /usr/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -2 </Rsync_Option>
<When_Stand_Alone> read_only  </When_Stand_Alone>
<Status_Log_File>  /tmp/cluster.sts </Status_Log_File>
<Error_Log_File> /tmp/cluster.log  </Error_Log_File>

■/etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.102   db1
192.168.0.103   db2
192.168.0.106   pgc1

■pgreplicateのデバッグログ
DEBUG:replicate_main():replicate main 8001 port bind OK
DEBUG:PGRreplicate_packet_send():cmdSts=N
DEBUG:PGRreplicate_packet_send():cmdType=^@
DEBUG:PGRreplicate_packet_send():rlog=0
DEBUG:PGRreplicate_packet_send():request_id=0
DEBUG:PGRreplicate_packet_send():replicate_id=0
DEBUG:PGRreplicate_packet_send():port=0
DEBUG:PGRreplicate_packet_send():pid=0
DEBUG:PGRreplicate_packet_send():from_host=pgc1
DEBUG:PGRreplicate_packet_send():dbName=template1
DEBUG:PGRreplicate_packet_send():userName=postgres
DEBUG:PGRreplicate_packet_send():recieve sec=0
DEBUG:PGRreplicate_packet_send():recieve usec=0
DEBUG:PGRreplicate_packet_send():query_size=59
DEBUG:PGRreplicate_packet_send():query=SELECT PGR_SYSTEM_COMMAND_FUNCTION(1,'pgc1',8001,8101,8201)
DEBUG:sem_lock[1]
DEBUG:pgr_createConn():PQsetdbLogin host[db1] port[5432] db[template1] user[postgres]
DEBUG:pgr_createConn():PQsetdbLogin host[db2] port[5432] db[template1] user[postgres]
DEBUG:deleteTransactionTbl(): getTransactionTbl failed
DEBUG:deleteTransactionTbl(): getTransactionTbl failed
DEBUG:sem_unlock[1]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:PGRreplicate_packet_send():cmdSts=Q
DEBUG:PGRreplicate_packet_send():cmdType=O
DEBUG:PGRreplicate_packet_send():rlog=0
DEBUG:PGRreplicate_packet_send():request_id=1
DEBUG:PGRreplicate_packet_send():replicate_id=0
DEBUG:PGRreplicate_packet_send():port=5432
DEBUG:PGRreplicate_packet_send():pid=1103
DEBUG:PGRreplicate_packet_send():from_host=db1
DEBUG:PGRreplicate_packet_send():dbName=template1
DEBUG:PGRreplicate_packet_send():userName=postgres
DEBUG:PGRreplicate_packet_send():recieve sec=1128501846
DEBUG:PGRreplicate_packet_send():recieve usec=66319
DEBUG:PGRreplicate_packet_send():query_size=20
DEBUG:PGRreplicate_packet_send():query=CREATE DATABASE test
DEBUG:sem_lock[1]
DEBUG:PGRreturn_result():PGRreturn_result[]
DEBUG:PGRreturn_result():status of PGRreturn_result[0]
DEBUG:pgr_createConn():PQsetdbLogin host[db2] port[5432] db[template1] user[postgres]
DEBUG:pgr_createConn():PQsetdbLogin ok
DEBUG:send_sync_data():sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,1128501846,66319,0,1) )
DEBUG:sem_unlock[1]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop(): PGRread_packet failed query[(null)] cmdSys[^@]
DEBUG:replicate_loop():session closed
DEBUG:replicate_loop():replicate loop exit
DEBUG:use[2] host[db1] port[5432] life[7201] rec[1]
DEBUG:use[2] host[db2] port[5432] life[7201] rec[2]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop(): PGRread_packet failed query[(null)] cmdSys[^@]
DEBUG:replicate_loop():session closed
DEBUG:replicate_loop():replicate loop exit
DEBUG:replicate_loop():replicate_loop selected
DEBUG:PGRreplicate_packet_send():cmdSts=Q
DEBUG:PGRreplicate_packet_send():cmdType=O
DEBUG:PGRreplicate_packet_send():rlog=0
DEBUG:PGRreplicate_packet_send():request_id=1
DEBUG:PGRreplicate_packet_send():replicate_id=0
DEBUG:PGRreplicate_packet_send():port=5432
DEBUG:PGRreplicate_packet_send():pid=1112
DEBUG:PGRreplicate_packet_send():from_host=db1
DEBUG:PGRreplicate_packet_send():dbName=template1
DEBUG:PGRreplicate_packet_send():userName=postgres
DEBUG:PGRreplicate_packet_send():recieve sec=1128501890
DEBUG:PGRreplicate_packet_send():recieve usec=135979
DEBUG:PGRreplicate_packet_send():query_size=18
DEBUG:PGRreplicate_packet_send():query=DROP DATABASE test
DEBUG:sem_lock[1]
DEBUG:PGRreturn_result():PGRreturn_result[]
DEBUG:PGRreturn_result():status of PGRreturn_result[0]
DEBUG:sem_unlock[1]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop(): PGRread_packet failed query[(null)] cmdSys[^@]
DEBUG:replicate_loop():session closed
DEBUG:replicate_loop():replicate loop exit
DEBUG:pgrecovery_loop():[6]receive packet no:1
DEBUG:first_setup_recovery():1st setup target db2
DEBUG:first_setup_recovery():1st setup port 5432
DEBUG:pgr_createConn():PQsetdbLogin host[db1] port[5432] db[template1] user[postgres]
DEBUG:pgr_createConn():PQsetdbLogin ok
DEBUG:send_sync_data():sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,0,0,0,1) )
DEBUG:pgrecovery_loop():1st master db1 - 5432
DEBUG:pgrecovery_loop():1st target db2 - 5432
DEBUG:pgrecovery_loop():first_setup_recovery end :0
DEBUG:pgrecovery_loop():[6]receive packet no:5
DEBUG:send_sync_data():sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,0,0,0,1) )
DEBUG:pgrecovery_loop():2nd master db1 - 5432
DEBUG:pgrecovery_loop():2nd target db2 - 5432
DEBUG:pgrecovery_loop():second_setup_recovery end :1
DEBUG:pgrecovery_loop():[6]receive packet no:9
DEBUG:pgrecovery_loop():last master db1 - 5432
DEBUG:pgrecovery_loop():last target db2 - 5432
DEBUG:PGRsend_queue():master db1 - 5432

DEBUG:PGRsend_queue():target db2 - 5432
DEBUG:PGRget_recovery_queue_file_for_read(): read_queue_no[0]
DEBUG:PGRget_recovery_queue_file_for_read(): fopen[/usr/local/pgsql/data/.pgr_recovery.1]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:PGRreplicate_packet_send():cmdSts=Q
DEBUG:PGRreplicate_packet_send():cmdType=O
DEBUG:PGRreplicate_packet_send():rlog=0
DEBUG:PGRreplicate_packet_send():request_id=1
DEBUG:PGRreplicate_packet_send():replicate_id=0
DEBUG:PGRreplicate_packet_send():port=5432
DEBUG:PGRreplicate_packet_send():pid=1169
DEBUG:PGRreplicate_packet_send():from_host=db1
DEBUG:PGRreplicate_packet_send():dbName=template1
DEBUG:PGRreplicate_packet_send():userName=postgres
DEBUG:PGRreplicate_packet_send():recieve sec=1128501990
DEBUG:PGRreplicate_packet_send():recieve usec=696972
DEBUG:PGRreplicate_packet_send():query_size=20
DEBUG:PGRreplicate_packet_send():query=CREATE DATABASE test
DEBUG:sem_lock[1]
DEBUG:PGRreturn_result():PGRreturn_result[]
DEBUG:PGRreturn_result():status of PGRreturn_result[0]
DEBUG:pgr_createConn():PQsetdbLogin host[db2] port[5432] db[template1] user[postgres]
DEBUG:pgr_createConn():PQsetdbLogin ok
DEBUG:send_sync_data():sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION(3,1128501990,696972,0,1) )
DEBUG:sem_unlock[1]
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop():replicate_loop selected
DEBUG:replicate_loop(): PGRread_packet failed query[(null)] cmdSys[^@]
DEBUG:replicate_loop():session closed
DEBUG:replicate_loop():replicate loop exit

以上です。

-- 
Akihiro Manabe <spooky_mana @ ybb.ne.jp>




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