pgpool-II 3.6以降のフェイルオーバー時のクライアントセッションについての検証。
ストリーミングレプリケーションモードにおいて、pgpool2では、データベース障害が発生した場合、障害の起きたデータベースサーバの切り替え(プライマリ)又は切り離し(スタンバイ)を行なってくれる。3.5より前は、pgpool2の子プロセスは全て再起動されるため、クライアントのセッションも全て切断されていた。しかし、3.6以降はセッションの切断の影響を最小限にするための改良が行われているようで、障害の起きたデータベースサーバがスタンバイである且つセッションで負荷分散対象先でない場合において、クライアントセッションは切断されないようになった(他の改善点などは、以下リリースノートを参照)。
ということで、この挙動について理解を深めるべく検証してみる。
環境構築
今回は、pgpool_setup
コマンドを使って、同一ノード上でPostgreSQLのプライマリ及びセカンダリノード、pgpool2を動かした状態で確認した。以下環境である。
- Mac OS X
- pgpool2 3.6.6
- PostgreSQL 9.5.6
psコマンドで確認しやすいよう、num_init_children
は1、max_pool
は2とした。
負荷分散先のスタンバイサーバがダウンした場合
まずプロセスツリーを確認しておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|-+- 14568 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 14569 guest postgres: logger process | |--= 14571 guest postgres: checkpointer process | |--= 14572 guest postgres: writer process | |--= 14573 guest postgres: wal writer process | |--= 14574 guest postgres: autovacuum launcher process | |--= 14575 guest postgres: archiver process | |--= 14576 guest postgres: stats collector process | \--= 14599 guest postgres: wal sender process guest [local] streaming 0/50000D0 |-+- 14591 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 14592 guest postgres: logger process | |--= 14593 guest postgres: startup process recovering 000000010000000000000005 | |--= 14594 guest postgres: checkpointer process | |--= 14595 guest postgres: writer process | |--= 14597 guest postgres: stats collector process | \--= 14598 guest postgres: wal receiver process streaming 0/50000D0 |-+- 14608 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 14614 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 14616 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 14617 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クライアント接続
同一ノード上からpsqlコマンドで接続した。JDBCのようなドライバでは拡張プロトコルとなるが、拡張プロトコルでは、show pool_nodes
コマンドが使えない。よって、psqlコマンドを使用している。
psqlから接続した状態は以下である。showコマンドで負荷分散先が表示される。負荷分散先は、load_balance_node
がtrue
となっていることがわかる。このセッションでは、PostgreSQLのセカンダリサーバが負荷分散先となっていることがわかる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ psql -p 11000 foo psql (9.5.6) Type "help" for help. foo=# show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+-------+--------+-----------+---------+------------+-------------------+------------------- 0 | /tmp | 11002 | up | 0.500000 | primary | 0 | false | 0 1 | /tmp | 11003 | up | 0.500000 | standby | 0 | true | 0 (2 rows) foo=# BEGIN; BEGIN foo=# select count(*) from foo_t; count ------- 100 (1 row) |
プロセスの状態は以下のようになっている。プライマリ、セカンダリサーバのそれぞれにデータベースコネクション接続があることがわかる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|-+- 14568 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 14569 guest postgres: logger process | |--= 14571 guest postgres: checkpointer process | |--= 14572 guest postgres: writer process | |--= 14573 guest postgres: wal writer process | |--= 14574 guest postgres: autovacuum launcher process | |--= 14575 guest postgres: archiver process | |--= 14576 guest postgres: stats collector process | |--= 14599 guest postgres: wal sender process guest [local] streaming 0/50000D0 | \--= 15299 guest postgres: guest foo [local] idle in transaction |-+- 14591 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 14592 guest postgres: logger process | |--= 14593 guest postgres: startup process recovering 000000010000000000000005 | |--= 14594 guest postgres: checkpointer process | |--= 14595 guest postgres: writer process | |--= 14597 guest postgres: stats collector process | |--= 14598 guest postgres: wal receiver process streaming 0/50000D0 | \--= 15300 guest postgres: guest foo [local] idle in transaction |-+- 14608 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 14614 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 14616 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 14617 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
スタンバイサーバダウン
上記の状態でスタンバイサーバをダウンさせる。
1 |
$ pg_ctl -D data1 -m i stop |
シャットダウン直後のプロセスツリーは以下。データベースのバックエンドプロセスは消えている。また、子プロセスは再起動され、プロセスIDが新しくなっていることが確認できる(1つは子プロセス、あとはPCPとworker)。
1 2 3 4 5 6 7 8 9 10 11 12 |
|-+- 14568 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 14569 guest postgres: logger process | |--= 14571 guest postgres: checkpointer process | |--= 14572 guest postgres: writer process | |--= 14573 guest postgres: wal writer process | |--= 14574 guest postgres: autovacuum launcher process | |--= 14575 guest postgres: archiver process | \--= 14576 guest postgres: stats collector process |-+- 14608 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 15601 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 15612 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 15613 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クライアントのセッションは切断されている、リトライでは成功する。
1 2 3 4 5 6 7 8 9 10 11 12 |
foo=# select count(*) from foo_t; WARNING: write on backend 1 failed with error :"Broken pipe" DETAIL: while trying to write data from offset: 0 wlen: 5 server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. foo=# select count(*) from foo_t; count ------- 100 (1 row) |
負荷分散先でないスタンバイサーバがダウンした場合
プロセスツリーの確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|-+- 47140 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 47141 guest postgres: logger process | |--= 47143 guest postgres: checkpointer process | |--= 47144 guest postgres: writer process | |--= 47145 guest postgres: wal writer process | |--= 47146 guest postgres: autovacuum launcher process | |--= 47147 guest postgres: archiver process | |--= 47148 guest postgres: stats collector process | \--= 47166 guest postgres: wal sender process guest [local] streaming 0/5000098 |-+- 47159 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 47160 guest postgres: logger process | |--= 47161 guest postgres: startup process recovering 000000010000000000000005 | |--= 47162 guest postgres: checkpointer process | |--= 47163 guest postgres: writer process | |--= 47164 guest postgres: stats collector process | \--= 47165 guest postgres: wal receiver process streaming 0/5000098 |-+- 47177 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47185 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47187 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 47188 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クライアント接続
続いて、クライアントセッションの負荷分散先を確認し、トランザクション開始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ psql -p 11000 foo psql (9.5.6) Type "help" for help. foo=# show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+-------+--------+-----------+---------+------------+-------------------+------------------- 0 | /tmp | 11002 | up | 0.500000 | primary | 0 | true | 0 1 | /tmp | 11003 | up | 0.500000 | standby | 0 | false | 0 (2 rows) foo=# BEGIN; BEGIN foo=# select count(*) from foo_t; count ------- 100 (1 row) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|-+- 47140 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 47141 guest postgres: logger process | |--= 47143 guest postgres: checkpointer process | |--= 47144 guest postgres: writer process | |--= 47145 guest postgres: wal writer process | |--= 47146 guest postgres: autovacuum launcher process | |--= 47147 guest postgres: archiver process | |--= 47148 guest postgres: stats collector process | |--= 47166 guest postgres: wal sender process guest [local] streaming 0/50000D0 | \--= 47343 guest postgres: guest foo [local] idle in transaction |-+- 47159 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 47160 guest postgres: logger process | |--= 47161 guest postgres: startup process recovering 000000010000000000000005 | |--= 47162 guest postgres: checkpointer process | |--= 47163 guest postgres: writer process | |--= 47164 guest postgres: stats collector process | |--= 47165 guest postgres: wal receiver process streaming 0/50000D0 | \--= 47344 guest postgres: guest foo [local] idle |-+- 47177 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47185 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47187 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 47188 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
スタンバイサーバダウン
以下のコマンドで、スタンバイサーバの即時停止。
1 |
$ pg_ctl -D data1 -m i stop |
スタンバイサーバダウン直後のプロセスツリー。pgpool2の子プロセス(PID:47185)は残っており、またプライマリサーバのバックエンドプロセスも残ったままとなっていることが確認できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|-+- 47140 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 47141 guest postgres: logger process | |--= 47143 guest postgres: checkpointer process | |--= 47144 guest postgres: writer process | |--= 47145 guest postgres: wal writer process | |--= 47146 guest postgres: autovacuum launcher process | |--= 47147 guest postgres: archiver process | |--= 47148 guest postgres: stats collector process | \--= 47343 guest postgres: guest foo [local] idle in transaction |-+- 47177 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47185 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 47876 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 47878 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クエリも引き続き実行でき、クライアントセッションは切断されていない。
1 2 3 4 5 6 7 |
foo=# select count(*) from foo_t; count ------- 100 (1 row) foo=# \q |
クライアントのセッションが終了すると、該当する子プロセスは再起動される。
プライマリサーバがダウンした場合
この場合は、負荷分散先に関わらずクライアントのセッションは切断される。
プロセス状態。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|-+- 49086 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 49087 guest postgres: logger process | |--= 49089 guest postgres: checkpointer process | |--= 49090 guest postgres: writer process | |--= 49091 guest postgres: wal writer process | |--= 49092 guest postgres: autovacuum launcher process | |--= 49093 guest postgres: archiver process | |--= 49094 guest postgres: stats collector process | \--= 49112 guest postgres: wal sender process guest [local] streaming 0/6000098 |-+- 49105 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 49106 guest postgres: logger process | |--= 49107 guest postgres: startup process recovering 000000010000000000000006 | |--= 49108 guest postgres: checkpointer process | |--= 49109 guest postgres: writer process | |--= 49110 guest postgres: stats collector process | \--= 49111 guest postgres: wal receiver process streaming 0/6000098 |-+- 49121 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49127 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49129 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 49130 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クライアント接続
負荷分散先をセカンダリサーバにした状態で行なう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ psql -p 11000 foo psql (9.5.6) Type "help" for help. foo=# show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+-------+--------+-----------+---------+------------+-------------------+------------------- 0 | /tmp | 11002 | up | 0.500000 | primary | 0 | false | 0 1 | /tmp | 11003 | up | 0.500000 | standby | 0 | true | 0 (2 rows) foo=# BEGIN; BEGIN foo=# select count(*) from foo_t; count ------- 100 (1 row) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|-+- 49086 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data0 | |--= 49087 guest postgres: logger process | |--= 49089 guest postgres: checkpointer process | |--= 49090 guest postgres: writer process | |--= 49091 guest postgres: wal writer process | |--= 49092 guest postgres: autovacuum launcher process | |--= 49093 guest postgres: archiver process | |--= 49094 guest postgres: stats collector process | |--= 49112 guest postgres: wal sender process guest [local] streaming 0/60000D0 | \--= 49276 guest postgres: guest foo [local] idle in transaction |-+- 49105 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 49106 guest postgres: logger process | |--= 49107 guest postgres: startup process recovering 000000010000000000000006 | |--= 49108 guest postgres: checkpointer process | |--= 49109 guest postgres: writer process | |--= 49110 guest postgres: stats collector process | |--= 49111 guest postgres: wal receiver process streaming 0/60000D0 | \--= 49277 guest postgres: guest foo [local] idle in transaction |-+- 49121 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49127 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49129 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 49130 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
プライマリサーバダウン
1 |
$ pg_ctl -D data0 -m i stop |
プライマリサーバダウン後の切り替え後のプロセス状態。pgpool2の子プロセスは再起動されている。
1 2 3 4 5 6 7 8 9 10 11 12 |
|-+- 49105 guest /Users/guest/workspace/github/pgenv/versions/9.5.6/bin/postgres -D /Users/guest/workspace/pgpool/test/data1 | |--= 49106 guest postgres: logger process | |--= 49108 guest postgres: checkpointer process | |--= 49109 guest postgres: writer process | |--= 49110 guest postgres: stats collector process | |--= 49561 guest postgres: wal writer process | |--= 49562 guest postgres: autovacuum launcher process | \--= 49563 guest postgres: archiver process last was 00000002.history |-+- 49121 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49577 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | |--- 49589 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf | \--- 49590 guest /Users/guest/workspace/pgpool/pgpool2/bin/pgpool -D -n -f /Users/guest/workspace/pgpool/test/etc/pgpool.conf -F /Users/guest/workspace/pgpool/test/etc/pcp.conf -a /Users/guest/workspace/pgpool/test/etc/pool_hba.conf |
クライアントセッションは切断されるが、リトライで成功する。
1 2 3 4 5 6 7 8 9 10 11 12 |
foo=# select count(*) from foo_t; WARNING: write on backend 0 failed with error :"Broken pipe" DETAIL: while trying to write data from offset: 0 wlen: 5 server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded. foo=# select count(*) from foo_t; count ------- 100 (1 row) |
まとめ
以上まとめると、以下のようになっている。(と思われる、3.6以降)
プライマリ | セカンダリ | ||
---|---|---|---|
障害発生 | ダウン | ダウン | |
負荷分散対象 | ー | ✖️ | ◯ |
クライアントセッション | ✖️ | ◯ | ✖️ |
参考リンク
- http://www.pgpool.net/docs/latest/ja/html/release-3-6.html
- http://pgsqlpgpool.blogspot.jp/2016/07/avoiding-session-disconnection-while.html
- http://www.pgpool.net/pgpool-web/contrib_docs/pgpool-II-internal-1.pdf
- https://www.sraoss.co.jp/event_seminar/2017/20170914-pgpool.pdf
コメント