pgpool-IIの3.6以降におけるフェイルオーバー時のクライアントセッション

pgpool-II 3.6以降のフェイルオーバー時のクライアントセッションについての検証。

ストリーミングレプリケーションモードにおいて、pgpool2では、データベース障害が発生した場合、障害の起きたデータベースサーバの切り替え(プライマリ)又は切り離し(スタンバイ)を行なってくれる。3.5より前は、pgpool2の子プロセスは全て再起動されるため、クライアントのセッションも全て切断されていた。しかし、3.6以降はセッションの切断の影響を最小限にするための改良が行われているようで、障害の起きたデータベースサーバがスタンバイである且つセッションで負荷分散対象先でない場合において、クライアントセッションは切断されないようになった(他の改善点などは、以下リリースノートを参照)。

http://www.pgpool.net/docs/latest/ja/html/release-3-6.html

ということで、この挙動について理解を深めるべく検証してみる。

環境構築

今回は、pgpool_setupコマンドを使って、同一ノード上でPostgreSQLのプライマリ及びセカンダリノード、pgpool2を動かした状態で確認した。以下環境である。

  • Mac OS X
  • pgpool2 3.6.6
  • PostgreSQL 9.5.6

psコマンドで確認しやすいよう、num_init_childrenは1、max_poolは2とした。

負荷分散先のスタンバイサーバがダウンした場合

まずプロセスツリーを確認しておく。

 |-+- 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_nodetrueとなっていることがわかる。このセッションでは、PostgreSQLのセカンダリサーバが負荷分散先となっていることがわかる。

$ 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)

プロセスの状態は以下のようになっている。プライマリ、セカンダリサーバのそれぞれにデータベースコネクション接続があることがわかる。

 |-+- 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

スタンバイサーバダウン

上記の状態でスタンバイサーバをダウンさせる。

$ pg_ctl -D data1 -m i stop

シャットダウン直後のプロセスツリーは以下。データベースのバックエンドプロセスは消えている。また、子プロセスは再起動され、プロセスIDが新しくなっていることが確認できる(1つは子プロセス、あとはPCPとworker)。

 |-+- 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

クライアントのセッションは切断されている、リトライでは成功する。

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)

負荷分散先でないスタンバイサーバがダウンした場合

プロセスツリーの確認。

 |-+- 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

クライアント接続

続いて、クライアントセッションの負荷分散先を確認し、トランザクション開始。

$ 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)
 |-+- 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

スタンバイサーバダウン

以下のコマンドで、スタンバイサーバの即時停止。

$ pg_ctl -D data1 -m i stop

スタンバイサーバダウン直後のプロセスツリー。pgpool2の子プロセス(PID:47185)は残っており、またプライマリサーバのバックエンドプロセスも残ったままとなっていることが確認できる。

 |-+- 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

クエリも引き続き実行でき、クライアントセッションは切断されていない。

foo=# select count(*) from foo_t;
 count 
-------
   100
(1 row)

foo=# \q

クライアントのセッションが終了すると、該当する子プロセスは再起動される。

プライマリサーバがダウンした場合

この場合は、負荷分散先に関わらずクライアントのセッションは切断される。

プロセス状態。

 |-+- 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

クライアント接続

負荷分散先をセカンダリサーバにした状態で行なう。

$ 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)
 |-+- 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

プライマリサーバダウン

$ pg_ctl -D data0 -m i stop

プライマリサーバダウン後の切り替え後のプロセス状態。pgpool2の子プロセスは再起動されている。

 |-+- 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

クライアントセッションは切断されるが、リトライで成功する。

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以降)

プライマリ セカンダリ
障害発生 ダウン ダウン
負荷分散対象 ✖️
クライアントセッション ✖️ ✖️

参考リンク

byebyehaikikyou

日記やIT系関連のネタ、WordPressに関することなど様々な事柄を書き付けた雑記です。ITエンジニア経験があるのでプログラミングに関することなどが多いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする

Translate »