[pgpool-general-jp: 1496] pgpool から postgres が切り離されてしまう

Satoshi Iwashita rriifftt @ gmail.com
2018年 2月 2日 (金) 16:46:27 JST


いつもお世話になっております。
岩下と申します。

お知恵を拝借できないかと思い、初めて投稿させていただきます。

先日、突然 pgpool クラスタから postgres が切り離され failover が発動するという事象が発生しました。
出力されたログは以下のようなものでした。

---
[1284894-1] 2018-02-01 06:11:23: pid 117097: LOG: child process with pid:
37220 exits with status 256
[1284895-1] 2018-02-01 06:11:23: pid 117097: LOG: fork a new child process
with pid: 63996
[1284896-1] 2018-02-01 06:12:09: pid 117097: LOG: child process with pid:
35770 exits with status 256
[1284897-1] 2018-02-01 06:12:09: pid 117097: LOG: fork a new child process
with pid: 65375
[1284011-1] 2018-02-01 06:15:54: pid 89930: LOG: received degenerate
backend request for node_id: 0 from pid [89930]
[1283870-1] 2018-02-01 06:15:54: pid 86578: WARNING: write on backend 0
failed with error :"Success"
[1283870-2] 2018-02-01 06:15:54: pid 86578: DETAIL: while trying to write
data from offset: 0 wlen: 5
[1284898-1] 2018-02-01 06:15:54: pid 117097: LOG: Pgpool-II parent process
has received failover request
[1284357-1] 2018-02-01 06:15:54: pid 126010: LOG: unable to flush data to
backend
[1284357-2] 2018-02-01 06:15:54: pid 126010: DETAIL: do not failover
because I am the main process

~ 同様のログが繰り返し出力された後、failover 開始 ~

[1284901-1] 2018-02-01 06:15:54: pid 117097: LOG: execute command:
my_failover_script
[1284902-1] 2018-02-01 06:15:58: pid 117097: LOG:
find_primary_node_repeatedly: waiting for finding a primary node
[1284903-1] 2018-02-01 06:15:58: pid 117097: LOG: find_primary_node:
checking backend no 0
[1284904-1] 2018-02-01 06:15:58: pid 117097: LOG: find_primary_node:
checking backend no 1
[1284905-1] 2018-02-01 06:15:58: pid 117097: LOG: find_primary_node:
primary node id is 1
[1284906-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: set new primary
node: 1
[1284907-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: set new master
node: 1
[1284908-1] 2018-02-01 06:15:58: pid 117097: LOG: failover done. shutdown
host 10.0.0.10(15431)
[1284909-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284910-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284911-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284912-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284913-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284914-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284915-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284916-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284917-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[1284918-1] 2018-02-01 06:15:58: pid 117097: LOG: failover: no backends are
degenerated
[10-1] 2018-02-01 06:15:58: pid 118593: LOG: worker process received
restart request
[4-1] 2018-02-01 06:15:59: pid 118590: LOG: restart request received in pcp
child process
[1284919-1] 2018-02-01 06:15:59: pid 117097: LOG: PCP child 118590 exits
with status 0 in failover()
[1284920-1] 2018-02-01 06:15:59: pid 117097: LOG: fork a new PCP child pid
76317 in failover()
[1284921-1] 2018-02-01 06:15:59: pid 117097: LOG: worker child process with
pid: 118593 exits with status 256
[1284922-1] 2018-02-01 06:15:59: pid 117097: LOG: fork a new worker child
process with pid: 76318
[1284923-1] 2018-02-01 06:15:59: pid 117097: LOG: child process with pid:
95153 exits with status 0

~ failover 後は正常に稼働~
---

環境は以下の通りです。

CentOS 7.2 (AWS EC2 X1.32xlarge)
pgpool-II-3.6.4
postgresql-9.6.3

構成の概要としては以下の通りです。
(ほとんど一般的な構成ではなかろうと思っています。。)

* postgresql は master/slave 構成で非同期 streaming replication を利用
* pacemaker + corosync + pgpool-II で HA を構成
* 上記クラスタソフトウェアは postgresql と同じ EC2 インスタンス内に同居
* 1EC2 インスタンス内に postgresql とそれに対応する pgpool のプロセスが 6 つずつ稼働

また、今回の事象は pgpool が稼働していないホストの postgres を切り離しており、
その際、node_id や postgres が master か slave かは無関係となっているようでした。
なお、当時 postgres 自体は問題なく稼働していて、特別怪しいログは出力されておりませんでした。

pgpool.conf は以下の通りです。

---

backend_hostname0 = '10.0.0.10'
backend_port0 = 15431
backend_weight0 = 1
backend_data_directory0 = '/path/to/data'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '10.0.1.10'
backend_port1 = 15431
backend_weight1 = 1
backend_data_directory1 = '/path/to/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

num_init_children = 250
max_pool = 4

child_life_time = 300
child_max_connections = 100
connection_life_time = 0
client_idle_limit = 0

replication_mode = off
load_balance_mode = off

master_slave_mode = on
master_slave_sub_mode = 'stream'
sr_check_period = 10

health_check_period = 300
health_check_timeout = 5
health_check_max_retries = 3
health_check_retry_delay = 1
connect_timeout = 10000

failover_command = 'my_failover_script'
fail_over_on_backend_error = on
search_primary_node_timeout = 10

---

同様の事象が報告されているか、考えられる原因があるか等、ご教授いただけますと幸いです。
よろしくお願い致します。
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20180202/d2f69a74/attachment.html>


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