PostgreSQL用クラスタリングツール「pgpool-II」のインストール
2011年12月9日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 … okWARNING: 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 … okWARNING: 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を複数起動する方法