はじめに
本記事は旧バージョンで説明です。最新のバージョンは、下記の記事が参考になります。
pgpool-IIの機能を理解して、インストールと設定をする ( 入門編 )
概要
pgpool-IIを試したいが、公式ドキュメントをすべて読むのが大変という方向けに、とりあえず動かすまでの基本知識と導入手順をまとめる。
pgpool-IIとは
PostgreSQLへの接続に利用するミドルウェア。コネクションプールやクエリキャッシュ・負荷分散機能がある。
アプリケーションとPostgreSQLを透過的に中継するので、現状の作りのまま導入ができる。
詳細はこちら参照。
http://www.pgpool.net/docs/pgpool-II-3.3.3/doc/pgpool-ja.html
pgpool-IIの導入判断
Javaであれば、アプリケーションサーバで代替できる機能もあるため、そちらとの比較が必要。
PHP等の場合は、コネクションプール目的だけでも導入する価値がある。
pgpool-IIの動作モード
以下の4つのモードがある。
- rawモード
- レプリケーションモード
- マスタスレーブモード
- パラレルクエリモード
今回は、DBサーバ1台構成を想定し「rawモード」で導入する。
pgpool-IIの導入サーバ
どのサーバに導入するかは、以下の3つの選択肢がある。
- 専用サーバの配置
- WEBサーバ・アプリケーションサーバと同居
- DBサーバと同居
今回は、以下の理由でWEBサーバと同居させる。
- 専用サーバ配置は、1台だとpgpool自体が単一障害点になる。複数台にすると専用のHAの仕組みが必要となる。
- WEBサーバ配置は、WEBサーバを複数台構成にすると、pgpoll自体も単一障害点でなくなる。将来的にDBサーバが複数台構成になった場合にも、アプリを変更せずに対応できる。
- DBサーバは配置は、将来的にDBサーバが複数台構成になった場合に、アプリ側で振り分けが必要となってしまう。
pgpoolの導入
環境
- CentOS 6.5
- PosgreSQL 9.3
- pgpool-II 3.3.3
pgpool-II インストール
yum -y install http://www.pgpool.net/download.php?f=pgpool-II-pg93-3.3.3-3.pgdg.x86_64.rpm
pgpool-II 初期設定
/etc/pgpool-II/pgpool.confが主要な設定ファイル。
ほぼ初期設定のままで、下記のみを変更する。
データベースの接続情報
backend_hostname0 = '10.0.1.10'
backend_port0 = 5432
コネクションプールの設定
num_init_children = 64 # pgpoolへの接続数
max_pool = 1 # DBユーザ名・データベース名毎に一つ
オンメモリクエリキャッシュの設定
memory_cache_enabled = on # 有効にする
必要なディレクトリを作る。
mkdir /var/run/pgpool
mkdir /var/log/pgpool
chown postgres:postgres /var/log/pgpool/
chown postgres:postgres /var/run/pgpool/
pool_passwdファイルがないと、エラーログが出るのでダミーファイル作成
vi /etc/pgpool-II/pool_passwd
chown postgres:postgres /etc/pgpool-II/pool_passwd
自動起動を有効化
chkconfig pgpool on
アプリケーション側の設定変更
元々、データベースサーバを指定しているIP・Portを、pgpoolを指定するように変更する。
デフォルトであれば、IPはlocalhost、Portを9999に変更する。ユーザ・パスワードは変更不要。
起動と確認
Serviceへ登録されているので、起動は以下のコマンド。
service pgpool start
ログはデフォルトでは、「/var/log/pgpool.log」に出力されるので、うまくいかなければ確認する。
ログ出力場所は、「/etc/init.d/pgpool」に記載されている。
最後に
上記の通りに導入は非常に簡単。
接続数がそれなりにあるアプリケーションであれば、コネクションプールとオンメモリクエリキャッシュのみの利用でも、効果が出るはず。
レプリケーションについては、PostgreSQL標準のレプリケーションとの使い分けがいりそう。
パラレルクエリについては、よくわかっていないので使うタイミングが来たら調べる。