pgpool_setup

名前

pgpool_setup --  Pgpool-II クラスタのテスト環境を構築するツール

概要

pgpool_setup [option...]

説明

pgpool_setup はカレントディレクトリで Pgpool-II とノード数が指定できる複数の PostgreSQL のクラスタテスト環境を構築するツールです。 カレントディレクトリは空である必要があります。

pgpool_setup はテストのために使うツールなので、 実際の業務システムで利用することはおすすめしません。

pgpool_setup はlocalhostに対してsshを実行します。 パスワード無しでsshでlocalhostにログインできるように事前に設定してください。

現在、「ストリーミングレプリケーションモード」、「ネイティブレプリケーションモード」、「raw モード」、「ロジカルレプリケーションモード」及び「スナップショットアイソレーションモード」に対応しています。 Watchdog の対応については watchdog_setup をご参照下さい。

オプション

pgpool_setup は以下のコマンドライン引数を受け付けます:

-m mode

動作モードを指定します。moder (ネイティブレプリケーションモード), s (ストリーミングレプリケーションモード)、n (raw モード)、l (ロジカルレプリケーションモード)、y(slonyモード)及びi(スナップショットアイソレーションモード)を指定できます。 指定しない場合は、s (ストリーミングレプリケーションモード) を指定したと見なされます。

-n num_clusters

PostgreSQL のノード数を指定します。指定しない場合は、ノード数が 2 です。

-p base_port

ベースとなるポート番号を指定します。 Pgpool-II のポートは base_port、pcp のポートは base_port + 1、 最初の PostgreSQL ノードのポートは base_port + 2、 2 番目の PostgreSQL ノードのポートは base_port + 3 というようになります。

-pg オプションを指定した場合、 最初の PostgreSQL ノードのポートは pg_base_port、 2 番目の PostgreSQL ノードのポートは pg_base_port + 1 というように割り当てていきます。

指定しない場合、ベースとなるポート番号は 11000 です。

-pg pg_base_port

PostgreSQL のベースとなるポート番号を指定します。 最初の PostgreSQL ノードのポートは pg_base_port、 2 番目の PostgreSQL ノードのポートは pg_base_port + 1 というようになります。

省略した場合は、 base_port+2 が使われます。

--no-stop

セットアップ終了後に Pgpool-II, PostgreSQL を終了しません。

-d

デバッグモードで Pgpool-II を起動します。

-s

ストリーミングレプリケーションモードの時に、アーカイブの代わりにレプリケーションスロットを使います。 アーカイブディレクトリはPostgreSQLクラスタに共有されているので、スタンバイが昇格すると、アーカイアブディレクトリ内のタイムラインが変わり、他のスタンバイが停止してしまいます。 レプリケーションスロットを使うとこの問題が起きないので、レプリケーションスロットをサポートしているPostgreSQL 9.4以降が使えるのであれば、常にレプリケーションスロットを使うのがお勧めです。 pgpool_setupが使うレプリケーションスロット名は、pgpool_setup_slotです。

-r

リカバリスクリプト(basebackup.sh)中でpg_rewindを使います。 このコマンドが失敗すると、通常のrsyncを使います。 pg_rewindは、データベースクラスタのすべてをコピーしないので、rsyncに比べてずっと高速になることがあります。

-e

PostgreSQLデータベースクラスタの作成を省略します。このオプションはwatchdog_setupで使われることを想定しており、おそらく他の目的の役には立たないでしょう。

-t

regression testが既存のインストールに対して実行できるように、pgpool.confに追加のパラメータを設定します。 今の所、そのようなパラメータとしてはhealth_check_testがあります。

-c

/etc/pgpool-II/ディレクトリにインストールされているサンプルスクリプトと設定ファイルを使います。

このオプションは、Pgpool-IIのRPMパッケージに含まれているサンプルスクリプトと設定ファイルをテストする目的で追加されたオプションです。 このオプションを指定する前に、サンプルスクリプトと設定ファイルが/etc/pgpool-II/ディレクトリにインストールされていることを確認してください。

環境変数

pgpool_setup は以下の環境変数を使用します:

PGPOOL_INSTALL_DIR

Pgpool-II のインストールディレクトリを指定します。 Pgpool-II バイナリーは PGPOOL_INSTALL_DIR/bin ディレクトリ以下、 pgpool.confpool_hba.conf などは PGPOOL_INSTALL_DIR/etc ディレクトリ以下にインストールされます。 デフォルトでは /usr/local ディレクトリ以下にインストールされます。

PGPOOLDIR

Pgpool-II 設定ファイルへのパスを指定します。 デフォルトでは PGPOOL_INSTALL_DIR/etc です。

PGBIN

initdb、pg_ctl と psql など PostgreSQL コマンドへのパスを指定します。 デフォルトでは、/usr/local/pgsql/bin です。

PGLIB

PostgreSQL の共有ライブラリへのパスを指定します。 デフォルトでは、/usr/local/pgsql/lib です。

PGSOCKET_DIR

Unixソケットのディレクトリへのパスを指定します。 デフォルトでは /tmp です。

INITDBARG

initdb コマンドの引数を指定します。 デフォルトでは "--no-locale -E UTF_8" です。

USE_REPLICATION_SLOT

ストリーミングレプリケーション環境において、この環境変数が"true"に指定されると、アーカイブログの代わりにレプリケーションスロットを使います。 これは、"-s"オプションを使ったのと同じ効果をもたらします。

USE_PG_REWIND

ストリーミングレプリケーション環境において、この環境変数が"true"に指定されると、basebackup.sh中でpg_rewindを使います。 これは、"-r"オプションを使ったのと同じ効果をもたらします。

ENABLE_TEST

"true"ならあたかも"-t"オプションが与えられたかのように振る舞います。

TEST_SAMPLES

"true"ならあたかも"-c"オプションが与えられたかのように振る舞います。

出力例

$ pgpool_setup 
PostgreSQL major version: 124
Starting set up in streaming replication mode
creating startall and shutdownall
creating failover script
creating database cluster /tmp/test/data0...done.
update postgresql.conf
creating pgpool_remote_start
creating basebackup.sh
creating recovery.conf
creating database cluster /tmp/test/data1...done.
update postgresql.conf
creating pgpool_remote_start
creating basebackup.sh
creating recovery.conf
temporarily start data0 cluster to create extensions
temporarily start pgpool-II to create standby nodes
 node_id | hostname | port  | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change  
---------+----------+-------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
 0       | /tmp     | 11002 | up     | 0.500000  | primary | 0          | true              | 0                 |                   |                        | 2020-08-18 13:50:19
 1       | /tmp     | 11003 | down   | 0.500000  | standby | 0          | false             | 0                 |                   |                        | 2020-08-18 13:50:18
(2 rows)

recovery node 1...pcp_recovery_node -- Command Successful
done.
creating follow primary script
 node_id | hostname | port  | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change  
---------+----------+-------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
 0       | /tmp     | 11002 | up     | 0.500000  | primary | 0          | true              | 0                 |                   |                        | 2020-08-18 13:50:19
 1       | /tmp     | 11003 | up     | 0.500000  | standby | 0          | false             | 0                 |                   |                        | 2020-08-18 13:50:23
(2 rows)

shutdown all

pgpool-II setting for streaming replication mode is done.
To start the whole system, use /tmp/test/startall.
To shutdown the whole system, use /tmp/test/shutdownall.
pcp command user name is "t-ishii", password is "t-ishii".
Each PostgreSQL, pgpool-II and pcp port is as follows:
#1 port is 11002
#2 port is 11003
pgpool port is 11000
pcp port is 11001
The info above is in README.port.
t-ishii$ ./startall 
waiting for server to start....5744 2020-08-18 13:50:27 JST LOG:  starting PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
5744 2020-08-18 13:50:27 JST LOG:  listening on IPv4 address "0.0.0.0", port 11002
5744 2020-08-18 13:50:27 JST LOG:  listening on IPv6 address "::", port 11002
5744 2020-08-18 13:50:27 JST LOG:  listening on Unix socket "/tmp/.s.PGSQL.11002"
5744 2020-08-18 13:50:27 JST LOG:  redirecting log output to logging collector process
5744 2020-08-18 13:50:27 JST HINT:  Future log output will appear in directory "log".
 done
server started
waiting for server to start....5757 2020-08-18 13:50:27 JST LOG:  starting PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
5757 2020-08-18 13:50:27 JST LOG:  listening on IPv4 address "0.0.0.0", port 11003
5757 2020-08-18 13:50:27 JST LOG:  listening on IPv6 address "::", port 11003
5757 2020-08-18 13:50:27 JST LOG:  listening on Unix socket "/tmp/.s.PGSQL.11003"
5757 2020-08-18 13:50:27 JST LOG:  redirecting log output to logging collector process
5757 2020-08-18 13:50:27 JST HINT:  Future log output will appear in directory "log".
 done
server started
t-ishii$ psql -p 11000 test
psql (12.4)
Type "help" for help.

test=# show pool_nodes;
 node_id | hostname | port  | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change  
---------+----------+-------+--------+-----------+---------+------------+-------------------+-------------------+-------------------+------------------------+---------------------
 0       | /tmp     | 11002 | up     | 0.500000  | primary | 0          | true              | 0                 |                   |                        | 2020-08-18 13:50:32
 1       | /tmp     | 11003 | up     | 0.500000  | standby | 0          | false             | 0                 | streaming         | async                  | 2020-08-18 13:50:32
(2 rows)