From 4372f0eb5b0a4a695d29fbc47fdba28cc6e78968 Mon Sep 17 00:00:00 2001 From: Haruka harukat Date: Fri, 15 Jan 2010 11:04:38 +0000 Subject: [PATCH] * add "pgpooluser" parameter --- ChangeLog | 2 ++ README | 32 ++--------------- doc/pgpool-ha.en.txt | 47 ++++++++----------------- doc/pgpool-ha.ja.txt | 82 +++++++++++++++++++++++--------------------- src/Makefile.in | 1 - src/pgpool.in | 25 ++++++++++---- 6 files changed, 78 insertions(+), 111 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7502a26..8d7b4a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ +2010/1/18 + * add "pgpooluser" parameter 2009/3/18 release 1.2 * add "pidfile" parameter diff --git a/README b/README index a01e95a..c7fdb26 100644 --- a/README +++ b/README @@ -1,32 +1,4 @@ -pgpool-ha - Heartbeat scripts for pgpool - -TANIDA Yutaka, TAKATSUKA Haruka (harukat@sraoss.co.jp) - -1. What's this? - -This is a scripts to combine both pgpool and heartbeat. Pgpool is a replication - server of PostgreSQL and makes reliability , but pgpool server is always single-point-failure. To avoid this , heartbeat, it provides high-availability feature to applications, can be used. - -2. Requirement - -- heartbeat - 2.0+ required. - -- pgpool - Tested on pgpool-II only , but It will work if 'show pool_status' command - was supported. - -- PostgreSQL 7.0+ - 'psql' also needed for install hosts . postmaster doesn't required. - -- perl - Need 5.0+ , GetOpt::Long. - -3. using - -After install this , pgpool can be used as heartbeat OCF-style resources. See Heartbeat site. - -http://linux-ha.org/ConfiguringHeartbeat -http://linux-ha.org/ClusterInformationBase/ +pgpool-ha - Heartbeat agent scripts for pgpool +see doc/pgpool-ha.en.txt diff --git a/doc/pgpool-ha.en.txt b/doc/pgpool-ha.en.txt index 385aaed..55ef2d6 100644 --- a/doc/pgpool-ha.en.txt +++ b/doc/pgpool-ha.en.txt @@ -1,7 +1,9 @@ 1. What's this? -This is a scripts to integrate pgpool and heartbeat. Pgpool is a -replication server of PostgreSQL and makes reliability ,but pgpool +This program (pgpool-HA) is an agent script for pgpool and pgpool-II on +the ha-cluster software Heartbeat 2.x. + +Pgpool is a replication server of PostgreSQL and makes reliability ,but pgpool is a single point failure . To avoid this , run pgpool over heartbeat. This software contains: @@ -127,40 +129,20 @@ heartbeat installation. - ----- Sample cib.xml end. ------ - ------ --pgpool.conf,pool_hba.conf,pcp.conf - -Put pgpool.conf on pgpool's default config file path (e.g. -/usr/local/etc/pgpool.conf) , or specify following parameter to -cib.xml. - - (Parameter) -pgpool.conf pgpoolconf -pool_hba.conf hbaconf pgpool 3.2+ only -pcp.conf pcpconf pgpool-II only -log file logfile e.g. "| logger", "/var/log/pgpool.log" -pid file pidfile e.g. "/var/run/pgpool.pid" -pgpool start option options e.g. "-d" - --- - -Following entries in pgpool.conf will be referrenced to monitor pgpool. - -*port +- settings -Used to determine connecting port. - -*health_check_user - -used to connecting user and database. Make sure your PostgreSQL has same -user/role ,database and pg_hba.conf entry to connect from pgpool host by -"trust" authentication. + key | description + ------------+------------------------------------------------------------ + pgpoolconf | path of pgpool.conf for pgpool start arguments + hbaconf | path of pool_hba.conf for pgpool start arguments + pcpconf | path of pcp.conf for pgpool start arguments (pgpool-II only) + logfile | log filename (or pipe expression e.g."|logger -p local0.info") + pidfile | path of the pid file of pgpool + options | other start arguments (e.g. "-d") + pgpooluser | user who run pgpool (default "postgres") @@ -183,4 +165,3 @@ active-active style configuration . See ../COPYING file. - diff --git a/doc/pgpool-ha.ja.txt b/doc/pgpool-ha.ja.txt index 10ff50d..53c444b 100644 --- a/doc/pgpool-ha.ja.txt +++ b/doc/pgpool-ha.ja.txt @@ -1,11 +1,12 @@ -Heartbeat scrpits for pgpool +1. これは何? -1. このプログラムとは +このプログラム(pgpool-HA)は高可用性クラスタ構成ツール Hertbeat 2.x に対応した、 +pgpool、pgpool-II むけエージェントスクリプトです。 Heartbeat 2.0以降にはCRM(Cluster Resource Manager)を使うことでサービス監視を 含むリソース管理を行ってくれるため、容易に高可用性サービスを立ち上げることが 可能になります。これとPostgreSQLのレプリケーションを実現するpgpoolを組み合わ -せることで、PostgreSQLサービスの冗長化をより簡単に行うことが出来ます。 +せることで、PostgreSQLサービスの冗長化をより簡単に行うことができます。 サービス図: @@ -21,8 +22,9 @@ Heartbeat 2.0以降にはCRM(Cluster Resource Manager)を使うことでサー 本プログラムはHeartbeatと連携してpgpoolを高可用性対応するため、以下のコードが 含まれています。 -- Heartbeat 2.0以降で利用できるOCF形式のpgpool管理スクリプト -- 管理スクリプト内で使用する監視プログラム + - Heartbeat 2.0以降で利用できるOCF形式のpgpool管理スクリプト + - 管理スクリプト内で使用する監視プログラム + 2. インストール @@ -39,30 +41,23 @@ Heartbeat 2.0以降にはCRM(Cluster Resource Manager)を使うことでサー - pgpool(http://pgpool.projects.postgresql.org/) インストール時に環境変数PATHで参照可能な位置に配置してください。 設定ファイルについては指定しない場合インストール時のデフォルト位置になります。 - 本バージョンの動作テストは pgpool-II 2.2 で行っています。 + 本バージョンの動作テストは pgpool-II 2.2.6 で行っています。 + show pool_status コマンドをサポートしている pgpool で動作するはずです。 - heartbeat 2.0以降(http://www.linux-ha.org/) 本バージョンの動作テストは 2.1.4 で行っています。 -また、このホストに入っている必要はありませんが、以下のソフトウェアも必要に +また、導入先のホストに入っている必要はありませんが、以下のソフトウェアも必要に なります。 - PostgreSQL - 接続監視する関係上、pgpoolが接続する先としてのPostgreSQLサーバーが必要になり - ます。死活監視のための接続ができるように設定してください。 - - - pgpool.conf の health_check_user が 有効な場合、ユーザー名として、また - 同時に死活監視の接続用のデータベース名として、その値が利用されます。 - デフォルトの pgpool.conf 設定の場合、nobody と言う名称のロール及びデータ - ベースが必要です。 - - - 有効な値がない場合、postgresユーザ/template1データベースが利用されます。 + pgpoolが接続する先としてのPostgreSQLサーバーが必要になります。 2.2 インストール手順 基本的なプログラム、pgpool起動と監視スクリプトは以下の通りでインストール -できます。pgpool,psqlを環境変数で参照できる形にしておいてください。 +できます。pgpool,psqlを環境変数PATHで参照できる形にしておいてください。 # ./configure # cd src @@ -72,7 +67,9 @@ Heartbeat 2.0以降にはCRM(Cluster Resource Manager)を使うことでサー この時、OCF仕様のスクリプト"pgpool"が/usr/lib/orf/resource.d/heartbeat/以下に、 監視スクリプトpgpool.monitorがpgpoolと同じディレクトリにコピーされます。 + 2.3 heartbeatの設定 + heartbeat上でpgpoolを稼働させるためにはheartbeat側の設定が必要になります。 - ha.cf @@ -179,27 +176,27 @@ crm true  サンプル中で 192.168.0.3 と示されているのが仮想IPアドレスです。 ここに指定することでpgpoolが稼働中のホストに当該IPアドレスが割り振られます。 -- 設定ファイルの格納場所(任意) - 設定ファイルの格納場所がデフォルト以外の場合、instance_attributes項目に - 以下のキーと、値としてそのファイル名を指定することで設定できます。 - -指定項目 , 指定するキー, 備考 -pgpool.conf , pgpoolconf , -pool_hba.conf , hbaconf , pgpool 3.2 以降のみ -pcp.conf , pcpconf , pgpool-II 以降のみ -ログファイル , logfile , pgpoolからリダイレクト出力するログファイル -PIDファイル , pidfile , "/var/run/pgpool.pid" などを指定 -起動オプション, options , その他 pgpool の起動オプション "-d" など +- 設定ファイル格納場所、その他オプション + instance_attributes項目に以下の設定キーと値を指定することができます。 + 設定キー | 説明 + ------------+---------------------------------------------------------- + pgpoolconf | pgpool起動引数に指定する pgpool.conf のパス + hbaconf | pgpool起動引数に指定する pool_hba.conf のパス + pcpconf | pgpool起動引数に指定する pcp.conf のパス (pgpool-IIのみ) + logfile | pgpoolからリダイレクト出力するログファイル + pidfile | pgpoolのpidが記述されるファイルを指定 + options | その他 pgpool の起動オプション "-d" など + pgpooluser | pgpoolを起動するユーザを指定、デフォルトは postgres この記述が終了したらファイルを heartbeat が利用する全てのサーバーに配置します。 cib.xml はサーバー間で全く同じである必要があります。なお、記述の検証には heartbeat に付属している crm_verify コマンドが使えます。 -crm_verify -X /var/lib/heartbeat/crm/cib.xml + crm_verify -X /var/lib/heartbeat/crm/cib.xml 最後に全てが終わったら起動して確認します。 -# service heartbeat start + # service heartbeat start そのあとheartbeat自体の起動が終了まで数分待ち、psコマンドにてpgpoolが 起動していることを確認することができれば完了です。 @@ -207,8 +204,10 @@ crm_verify -X /var/lib/heartbeat/crm/cib.xml 2.3 active-active 構成について -pgpool-HA 1.1以降では、複数の設定ファイルが記述できるため、Active-Active構成を -取ることが可能になります。 +pgpool-HA 1.1以降では、複数の設定ファイルが記述できるため、Active-Active構成 +(相互のActive-Standby)を組むことが可能になります。type が pgpool である +リソースを複数記述します。それぞれ異なる設定ファイルに対応づけて、別ポートで +動作させます。 3. 利用方法 @@ -226,9 +225,11 @@ heartbeatを起動します。起動する場合はサービスとして #service heartbeat start -と利用します。しばらくするとpgpoolが利用可能になります。この後、psql等で接続するためにはcib.xmlで指定したIPアドレスとpgpoolで指定したポートを指定します。例えば先ほどのサンプルの場合 +と利用します。しばらくするとpgpoolが利用可能になります。この後、psql等で接続 +するには cib.xml で指定したIPアドレスとpgpoolで指定したポートを指定します。 +例えば先ほどのサンプルの場合 -psql -h 192.168.0.3 -p 9999 + psql -h 192.168.0.3 -p 9999 と実行すれば接続できます。 @@ -237,6 +238,8 @@ heartbeat の終了のためには以下の通りのコマンドを実行しま # service heartbeat stop +heartbeatを稼働した状態で pgpool だけ停止させる場合には、リソースを停止する +heartbeatのコマンドを使用してください。 4. FAQ @@ -283,19 +286,18 @@ heartbeat の終了のためには以下の通りのコマンドを実行しま です。それ以外の異常状態(起動して、SQL文も受け付けるが異常が発生している ような場合など)には対応できません。 ・PostgreSQL に対する管理は行っていません。 -・PostgreSQL が全く起動していない状態は異常であるとみなし、フェイルオーバーし - 続けますが、これは現段階の仕様です。 +・PostgreSQL が全く起動していない状態は異常であるとみなし、pgpoolリソース + は障害状態であると判断します。 ・PostgreSQL がクラッシュした場合のリカバリは別途行う必要があります。 この方法についてはpgpoolに準じます。 -・ロックの問題、now()関数、OIDといったpgpoolの技術的制限事項が解消するわけ - ではありません。 ・pgpoolが複数インストールされている場合の挙動は、インストール時の $PATH に 依存して決定します。他の種類のバイナリは管理できません。 + (実現するにはエージェントスクリプトを手修正して複数種類作ります) ・pgpool-II監視はpsqlで行われます。pcpを利用した監視はまだサポートされていま せん。 6. 著作権 本プログラムは谷田 豊盛(ゆたか) (tanida@sraoss.co.jp)がSRA OSS,Inc.日本支社 -の後援の元作成し、pgpool global development groupに寄贈されました。ライセンスはpgpoolに準じますが、詳細は付属のCOPYINGファイルを参照ください。 - +の後援の元作成し、pgpool global development groupに寄贈されました。ライセンスは +pgpoolに準じますが、詳細は付属のCOPYINGファイルを参照ください。 diff --git a/src/Makefile.in b/src/Makefile.in index 17f2849..7483389 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -22,7 +22,6 @@ install: all $(INSTALL_PROGRAM) pgpool /usr/lib/ocf/resource.d/heartbeat/ $(INSTALL_PROGRAM) pgpool.monitor ${PGPOOL}.monitor - clean: rm pgpool.monitor pgpool diff --git a/src/pgpool.in b/src/pgpool.in index 53caa22..6249b90 100755 --- a/src/pgpool.in +++ b/src/pgpool.in @@ -18,11 +18,10 @@ # is" without express or implied warranty. # # defined OCF_RESKEY_value: -# pgpoolconf pcpconf hbaconf logfile pidfile options +# pgpoolconf pcpconf hbaconf logfile pidfile options pgpooluser # # default port number will be read from pgpool.conf automatically. - check_pid () { if [ -f $PGPOOL_PID ] then @@ -37,6 +36,12 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH PGPOOLCMD=@_PGPOOL_@ +if [ "x$OCF_RESKEY_pgpooluser" = 'x' ]; then + PGPOOLUSER=postgres +else + PGPOOLUSER=$OCF_RESKEY_pgpooluser +fi + if [ "x$OCF_RESKEY_pgpoolconf" = 'x' ]; then XX=$($PGPOOLCMD --help 2>&1 | grep ' config_file default path: ') PGP_CONF=${XX# config_file default path: } @@ -105,21 +110,21 @@ case "$1" in ocf_log err "pgpool is already running." exit 0 else - ocf_log info "pgpoolRA: su -c \" $PGPOOL $PGPOOL_START_ARG \" postgres" - su -c "$PGPOOL $PGPOOL_START_ARG" postgres + ocf_log info "pgpoolRA: su -c \" $PGPOOL $PGPOOL_START_ARG \" $PGPOOLUSER" + su -c "$PGPOOL $PGPOOL_START_ARG" $PGPOOLUSER exit $? fi ;; stop) if check_pid then -# RET=`su -c "$PGPOOL $PGPOOL_STOP_ARG | grep ERROR" postgres` +# RET=`su -c "$PGPOOL $PGPOOL_STOP_ARG | grep ERROR" $PGPOOLUSER` # ocf_log info "pgpoolRA: $RET" # if [ -z "$RET" ] ; then # exit 0 # else # try immediate stop. - RET=`su -c "$PGPOOL $PGPOOL_FORCE_STOP_ARG | grep ERROR " postgres` + RET=`su -c "$PGPOOL $PGPOOL_FORCE_STOP_ARG | grep ERROR " $PGPOOLUSER` ocf_log info "pgpoolRA: $RET" if [ -z "$RET" ] ; then exit 0; @@ -214,7 +219,13 @@ cat <options - + + + pgpool-II user. (e.g. "postgres"(default), "pgpool" or "root") + + options + + -- 2.39.5