hollyさんのwiki

公式が移動したようだ。http://pgpool.net/mediawiki/index.php/Main_Page

streaming replication環境での導入など。http://pgpool.projects.postgresql.org/pgpool-II/do...
基本的な設定はpostgresねたで終わっているものとする。

公式ページはここにかわったようだ

環境変数追加

しなくてもいいが。.bash_profileとかに追加するなど
export PGPOOLHOME=/usr/local/pgpool
PATH=$PATH:$PGHOME/bin:$PGPOOLHOME/bin

インストール

postgresのPATH

postgresqlがインストールされている環境が必要(使って無くても)なので、DBサーバで使用しているpostgresqlをそのままもってくるとよい。pg_configのpathが分からないとconfigureできないので、
export PATH=$PATH:/usr/local/pgsql/bin
などをしておく

libmemcached

3.2からquery cacheが導入されており、memcachedに保存することが可能。これに必要なライブラリをインストールする。開発元はここ

yum install libmemcached libmemcached-devel

install

cd /usr/local/src
# versionは都度最新版をインストールこと
curl -L "http://www.pgpool.net/download.php?f=pgpool-II-3.2.0.tar.gz"  -o pgpool-II-3.2.0.tar.gz
tar xvfz pgpool-II-3.2.0.tar.gz
cd pgpool-II-3.2.0
./configure --prefix=/usr/local/pgpool-II-3.2.0 --with-pgsql=/usr/local/pgsql  --with-openssl --with-memcached=/usr
make
make install
cd /usr/local
ln -s pgpool-II-3.2.0 pgpool
cd /usr/local/src/pgpool-II-3.2.0

mkdir /var/run/pgpool
chown postgres.postgres /var/run/pgpool

pgpool_regclass

あんまりどっちでもいいような気がするけど(理由はなんでか忘れた)
cd $PGPOOL_SRCDIR/sql/pgpool-regclass
make
make install

以下がインストールされるので、postgresqlが稼動しているサーバに転送する
/usr/local/pgsql/share/contrib/uninstall_pgpool-regclass.sql
/usr/local/pgsql/share/contrib/pgpool-regclass.sql
/usr/local/pgsql/lib/pgpool-regclass.so

インストール後、以下を実施する
psql -U postgres -h <DBSERVER> -p 5432 -f /usr/local/pgsql/share/contrib/pgpool-regclass.sql template1

pgpool_walrecrunning

streaming replication を行うのなら必須
cd $PGPOOL_SRCDIR/sql/pgpool-walrecrunning
make
make install

以下がインストールされるので、postgresqlが稼動しているサーバに転送する
/usr/local/pgsql/share/contrib/pgpool-walrecrunning.sql
/usr/local/pgsql/share/contrib/uninstall_pgpool-walrecrunning.sql
/usr/local/pgsql/lib/pgpool-walrecrunning.so

転送後、以下を実施
psql -U postgres -h <DBSERVER> -p 5432 -f /usr/local/pgsql/share/contrib/pgpool-walrecrunning.sql template1

pgpool_recovery

online recovery
cd $PGPOOL_SRCDIR/sql/pgpool-recovery
make
make install

以下がインストールされるので、postgresqlが稼動しているサーバに転送する
/usr/local/pgsql/share/contrib/pgpool-recovery.sql
/usr/local/pgsql/share/contrib/uninstall_pgpool-recovery.sql
/usr/local/pgsql/lib/pgpool-recovery.so

転送後、以下を実施
psql -U postgres -h <DBSERVER> -p 5432 -f /usr/local/pgsql/share/contrib/pgpool-recovery.sql template1

起動ファイル

cp -p $PGPOOL_SRCDIR/redhat/pgpool.init /etc/init.d/pgpool
chmod 755 /etc/init.d/pgpool
ちょっと変更する
起動ファイルはpatchをあてる
=====
--- /usr/local/src/pgpool-II-3.1.0-beta2/redhat/pgpool.init     2009-10-22 20:52:33.000000000 +0900
+++ /etc/init.d/pgpool  2011-08-24 23:27:45.000000000 +0900
@@ -4,7 +4,7 @@
 # chkconfig: - 64 36
 # description: Starts and stops the pgpool daemon
 # processname: pgpool
-# pidfile:     /var/run/pgpool.pid
+# pidfile:     /var/run/pgpool/pgpool.pid
 #
 # v1.0.0 Devrim GUNDUZ <devrim@CommandPrompt.com>
 # - Initial version of Red Hat / Fedora init script
@@ -49,11 +49,12 @@
 fi

 # Set defaults for configuration variables
-PGPOOLENGINE=/usr/bin
+PGPOOLHOME=/usr/local/pgpool
+PGPOOLENGINE=$PGPOOLHOME/bin
 PGPOOLDAEMON=$PGPOOLENGINE/pgpool
