pgpool-IIはPostgreSQL専用のミドルウェアで,
PostgreSQLのデータベースクライアントとPostgreSQLサーバの間に割り込む形で動作し,
PostgrSQLに以下のような機能を追加します.
・コネクションプーリング::接続を保存し,再利用することで接続オーバヘッドを低減しスループット向上を図る
・負荷分散::多数のリクエストをそれぞれのサーバで分担して負荷を軽減させ,システム全体の性能を向上させることができます
・レプリケーション::物理的に2台以上のディスクにリアルタイムで書き込み処理を行い、万が一どれかのディスクに障害が発生しても運用を継続することができます.
・パラレルクエリ::それぞれのサーバに問い合わせを行い、問い合わせの処理時間を短縮
ここでの環境のポート番号は以下のようにしております
※PORT5439にて接続した場合はPGPOOL経由となりレプリケーションなどが働きます。
PGPOOLはメインDBにインストールしています
—————————————–
アプリ
↓
pgpool(5439)
↓ ↓
メインDB(5432) バックエンドDB(5432)
—————————————–
PGPOOLインストール
事前準備
su - mkdir /usr/local/pgpool chown postgres:postgres /usr/local/pgpool
展開&インストール
su postgres cd /usr/local/src/ % tar zxf pgpool-II-2.1.tar.gz % cd pgpool-II-2.1 % PATH=/usr/local/pgsql/bin:$PATH % ./configure --prefix=/usr/local/pgpool % make % make install % ls /usr/local/pgpool/bin/pgpool pgpool
パスの追加
~/.bashrcにパス追加
vi ~/.bashrc PATH="$PATH":/usr/local/pgsql/bin:/usr/local/pgpool/bin source ~/.bashrc
インストールが完了すると設定ファイルの雛形が
作成されるので、これをコピーする。
% cp /usr/local/pgpool/etc/pgpool.conf{.sample,}
% cp /usr/local/pgpool/etc/pcp.conf{.sample,}
% cp /usr/local/pgpool/etc/pool_hba.conf{.sample,}
以上の設定で、/usr/local/pgpool/etc/pgpool.confがpgpool-IIの設定ファイルになる。
PGPOOLの起動
起動するには、
※pgpoolⅡ2.5では/va/run/pgpoolというディレクトリが必要
permission:postgres:postgres
postgres postgres 4096 11月 21 16:05 pgpool
% pgpool -n &c
とコマンドを入力する。
PGPOOLの停止
% pgpool -n stop
PGPOOLの自動起動
pgpoolの起動ですが、
redhat系の場合は自動起動用のスクリプトが
pgpoolのソールディレクトリの
redhat/pgpool.initにあります。
(/usr/local/src/pgpool-II-2.1/redhat/pgpool.init)
スクリプトの最初の方の変数を適宜環境に合せて書き換えて、
vi /usr/local/src/pgpool-II-2.1/redhat/pgpool.init PGPOOLENGINE=/usr/local/pgpool/bin PGPOOLDAEMON=$PGPOOLENGINE/pgpool PGPOOLCONF=/usr/local/pgpool/etc/pgpool.conf PGPOOLPID=/tmp/pgpool.pid PGPOOLLOG=/var/log/pgpool.log
/etc/init.d/pgpoolにコピーします。
su - cp /usr/local/src/pgpool-II-2.1/redhat/pgpool.init /etc/init.d/pgpool
これで
/etc/init.d/pgpool start
で起動できます。
su - cp /usr/local/src/pgpool-II-2.1/redhat/pgpool.init /etc/init.d/pgpool vi /etc/init.d/pgpool chkconfig --add pgpool chkconfig pgpool on chkconfig --list pgpool 又は ntsysv でチェックする
PGPOOLの設定
それでは、実際にレプリケーションを行ってみる。
レプリケーションのために、pgpool.confに以下の項目を追加する。
なお、ここでの例ではPostgreSQLサーバが
localhostの5432ポートで動いているものとする。
vi /usr/local/pgpool/etc/pgpool.conf # Host name or IP address to listen on: '*' for all, '' for no TCP/IP # connections listen_addresses = '*' # Port number for pgpool port = 5439 # Port number for pgpool communication manager pcp_port = 9898 # レプリケーションの設定 # Replication mode replication_mode = true # ロードバランスの設定 # Load balancing mode, i.e., all SELECTs are load balanced. # This is ignored if replication_mode is false. load_balance_mode = true #set pgpool2 hostname pgpool2_hostname = '' # メインDB # system DB info system_db_hostname = 'localhost' system_db_port = 5432 system_db_dbname = 'pgpool' system_db_schema = 'pgpool_catalog' system_db_user = 'pgpool' system_db_password = '' # backend_hostname, backend_port, backend_weight # here are examples #バックエンド1 backend_hostname0 = 'バックエンドDB1' backend_port0 = 5432 backend_weight0 = 1 #backend_data_directory0 = '/data' #バックエンド2 backend_hostname1 = 'バックエンドDB2' backend_port1 = 5432 backend_weight1 = 1 #backend_data_directory1 = '/data1'
※メインDBのpostgres.confのPortは5432とする
設定ファイルの編集が完了したところでpgpoolを起動し、
レプリケーションされているかどうかを確認する。
まずはpgpool-IIに接続し、データベース、テーブル、データ5件を作成する。
% createdb -p 5439 replication (5439 番ポートへ接続) % psql -p 5439 replication replication=# CREATE TABLE rep (a INT); replication=# INSERT INTO rep SELECT generate_series(1, 10);
次に直接メインDBとバックエンドDBに5432ポートに接続し、実際にデータが5件作成されているかどうかを確認する。
メインDB % for p in 5432 ; do for> echo port: $p for> psql -p $p -c 'select count(*) from rep' replication for> done port: 5432 count ------- 5 (1 row) バックエンドDB port: 5432 count ------- 5 (1 row)
PGPOOLのステータス確認
psql -p 5439 replication show pool_status;






