PostgreSQL
pgpool
pgpool-II

Linuxへのpgpool-IIの導入と基本的な設定

More than 3 years have passed since last update.


はじめに

本記事は旧バージョンで説明です。最新のバージョンは、下記の記事が参考になります。

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標準のレプリケーションとの使い分けがいりそう。

パラレルクエリについては、よくわかっていないので使うタイミングが来たら調べる。