PostgreSQL用クラスタリングツール「pgpool-II」のインストール

PostgreSQL用クラスタリングツール「pgpool-II」のインストール

PostgreSQLのクラスタリングツール、「pgpool-II」のインストールメモ。

【環境】

  • CentOS5.6
  • Postgresql8.1
  • 1台のサーバで、本体のPostgreSQL+サブノードを2つ稼動させる

【インストール】

まず最初にlibpqが必要になるので、必要なパッケージをインストールします

$ sudo yum install postgresql-devel

以下のコマンドでインストールします

$ cd /usr/local/src/
$ sudo wget http://pgfoundry.org/frs/download.php/3164/pgpool-II-3.0.5.tar.gz
$ sudo tar zxf pgpool-II-3.0.5.tar.gz
$ cd pgpool-II-3.0.5
$ sudo ./configure
$ sudo make
$ sudo make install

【設定ファイル】

設定ファイルをサンプルからコピーする

$ cd /usr/local/etc
$ sudo cp pgpool.conf.sample pgpool.conf
$ sudo cp pcp.conf.sample pcp.conf

$ sudo vim pgpool.conf
\# Replication mode
replication_mode = on

\# Load balancing mode, i.e., all SELECTs are load balanced.
load_balance_mode = on

【パスワードを取得する】

pcp.confに記載する為のパスワードを取得します

$ pg_md5 -p
password: (パスワードを入力)

パスワードを記述

$ cd /usr/local/etc
$ vim pcp.conf

【pgpool管理ツール pgpoolAdminのインストール】

pgpool管理ツールの、pgpoolAdminをインストールします
ソースは、pgFoundryのここからダウンロードします

$ cd /usr/local/src
$ sudo wget http://pgfoundry.org/frs/download.php/3149/pgpoolAdmin-3.1.0.tar.gz
$ sudo tar zxf pgpoolAdmin-3.1.0.tar.gz
$ sudo mv pgpoolAdmin-3.1.0 /var/www/html/

apacheのconfに以下のような設定を入力します

$ sudo /etc/httpd/conf.d/vhost/pgpooladmin.conf
\#
\#pgpoolAdmin
\#
Alias /pgpooladmin “/var/www/pgpoolAdmin-3.1.0”

AllowOverride All
Order allow,deny
Allow from all

設定は、各自の環境に合わせてください

apacheを再起動します

$ sudo /etc/rc.d/init.d/httpd restart

【データベースノードの準備】

PostgreSQLを複数ノードで起動させる為、ノードを作成します
2台構成を想定しているので、ここではdata2を作成します

$ su – postgres

/var/lid/pgsql/data2をディレクトリとするノードを作成

postgres $ initdb -D /var/lib/pgsql/data2
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.

The database cluster will be initialized with locale en_US.
The default database encoding has accordingly been set to LATIN1.

creating directory /var/lib/pgsql/data2 … ok
creating directory /var/lib/pgsql/data2/global … ok
creating directory /var/lib/pgsql/data2/pg_xlog … ok
creating directory /var/lib/pgsql/data2/pg_xlog/archive_status … ok
creating directory /var/lib/pgsql/data2/pg_clog … ok
creating directory /var/lib/pgsql/data2/pg_subtrans … ok
creating directory /var/lib/pgsql/data2/pg_twophase … ok
creating directory /var/lib/pgsql/data2/pg_multixact/members … ok
creating directory /var/lib/pgsql/data2/pg_multixact/offsets … ok
creating directory /var/lib/pgsql/data2/base … ok
creating directory /var/lib/pgsql/data2/base/1 … ok
creating directory /var/lib/pgsql/data2/pg_tblspc … ok
selecting default max_connections … 100
selecting default shared_buffers … 1000
creating configuration files … ok
creating template1 database in /var/lib/pgsql/data2/base/1 … ok
initializing pg_authid … ok
enabling unlimited row size for system tables … ok
initializing dependencies … ok
creating system views … ok
loading pg_description … ok
creating conversions … ok
setting privileges on built-in objects … ok
creating information schema … ok
vacuuming database template1 … ok
copying template1 to template0 … ok
copying template1 to postgres … ok

WARNING: enabling “trust” authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

postmaster -D /var/lib/pgsql/data2

or
pg_ctl -D /var/lib/pgsql/data2 -l logfile start

/var/lid/pgsql/data3をディレクトリとするノードを作成

postgres $ initdb -D /var/lib/pgsql/data3
The files belonging to this database system will be owned by user “postgres”.
This user must also own the server process.

The database cluster will be initialized with locale en_US.
The default database encoding has accordingly been set to LATIN1.

