[pgpool-general-jp: 1373] pcp_promote_nodeによるマスタ昇格ができない

MIND 経技術シ技 吉崎 yoshizaki.hidehisa @ mind.co.jp
2015年 4月 28日 (火) 13:48:49 JST


初めまして、吉崎と申します。


今回PostgreSQL2台とpgpool1台でマスタスレーブモードで動作させようと
しております。

その際、pcp_promote_nodeコマンドを用いてマスタ昇格させようとすると
失敗を生じます。

pgpoolは3.3系と3.4系両方試験させていただきました。

環境は下記となります。

pgpool{pgpool-1}(version3.3.6または3.4.2)
│
├PostgreSQL1{pgpool-pgsql-1}(version9.4.1)
└PostgreSQL2{pgpool-pgsql-2}(version9.4.1)

上記の変更箇所の環境設定は下記になります
pgpool.conf
--------------------------------------------------------------
listen_addresses = '*'
port = 5432
backend_hostname0 = 'pgpool-pgsql-1'
backend_hostname1 = 'pgpool-pgsql-2'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/pgsql/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
log_destination = 'syslog'
syslog_facility = 'LOCAL1'
master_slave_mode = on
master_slave_sub_mode = 'stream'
sr_check_user = 'postgres'
health_check_period = 20
health_check_user = 'postgres'
failover_command = '/etc/pgpool-II/failover.sh %d %P %H %R'
recovery_user = 'postgres'
recovery_1st_stage_command = 'recovery_1st_stage'
--------------------------------------------------------------

postgresql.conf
-----------------------------------------
listen_addresses = '*'
wal_level = hot_standby
synchronous_commit = on
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/pg_archive/%f'
max_wal_senders = 5
wal_keep_segments = 64
wal_sender_timeout = 20s
hot_standby = on
wal_receiver_status_interval = 5s
hot_standby_feedback = on
log_filename = 'postgresql-%Y%m%d.log'
-----------------------------------------

pg_hba.conf
-----------------------------------------
host    all             postgres        192.168.0.0/16          trust
host    replication     postgres        192.168.0.0/16          trust
host    replication     repl_user       192.168.0.0/16          trust
-----------------------------------------

上記の設定で、pcp_attach_node、pcp_detach_node実行
またマスタ障害時のフェイルオーバの動作、リカバリは正常に動作しております。

ただ、pcp_promote_nodeコマンドやpgpoolAdminを用いてのマスタ昇格は
マスタデータベースが切り離されるだけで、スレーブデータベースはマスタ昇格
しておりません。


下記にコマンド実行時の結果、ログを表示させていただきます
(方法は、スレーブのPostgreSQL2をマスタ昇格させようとしております)
--------------------------------------------------
pcp_promote_node -d 10 pgpool-1 9898 postgres postgres 1
DEBUG: send: tos="R", len=46
DEBUG: recv: tos="r", len=21, data=AuthenticationOK
DEBUG: send: tos="E", len=6
DEBUG: recv: tos="d", len=20, data=CommandComplete
DEBUG: send: tos="X", len=4
--------------------------------------------------

pgpoolログ
--------------------------------------------------
Apr 28 13:06:44 pgpool-1 pgpool[12261]: promote_backend: 1 promote node
request from pid 12261
Apr 28 13:06:44 pgpool-1 pgpool[7365]: starting promotion. promote host
pgpool-pgsql-2(5432)
Apr 28 13:06:44 pgpool-1 pgpool[7365]: Restart all children
Apr 28 13:06:44 pgpool-1 pgpool[7365]: starting follow degeneration.
shutdown host pgpool-pgsql-1(5432)
Apr 28 13:06:44 pgpool-1 pgpool[7365]: failover: 1 follow backends have
been degenerated
Apr 28 13:06:44 pgpool-1 pgpool[7365]: failover: set new primary node: 1
Apr 28 13:06:44 pgpool-1 pgpool[7365]: failover: set new master node: 1
Apr 28 13:06:44 pgpool-1 pgpool[12275]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12277]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12276]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12278]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12279]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12262]: worker process received restart
request
Apr 28 13:06:44 pgpool-1 pgpool[7365]: promotion done. promoted host
pgpool-pgsql-2(5432)
Apr 28 13:06:44 pgpool-1 pgpool[12280]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12282]: do_child: failback event found.
restart myself.
Apr 28 13:06:44 pgpool-1 pgpool[12281]: do_child: failback event found.
restart myself.
Apr 28 13:06:45 pgpool-1 pgpool[12261]: pcp child process received
restart request
Apr 28 13:06:45 pgpool-1 pgpool[7365]: PCP child 12261 exits with status
256 in failover()
Apr 28 13:06:45 pgpool-1 pgpool[7365]: fork a new PCP child pid 12283 in
failover()
Apr 28 13:06:45 pgpool-1 pgpool[7365]: worker child 12262 exits with
status 256
Apr 28 13:06:45 pgpool-1 pgpool[7365]: fork a new worker child pid 12284
--------------------------------------------------

--------------------------------------------------
pcp_node_info 10 pgpool-1 9898 postgres postgres 0
pgpool-pgsql-1 5432 3 0.500000
--------------------------------------------------

--------------------------------------------------
pcp_node_info 10 pgpool-1 9898 postgres postgres 1
pgpool-pgsql-2 5432 1 0.500000
--------------------------------------------------

pgpoolAdmin上では下記のように表示されます
--------------------------------------------------
node 0 	pgpool-pgsql-1 	5432 	ノードダウン プライマリとして稼働中
postgres: アップ 	0.500 		|
node 1 	pgpool-pgsql-2 	5432 	ノード稼働中。接続有り。 スタンバイとして
稼働中 	postgres: アップ 	0.500
--------------------------------------------------

上記状態でpgpool上でcreatedbを用いてデータベース作成しようとすると
下記エラーとなります
--------------------------------------------------
createdb -h pgpool-1 test
createdb: データベースの生成に失敗しました:ERROR:  cannot execute
CREATE DATABASE in a read-only transaction
--------------------------------------------------

このためPostgreSQL1をpcp_attach_nodeでノードを復帰させると
問題なくcreatedbを実行できデータベース上にもデータベースが
作成されています。

どこか設定に問題がありノード昇格が出来なくなっているのでしょうか

以上、よろしくお願いします



pgpool-general-jp メーリングリストの案内