それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pgpool-ii の設定。

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の設定にする。(ubuntuDebian)

# 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;


おおおお出来た。