creating directory /var/lib/pgsql/data3 … ok
creating directory /var/lib/pgsql/data3/global … ok
creating directory /var/lib/pgsql/data3/pg_xlog … ok
creating directory /var/lib/pgsql/data3/pg_xlog/archive_status … ok
creating directory /var/lib/pgsql/data3/pg_clog … ok
creating directory /var/lib/pgsql/data3/pg_subtrans … ok
creating directory /var/lib/pgsql/data3/pg_twophase … ok
creating directory /var/lib/pgsql/data3/pg_multixact/members … ok
creating directory /var/lib/pgsql/data3/pg_multixact/offsets … ok
creating directory /var/lib/pgsql/data3/base … ok
creating directory /var/lib/pgsql/data3/base/1 … ok
creating directory /var/lib/pgsql/data3/pg_tblspc … ok
selecting default max_connections … 100
selecting default shared_buffers … 1000
creating configuration files … ok
creating template1 database in /var/lib/pgsql/data3/base/1 … ok
initializing pg_authid … ok
enabling unlimited row size for system tables … ok
initializing dependencies … ok
creating system views … ok
loading pg_description … ok
creating conversions … ok
setting privileges on built-in objects … ok
creating information schema … ok
vacuuming database template1 … ok
copying template1 to template0 … ok
copying template1 to postgres … ok

WARNING: enabling “trust” authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

postmaster -D /var/lib/pgsql/data3

or
pg_ctl -D /var/lib/pgsql/data3 -l logfile start

【各ノードのポート番号変更】

各ノードのポート番号を変更します

$ sudo vim /var/lib/pgsql/data2/pg_hba.conf
\#port = 5432
port = 5433

$ sudo vim /var/lib/pgsql/data3/pg_hba.conf
\#port = 5432
port = 5434

これで、デフォルトのpostgresqlが5432、追加ノードが5433、5434で起動できるようになりました

【ファイアウォール設定】

ファイアウォールで、5433、5434、9898、9999のポートを開放します

$ sudo vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5433 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5434 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 9898 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 9999 -j ACCEPT

iptables再起動

$ sudo /etc/rc.di/init.d/iptables restart

【各ノードの起動】

以下のコマンドで、追加したノードを起動します

ノード1

$ sudo su – postgres
postgres $ pg_ctl -D /var/lib//pgsql/data2 -o “-p 5433” start

ノード2

$ sudo su – postgres
postgres $ pg_ctl -D /var/lib//pgsql/data3 -o “-p 5434” start

接続確認

$ psql -p 5433 -U postgres
$ psql -p 5434 -U postgres

【pgpoolAdminのインストール設定】

以下のURLへアクセスして、pgpoolAdminのインストールを完了します

http://*servername*/pgpooladmin/install/index.php

ページへアクセスするとパーミッション関連のチェックがあるので、以下を設定します

$ cd /var/www/html/pgpooladmin
$ sudo chown apache conf/pgmgt.conf.php
$ sudo chmod 664 conf/pgmgt.conf.php
$ sudo chmod 777 templates_c

$ cd /usr/local/etc
$ sudo chown apache pgpool.conf pcp.conf
$ sudo chmod 664 pgpool.conf pcp.conf

インストール後、「/install」ディレクトリを削除します

【pgpoolの起動】

pgpoolの起動に当たって必要なディレクトリの作成とパーミッション設定を行います

$ sudo mkdir /var/run/pgpool
$ sudo chmod 777 /var/run/pgpool

$ sudo mkdir /var/log/pgpool
$ sudo chmod 777 /var/log/pgpool

以下のコマンドで、pgpoolを起動します

$ sudo pgpool -n -d > /var/log/pgpool/pgpool.log 2>&1 &

または、pgpoolAdminから起動します

【pgpoolステータスの確認と検証】

pgpoolAdminの「pgpoolステータス」ページで、全てのノードが「ノード稼働中」となっていることを確認します

確認後、以下のコマンドでデータベースを作成します

$ createdb -p 9999 bench -U postgres

実行後、各ノードでデータベースが作成されていることを確認します

例:

$ psql -p 5432 -U postgres
postgres\# \l

【pgbenchの実行】

pgbenchをインストールします

$ sudo yum install postgresql-contrib

pgbenchを利用して、ベンチマークを行います

$ pgbench -i -p 9999 bench

各DBに、以下のレコード数が登録されていることを確認します

テーブル名 行数
branches 1
tellers 10
accounts 100000
history 0

【サービス登録】

pgpoolが自動起動するように、サービス登録を行います

$ cd /usr/local/src/pgpool-II-3.0.5/redhat/
$ sudo cp pgpool.init /etc/rc.d/init.d/pgpool
$ sudo chkconfig –add pgpool
$ sudo chkconfig pgpool on

【参考】

ref. 【PostgreSQL】pgpool-Ⅱでレプリケーション、インストールと設定
ref. pgFoundry
ref. Welcome to pgpool -II page
ref. pgpool-II チュートリアル
ref. 別ポートで1台のサーバでPostgreSQLを複数起動する方法