-PGPOOLCONF=/etc/pgpool-II/pgpool.conf
+PGPOOLCONF=$PGPOOLHOME/etc/pgpool.conf
 PGPOOLPIDDIR=/var/run/pgpool
-PGPOOLLOG=/var/log/pgpool.log
+PGPOOLLOG=/tmp/pgpool.log

 test -x $PGPOOLDAEMON || exit 5

@@ -119,7 +120,7 @@
                 failure
         else
                killproc /usr/bin/pgpool
-#              $PGPOOLDAEMON stop & >> "$PGPOOLLOG" 2>&1 < /dev/null
+               $PGPOOLDAEMON stop & >> "$PGPOOLLOG" 2>&1 < /dev/null
                 RETVAL=$?
                 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${NAME}
         fi;

sysconfigに簡易な設定ファイルを作る
cat <<EOL >/etc/sysconfig/pgpool
OPTS="-c -n"
EOL

起動設定
chkconfig --add pgpool
chkconfig pgpool on

設定

pcp.conf

管理情報を取得、操作するためのI/Fにアクセスするためのユーザ認証設定
cp -p /usr/local/pgpool/etc/pcp.conf.sample /usr/local/pgpool/etc/pcp.conf
chown postgres.postgres  /usr/local/pgpool/etc/pcp.conf
echo postgres:$(/usr/local/pgpool/bin/pg_md5 <PASS>) >>  /usr/local/pgpool/etc/pcp.conf

pgpool.conf

streaming repliationを使うので以下を実行
# connection poolとmaster/slave構成での冗長化
cp -p /usr/local/pgpool/etc/pgpool.conf.sample-stream /usr/local/pgpool/etc/pgpool.conf
chown postgres.postgres  /usr/local/pgpool/etc/pgpool.conf

あとで内容を載せる

pool_hba.conf

pgpoolの認証。実際に接続するDBユーザとあわしておけばいいっぽい。ちゃんと試してないけどよくわからない
以下が出るので、postgresqlでは認証はtrustにしないといけない -> iptablesでも制限をかけるべきだが、pg_hba.confも10.0.0.4/32 のように特定のサーバ以外接続できないようにしておいたほうがよい。
これをhost all/allの元にあたる行として追加
host    all             all             10.0.0.4/32            trust

hostの認証方式はmd5にしておくこと
cp -p /usr/local/pgpool/etc/pool_hba.conf.sample /usr/local/pgpool/etc/pool_hba.conf
touch /usr/local/pgpool/etc/pool_passwd
chown postgres.postgres  /usr/local/pgpool/etc/pool_hba.conf /usr/local/pgpool/etc/pool_passwd
  
# -uを指定しない場合は現在ログインしているシステムユーザでpool_passwdに登録される
/usr/local/pgpool/bin/pg_md5 -m -u postgres <PASS>
/usr/local/pgpool/bin/pg_md5 -m -u kurt <PASS>
pool_passwdは<USER>:<PASS>の形式で登録される

query cache

3.2.0からの新機能。memcachedにも保存できる。これはあつい

以下の設定を覚えておけばよい
memory_cache_enabled = on
memqcache_method = 'shmem' 共有メモリ or memcached
memqcache_expire = 30 期限(sec. 0は無期限)
memqcache_maxcache = 409600 これより大きい結果の場合はcacheされない(byte指定。defaultは400KB)
memqcache_auto_cache_invalidation = on # 更新処理系は対象テーブルのcacheを削除する
memqcache_oiddir = '/usr/local/pgpool/oiddir' shmemにした場合の作業用ディレクトリ
white_memqcache_table_list = ''  # 試してないけどこれらのみをcacheする。temp, unlogged tableも対象にできる
black_memqcache_table_list = ''  # たぶんこれらはcacheしない

log_per_node_statement = on   # cacheしてるかログみてわかるのでonにしておく

ディレクトリを作成しておく
mkdir /usr/local/pgpool/oiddir
chown postgres.postgres /usr/local/pgpool/oiddir

これでpgpoolをrestartするとよい。cacheにhitした場合はログに以下が残る
2012-08-18 00:49:52 LOG:   pid 1517: query result fetched from cache. statement: select * from t1;

cache hit

show pool_statusで見ることができる
memqcache_no_cache_hits   | 3       | Number of SELECTs not hitting query cache
memqcache_cache_hits      | 1       | Number of SELECTs hitting query cache
これらをもとにヒット率を計算することができるので、90%を超えるように設計をすることを心掛ける

memcached

以下の設定を変えればok
memqcache_method = 'memcached'
memqcache_memcached_host = 'memcached_host' # defaultはlocalhost

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます