[pgcluster: 206] クラスタサーバの復旧について

Masanari Ishida ishida @ credist.co.jp
2004年 3月 24日 (水) 12:00:37 JST


お世話になります。石田です。

PGCluster1.0.6cv9でクラスタサーバ復旧のテストを行いました。
テストした内容は[pgcluster: 179]と同様です。
http://ml.postgresql.jp/pipermail/pgcluster/2004-February/000178.html

正常にできました。(期待通りの動作です・・・すばらしい・・・)

そこで構成を以下のように変更してテストしたところうまく復旧することが
できませんでした。何か手順等間違えていますか?
また、フェールオーバするのにloadBalancerは必ず必要なのですか?
(幾つかでている資料を見るとそのように理解してしまうのですが・・・)
Replication+Cluster3台以上ではだめなのでしょうか?
障害検知、復旧、レプリケートはレプリケーションサーバが行っているので
なくても大丈夫ではと思っているのですが。
----------------------------------------------------------
Cluster   3台(CL1〜CL3)
Replication 1台(REP1)
LoadBalancer 1台(LB1)

DB名     db1
テーブル   tbl1  (create table tbl1 (fld1 integer))
----------------------------------------------------------
1.以下のシェルで実行中にCL3をpg_ctl stop -m immediate -o "-i"
  で停止。
  #!/bin/sh
  COUNTER=300
  until [ $COUNTER -eq 0 ] ; do
    echo "COUNTER-----------${COUNTER}"
    psql -h LB1 -c "insert into tbl1 values (${COUNTER})" db1
    COUNTER=`expr $COUNTER - 1`
  done

2.REP1のログにはCL3が、errorと記述されている。
3.1のシェルを実行中にCL3をpg_ctl start -o "-i -R"で復旧すると

  FATAL:  The database system is starting up
  を表示しながら
  LOG:  database system is ready
    を表示します。ただし、REP1のログにはinitializeの後、また、
  CL3はerrorとなり、レプリケーションから切り離されます。

  また、実行中のシェルは停止した状態になりました。ただし、10分くらい
  そのままにしていると、続きの処理をはじめました。

  レプリケーションサーバのデバッグログは以下のようになっていました。
  抽出した個所が適切なのか分かりませんが、シェルが停止した時に表示
  されていたものです。

  よくわかりませんが、CL3が完全に立ち上がっていないのに復旧したと
  みなされて、レプリケートを開始してしまったと感じがあります。
  (ただ、その場合だとREP1のログにCL3が、useだと記録されてもいいような
  気もしますが・・・)

DEBUG(read_packet): last master CL1 - 5432
DEBUG(read_packet): last target CL3 - 5432
DEBUG(PGRsend_queue): master CL1 - 5432

DEBUG(PGRget_HostTbl): target CL3 - 5432

DEBUG(PGRsend_replicate_packet_to_server): host(CL1) : port(5432)
DEBUG(getDBServerTbl): search host is (CL1)
DEBUG(get_ip_by_name): not found
DEBUG(setDBServerTbl): host:CL1 dbName:db1
DEBUG(getDBServerTbl): search host is (CL1)
DEBUG(get_ip_by_name): not found
DEBUG(pgr_createConn): PQsetdbLogin ok!!
DEBUG(get_ip_by_name): send_replicate_packet_to_server query=insert in
to tbl1 values (188)
DEBUG(get_ip_by_name): db:db1 port:5432 user:postgres host
:CL1 query:insert into tbl1 values (188)
DEBUG(get_ip_by_name): sync_command(SELECT PGR_SYSTEM_COMMAND_FUNCTION
(3,1080094783,0) )
DEBUG(get_ip_by_name): PQexec send :insert into tbl1 values (188)
DEBUG(get_ip_by_name): PQstatus(0)
DEBUG(get_ip_by_name): PQgetResult((null))
DEBUG(get_ip_by_name): cmdStatus(INSERT 50456 1)
DEBUG(get_ip_by_name): errMsg((null))
DEBUG(get_ip_by_name): PQerrMsg()
DEBUG(get_ip_by_name): resStatus(PGRES_COMMAND_OK)
DEBUG(get_ip_by_name): cmdStatus(INSERT 50456 1)
DEBUG(get_ip_by_name): return result(CINSERT 50456 1)
DEBUG(get_ip_by_name): PQexec end
DEBUG(PGRsend_replicate_packet_to_server): host(CL3) : port(5432)
DEBUG(getDBServerTbl): search host is (CL3)
DEBUG(get_ip_by_name): search host(-855594816):port(5432):db(db1)
DEBUG(get_ip_by_name): not found
DEBUG(setDBServerTbl): host:CL3 dbName:db1
DEBUG(getDBServerTbl): search host is (CL3)
DEBUG(get_ip_by_name): search host(-855594816):port(5432):db(db1)
DEBUG(get_ip_by_name): not found
ERROR(pgr_createConn): PQsetdbLogin failed. close socket!!
ERROR(pgr_createConn): PQsetdbLogin failed. close socket!!
ERROR(pgr_createConn): PQsetdbLogin failed. close socket!!
ERROR(pgr_createConn): PQsetdbLogin failed. close socket!!
ERROR(pgr_createConn): PQsetdbLogin failed. close socket!!
ERROR(pgr_createConn): dbPersistLogin  timeout
ERROR(pgr_createConn): pgr_createConn failed
ERROR(PGRsend_load_balance_packet): setDBServerTbl failed
ERROR(PGRsend_load_balance_packet): PGRsend_replicate_packet_to_server
 to target error
DEBUG(PGRsend_load_balance_packet): send_queue return status -1

ERROR(PGRsend_load_balance_packet): PGRsend_queue failed
DEBUG(PGRsend_load_balance_packet): wait recovery

----------------------------------------
Masanari Ishida < ishida @ credist.co.jp >
----------------------------------------









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