pgpoolの利用
postgresの利用性・耐障害性などを高めるpgpool、その設定方法などについて
インストール、設定、利用
- pgpool document http://pgpool.projects.postgresql.org/pgpool-II/doc/
- pgpool-II manual(Japanese) http://pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-ja.html
- pgpoolの設定
pgpoolのモード
-
-
- raw
- コネクションプールモード
- レプリケーションモード
- マスタースレーブモード
- パラレルモード
-
でpgpool.confで設定しなければならないのか記載されている。
- クライアント認証(HBA)のための pool_hba.conf の設定
pgpool側の認証でなく、postgres側の認証を利用することができる。
-
- pgpool-II tutorial(Japanese) http://pgpool.projects.postgresql.org/pgpool-II/doc/tutorial-ja.html
- pgpoolをログ出力するように起動させればよいけど、ログを1ファイルにはきつづけるためログをローテートさせる場合でのcronolog を使う設定について記述あり。
- pgpool-II tutorial(Japanese) http://pgpool.projects.postgresql.org/pgpool-II/doc/tutorial-ja.html
pgpoolの自動起動(redhat系の場合)
/usrlocal/src/pgpool.xxx などのインストール前の展開した中にredhat/pgpool.init があるので、それを /etc/rc.d/init.d/pgpool などとしてコピーして利用する。
pgpoolのファイル内で、
-
- pgpoolを使ったPostgreSQLのレプリケーション http://blog.asial.co.jp/430
- 【PostgreSQL】pgpool-Ⅱでレプリケーション、インストールと設定 http://se-suganuma.blogspot.com/2009/04/postgresqlpgpool.html
上記サイトを参考に 最初の方の設定 pgpool.confファイルのパスやログやpidなどの場所を指定し、
service pgpool start とすれば起動はできる。(確認するには、postgres側も起動しておく)
ただ、 http://d.hatena.ne.jp/vector_xenon/20090617/1245233507 にあるとおり、
service xxxx stop
を実行してもstopできない。(centos5.xにおいて確認)
デフォルトのiniでは、killproc でプロセス終了させてるけど、パス指定(プログラム指定)が /usr/XXXX と記載されているので,そこを /usr/local/pgsql/pgpool.2.x.x/boin/pgpool などと直接指定しまうことでも可能。
※2009-11-09,10追記の内容も合わせて確認してください。
stop(){ echo -n $"Stopping ${NAME} service: " if [ $UID -ne 0 ]; then RETVAL=1 failure else killproc /usr/bin/pgpool ←ここを直接パス指定しちゃう # $PGPOOLDAEMON stop >> "$PGPOOLLOG" 2>&1 < /dev/null RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${NAME} fi; echo return $RETVAL }
ただし、pgpoolのプロセスが複数存在する場合は、killprocの全部killされない?
(http://www.02.246.ne.jp/~torutk/linux/centos5/daemon.html の 「同じプロセス名が複数存在する場合、killprocで終了できない」より)
もともと # で $PGPOOLDAEMON stop ってコメントアウントされてるんだよね。
2009-11-09,10追記ここから
pgpool-II-2.2.5のpgpool.initは、
killproc /usr/bin/pgpool がデフォルトになってました。
また、前述の
killproc /usr/bin/pgpool ←ここを直接パス指定しちゃう
↓ のようにする方が無難だと思います。
$PGPOOLDAEMON -m fast stop -f $PGPOOLCONF & >> "$PGPOOLLOG" 2>&1 < /dev/null
起動時にpgpool.confファイルを指定した場合は、
-f + ファイルパスのパラメータを付与
pgpoolを強制停止する場合は、 -m fast を付与
実行した結果
killproc で停止する場合は、以下をコンソールに表示
$ service pgpool stop
$ pgpool サービスを停止中: [OK]-m fast stopで停止した場合は、以下をコンソールに表示
$ service pgpool stop
$ pgpool サービスを停止中: stop request sent to pgpool. waiting for termination...done.
なお、rootユーザなどがpgpoolを起動・停止するのではなく、個別に作成した専用ユーザが起動・停止する場合のサンプルは、
start(){ ・・・ # $PGPOOLDAEMON -f $PGPOOLCONF $OPTS & >> "$PGPOOLLOG" 2>&1 < /dev/null su - postgres -c "$PGPOOLDAEMON -f $PGPOOLCONF $OPTS" & >> "$PGPOOLLOG" 2>&1 < /dev/null ・・・ } stop(){ ・・・ # killproc /usr/bin/pgpool # killproc /usr/local/pgpool/bin/pgpool # $PGPOOLDAEMON stop & >> "$PGPOOLLOG" 2>&1 < /dev/null # $PGPOOLDAEMON -m fast stop -f $PGPOOLCONF & >> "$PGPOOLLOG" 2>&1 < /dev/null su - postgres -c "$PGPOOLDAEMON -m fast stop -f $PGPOOLCONF" & >> "$PGPOOLLOG" 2>&1 < /dev/null ・・・ }
- ポイント
- 「su - postgres」としているところを pgpoolを実行するユーザにする。
- 「-m fast stop」(または-m immediate)のため、接続しているプロセスがあっても強制終了します。切断されるのを待機するには、-mオプションを指定しない。
- 「-f pgpool.confのファイルパス」として起動させているので、停止時も同様に-fを指定しました。
2009-11-09,10追記ここまで
ソース
http://www.google.co.jp/codesearch/p?hl=ja&sa=N&cd=2&ct=rc#SpF3rymF6LA/redhat/pgpool.init&q=pgpool.ini
は、コメントアウトされていないけど、展開したファイルではコメント行があった。
なお、googleのソースコードはIE8ではjsエラーで見られないけど、FF3.5なら見られる。他のブラウザでは未確認。
注意!!
restart(){ stop start }
は、stopして、startしてるから問題なし。
reload(){ echo -n $"Reloading ${NAME}: " if [ -n "`pidfileofproc $PGPOOLDAEMON`" ] ; then killproc $PGPOOLDAEMON -HUP else failure $"Reloading ${NAME}" fi RETVAL=$? echo }
reloadは、上記だけど
killproc $PGPOOLDAEMON -HUP
としてるのが、動作するかは試していません。
参考、リンク
- インストールからpostgresとの連携までの例
- pgpool Wiki
- pgpoolに関する詳しいppt資料
- pgpool-II の今と今後の展望
http://www.postgresql.jp/events/enterprise1_pgpool.pdf
- pgpool日本語サイト
- pgpool-II 導入・設定ガイド