この文書は、書籍で割愛したものです。

pgpool-IIの準備

pgpool-IIの解説で使うシステム構成を[<図5-XX>]に示す。

[<図5-XX>] システム構成


便宜上、3台のPostgreSQLサーバにホスト名を設定する。
レプリケーションモードでは"node0, node1, node2"、 マスタスレーブモードでは"master, slave1, slave2"とする。

各サーバの前提条件を以下に示す。

  • 環境変数PATH
  • ユーザpostgresの環境変数PATHに、PostgreSQLとpgpool-IIのバイナリパス"/usr/local/pgsql/bin"、"/usr/local/pgpool2/bin"を設定する。

    export PATH=$PATH:/usr/local/pgsql/bin:/usr/local/pgpool2/bin
    
  • ソフトウエア
  • 全サーバにsshとrsync、およびPostgreSQLをインストールする。
    sshはレプリケーションモードのオンラインリカバリ、およびマスタスレーブモードで必須である。 rsyncはオンラインリカバリで利用するが必須ではない。
    pgpool-IIを稼働するサーバにもPostgreSQLが必要である。なぜならpgpool-IIがPostgreSQLのライブラリを利用するからである。

  • ネットワーク
  • 全サーバがポート番号5432に接続できるように設定する。 さらにサーバpgpoolはポート番号9898にも接続できるように設定する。

pgpool-IIのインストール

pgpool-IIインストールする。

ソフトウエアの入手

バージョン3.1以上のpgpool-IIを入手する。

http://pgfoundry.org/projects/pgpool/

インストール

pgpool-IIのアーカイブをダウンロードしたら、 適当なディレクトリで展開してconfigureコマンドとmakeコマンドを実行する。
インストールディレクトリは/usr/local/pgpool2/とする。
configureコマンドの"--with-pgsql-libdir"オプションには、PostgreSQLのライブラリlibpq.soのあるディレクトリを指定する。

root@pgpool> mkdir /usr/local/pgpool2
root@pgpool> chown postgres:postgres /usr/local/pgpool2
root@pgpool> su postgres
postgres@pgpool> tar xvfz pgpool-II-3.1.tar.gz 
postgres@pgpool> cd pgpool-II-3.1
postgres@pgpool> ./configure --prefix=/usr/local/pgpool2 \
>     --with-pgsql-libdir=/usr/local/pgsql/lib
postgres@pgpool> make && make install
postgres@pgpool> cd sql
postgres@pgpool> make && make install

最後に、ディレクトリ/var/run/pgpoolを作成する。 このディレクトリにはpidファイルを書き込む。

postgres@pgpool> mkdir -p /var/run/pgpool

設定ファイルの準備

pgpool-IIのインストールが終了したら、3つの設定ファイルを準備する。

postgres@pgpool> cd /usr/local/pgpool2/etc
postgres@pgpool> cp pcp.conf.sample pcp.conf
postgres@pgpool> cp pgpool.conf.sample pgpool.conf
postgres@pgpool> cp pool_hba.conf.sample pool_hba.conf

pcp.conf

pcp.confファイルは、pgpool-IIを制御するpcp関連コマンドの認証に必要である。

pcp.confファイルの書式は「ユーザ名:パスワードのmd5ハッシュ値」で、 md5ハッシュ値はコマンドpg_md5を使って得る。
ここではユーザ名"pgpool2"、パスワードは"pass-pgpool2"として登録する。

postgres@pgpool> pg_md5 pass-pgpool2
80e4b055b928d76dc7bdbc2dbedb9307

pg_md5で得た値を、pcp.confファイルの末尾に追加する。

[< pcp.confの末尾に追加>]
pgpool2:80e4b055b928d76dc7bdbc2dbedb9307

pgpool.conf

pgpool.confの設定は、レプリケーションモードとマスタスレーブモードで異なる。 詳細は[<5-07>]と[<5-08>]で解説する。

pool_hba.conf

pgpool-IIのアクセス制御を行う設定ファイルpool_hba.confを編集する。 書式はPostgreSQLのアクセス制御ファイルpg_hba.confと同じである([<3-08>]参照)。

[< pool_hba.confの末尾に追加>]
host    all         all         127.0.0.1/32          trust
host    all         all         192.168.0.0/24        trust

PostgreSQLの設定

オンラインリカバリのためのライブラリを全PostgreSQLサーバにコピーし、 バッチファイルを実行する。

まず、ライブラリpgpool-recovery.soをPostgreSQLのあるサーバの/usr/local/pgsql/libに、 バッチファイルpgpool-recovery.sqlを/usr/local/pgsql/shareにコピーする。

postgres@pgpool> cd sql/pgpool-recovery
postgres@pgpool> scp pgpool-recovery.so  192.168.0.10:/usr/local/pgsql/lib
postgres@pgpool> scp pgpool-recovery.so  192.168.0.11:/usr/local/pgsql/lib
postgres@pgpool> scp pgpool-recovery.so  192.168.0.12:/usr/local/pgsql/lib
postgres@pgpool> scp pgpool-recovery.sql 192.168.0.10:/usr/local/pgsql/share
postgres@pgpool> scp pgpool-recovery.sql 192.168.0.11:/usr/local/pgsql/share
postgres@pgpool> scp pgpool-recovery.sql 192.168.0.12:/usr/local/pgsql/share

各PostgreSQLサーバ上でバッチファイルpgpool-recovery.sqlを実行する。 以下はnode0での実行例である。node1、node2でも同様に実行する。

postgres@node0> psql -c "\i /usr/local/pgsql/share/pgpool-recovery.sql" -U postgres template1

sshの設定

レプリケーションモードでオンラインリカバリを行う、もしくはマスタスレーブモードでフェールオーバーを行う場合、 パスワードなしでsshを実行できるように設定しなければならない。

  • レプリケーションモードでオンラインリカバリを行う場合
  • 全PostgreSQL間でパスワードなしでsshを実行できるように設定する。
    オンラインリカバリ時、PostgreSQLサーバが他の(リカバリする)PostgreSQLサーバ上でrecovery_1st_stage.sh、recovery_2nd_stage.sh、pgpool_remote_startを実行するため。

  • マスタスレーブモードでフェールオーバーを行う場合
  • pgpoolサーバがPostgreSQLが稼働しているslave1とslave2にパスワードなしでsshを実行できるように設定する。
    pgpoolサーバがslave1に対してfailover.shを、slave2に対してfollowmaster.shを実行するため。

例として、node0からnode1に対してパスワードなしでsshを実行するための準備を示す。

postgres@node0> ssh-keygen -t dsa	# パスフレーズは空白
postgres@node0> scp ~/.ssh/id_dsa.pub node1:~/
postgres@node0> ssh node1
postgres@node1> cat id_dsa.pub >> ~/.ssh/authorized_keys2
postgres@node1> rm id_dsa.pub
postgres@node1> chmod 700 ~/.ssh
postgres@node1> chmod 600 ~/.ssh/authorized_keys2

Last-modified: 2013-3-15