ubuntuにpgpool-iiを入れる。postgresql-8.1はaptitude でインストールしている。pgpool-iiはapt出来ないので、自分でビルドした。
まず、pgpool の管理用データベースを作る。これがないと話にならないので真っ先に作る。
管理用データベースpgpoolにSCHEMAとTABLEを作る
#>createdb pgpool #>psql -f /usr/local/pgpool/share/sysytem_db.sql pgpool
dblinkが必要なので aptitudeから contribを入れた
/usr/lib/postgresql/8.1/lib/dblink.so /usr/share/postgresql/8.1/contrib/dblink.sql
があることを確認してデータベースpgpoolに対して実行
#>psql -p 5432 -f dblink.sql pgpool CREATE FUNCTION CREATE FUNCTION ... CREATE TYPE CREATE FUNCTION ...
なんかいっぱいFUNCTIONが出来た。
/usr/local/pgpool/etc/pgpool.conf を書き換える。 Debianの設定にする。(ubuntuはDebian)
# Unix domain socket path. (The Debian package defaults to # /var/run/postgresql.) socket_dir = '/var/run/postgresql' # Unix domain socket path for pgpool communication manager. # (Debian package default to /var/run/postgresql) pcp_socket_dir = '/var/run/postgresql' # Unix domain socket path for the backend. Debian package default to /var/run/postgresql! backend_socket_dir = '/var/run/postgresql'
pgpool が使うシステムデータベースを設定。system_db_user='postgres'を確認しつつ、レプリケーションデータベースを指定する。管理用データベースはすでに作成済み
# system DB info system_db_hostname = 'localhost' system_db_port = 5432 system_db_dbname = 'pgpool' system_db_schema = 'pgpool_catalog' system_db_user = 'postgres' system_db_password = '' # backend_hostname, backend_port, backend_weight # here are examples
pgpoolの認証ユーザーを決めてやる
/usr/local/pgpool/etc/pcp.conf
# USERID:MD5PASSWD pgpool:ba777e4c2f15c11ea8ac3be7e0440aa0 postgres:e8a48653851e28c69d0506508fb27fc5
pgpool-II を起動する
#>sudo /usr/local/bin/pgpool -n &
ココまでで、接続をテストする。(コネクションプーリング機能のみ)
#>psql -p 9999 -U postgres
次に、レプリケーションするので、replication_modeを書き換える
# Replication mode replication_mode = true
レプリケーションするpostmasterを設定する。
#DB1 backend_hostname0 = '' #Unixドメインソケットで通信する backend_port0 = 5433 #ポートは5433 backend_weight0 = 1 #値の大きい方が優先度が高い #DB2 backend_hostname1 = '' backend_port1 = 5433 backend_weight1 = 1
レプリケーションするpostmasterを立ち上げる。同一マシン内で複数Postmasterを起動する
pgpoolが動いているシステムpostgresとは別に、レプリケーションのテスト用にPostmasterを二つ立ち上げる
#>/usr/lib/postgresql/8.1/bin/postmaster -p 5433 -D /home/pgpool/db/psql-01 #>/usr/lib/postgresql/8.1/bin/postmaster -p 5433 -D /home/pgpool/db/psql-02
それぞれのPostmasterのユーザーと、データベースを設定する。
#>createuser ** #>createdb
pgpoolを再起動する
#>sudo pgpool stop #>sudo pgpool -n &
作成済みデータベースへ接続してみる
#> psql -p 9999 test
レプリケーションを体験するためのデータベースを作る
#>createdb repli -p 9999
レプリケーションを体験する
#>psql -p 9999 &>CREATE TABLE test1( i, integer ); &>INSERT INTO test1 VALUES( 1 ); &>\q
レプリケーション出来てるか確認する
#>psql -p 5433 &>SELECT * FROM test1;
おおおお出来た。