はじめに
仕事の関係で検証環境にpgpool-Ⅱを構築する必要ができた。
普通、冗長構成を持たないWeb-DBサーバであればpgpool-Ⅱ構成は不要だけど
pgpool-Ⅱの検証のためにあえて作るってことであんまし実用性はないんだけど、思い出としてメモっとく。
参考
このとおりにやったらすぐできた!感謝
全体像を理解する際にこちらも参考にしました
コマンドまとめ
先によく使うコマンドまとめとく
PGPOOL側
# ノードの確認
pcp_node_info -v -h localhost -U pgpool -w
# ノードの接続
pcp_attach_node -h localhost -U pgpool -n 0 -w
# ノードの切り離し
pcp_detach_node -h localhost -U pgpool -n 0 -w
# DBサーバへの直接接続
psql -h nbfr151v -U postgres
# pgpool経由でのDB接続
psql -p 9999 -U postgres
# pgpoolの起動
sytemctl start pgpool
# pgpoolの停止
sytemctl stop pgpool
DB側
# PostgreSQL起動
pg_ctl -D ${PGDATA} start
# PostgreSQL停止
pg_ctl -D ${PGDATA} start
主要な設定ファイルまとめ
PGPOOL側
# サービス定義ファイル
/usr/lib/systemd/system/pgpool.service
# サービス定義ファイルのオプションまとめ
/etc/sysconfig/pgpool
# メインとなるPGPOOLの設定ファイル
/usr/local/pgpool-II/etc/pgpool.conf
# pcpプロトコル通信するときに使用するパスワード設定
/usr/local/pgpool-II/etc/pcp.conf
## ほかにもたくさんあるけどそこんところは参考資料を見ることにする
DB側
# メインとなるPostgreSQLの設定ファイル
/home/postgres/data/postgresql.conf
構成
※nbfr151v→nbdb151vは鍵認証でのssh通信が可能な状態になっていること
HOST名 | IPアドレス | 備考 |
---|---|---|
nbfr151v | 10.1.0.5 | Web(Tomcat+PGPOOL) |
nbdb151v | 10.1.0.7 | DB(PostgreSQL) |
Pgpool-Ⅱ構成に必要なポート
- 22(SSH)
- 5432(PostgreSQL)
- 9898(PCP)※pgpoolが使う独自の通信
- 9999(PGPOOL)※ユーザーがPGPOOL経由でDBにアクセスするとき使うポート
※ほかにもあるけどよく見かけるのはこれらになる
設定ファイル
PGPOOLの設定ファイルを載せておく。ほかの設定は参考資料のほうが参考になる。
nbfr151vにて設定。
内容精査はできてないのであくまで「この設定で動いた」っていう実績の意味で残してます。
/usr/local/pgpool-II/etc/pgpool.conf
[root@pgpool .ssh]# cat /usr/local/pgpool-II/etc/pgpool.conf | grep -v ^# | grep -v ^$
backend_clustering_mode = 'streaming_replication'
listen_addresses = '*'
port = 9999
pcp_listen_addresses = 'localhost'
pcp_port = 9898
pcp_socket_dir = '/tmp'
backend_hostname0 = '10.1.0.5'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/home/postgres/data'
backend_flag0 = 'ALWAYS_PRIMARY'
backend_application_name0 = '10.1.0.5'
log_destination = 'stderr'
logging_collector = on
log_directory = '/var/log/pgpool'
log_filename = 'pgpool-%Y-%m-%d_%H%M%S.log'
log_file_mode = 0600
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 10MB
sr_check_period = 10
sr_check_user = 'pgpool'
sr_check_database = 'postgres'
delay_threshold = 0
delay_threshold_by_time = 5
prefer_lower_delay_standby = on
follow_primary_command = '/usr/local/pgpool-II/etc/follow_primary.sh %d %h %p %D %m %H %M %P %r %R'
health_check_period = 10
health_check_timeout = 20
health_check_user = 'pgpool'
health_check_database = 'postgres'
health_check_max_retries = 0
health_check_retry_delay = 1
connect_timeout = 10000
failover_command = '/usr/local/pgpool-II/etc/failover.sh %d %h %p %D %m %H %M %P %r %R %N %S'
failover_on_backend_error = on
failover_on_backend_shutdown = on
detach_false_primary = on
search_primary_node_timeout = 5min
recovery_user = 'pgpool'
recovery_1st_stage_command = 'recovery_1st_stage'
recovery_timeout = 90
client_idle_limit_in_recovery = 10
auto_failback = on
auto_failback_interval = 1min
hostname0 = ''