2008/08/21
カテゴリ : Tech
PostgreSQL
pgpoolを使ったPostgreSQLのレプリケーション
こんばんは、牧野です。
前回、その前の前とPostgreSQLのチューニングについてでしたが今日もPostgreSQL関連で、PostgreSQLでのレプリケーションについてです。
MySQLの場合、別のソフトウェアを使わなくてもMySQLだけでレプリケーションを実現できますが、PostgreSQLの場合は別途専用のソフトが必要になります。
今回はそんなソフトの1つ、pgpool-II(以下pgpoolと書いています)を使ったレプリケーションを紹介します。
pgpoolを使うと、PostgreSQLで手軽にマルチマスタ方式のレプリケーションを実現できます。
他にも、コネクションプーリング、アクティブスタンバイ、slony-I等のレプリケーションソフトと組み合わせたマスタ・スレーブ方式のレプリケーション、時間がかかる検索処理を複数サーバで並列処理させる(パラレルモード)というようなことができたりします。
詳しくはこちらのページをご覧下さい。
http://pgpool.projects.postgresql.org/pgpool-ja.html
まずインストールですが、インストールは簡単にできます。pgfoundryのページにソースがあるので、ダウンロードします。
http://pgfoundry.org/frs/?group_id=1000055&release_id=1187
ファイルを解凍、展開して、そのディレクトリに移動後、
PostgreSQLは、今回は2台のPC(colinuxのCentOS)にPostgreSQL8.3.3をソースコンパイルでインストールしました。そのうちの1台にpgpoolも同居しています。
次に設定です。pgpoolの設定ファイルは3種類で、pgpoolのディレクトリ内のetcにあります。
■pgpool.conf
pgpoolのメイン設定ファイル。
■pcp.conf
pgpool管理用コマンドを使うユーザ、パスワードを設定。
■pool_hba.conf
pgpoolにアクセスするホスト、ユーザの認証方式を設定。
PostgreSQLのpg_hba.confにあたります。
とりあえず、.sampleファイルをコピーして各ファイルを作成します。
以下、概要です。
pcp.confには
(ユーザ名):(md5で暗号化されたパスワード)
を書きます。pg_md5コマンドを使うと便利です。
pg_md5 パスワード
で、暗号化パスワードが出力されます。
pool_hba.confはpg_hba.confと同様の書き方ですが、認証方式にtrust、reject、pamしか使えないなどの制限があります。
pgpool.confについて、レプリケーションモードで使用する主な設定項目を挙げると、、、
■listen_address
■port
pgpoolがアクセスを受け付けるアドレス、ポート番号
■pcp_port
pgpool用管理コマンドで使用するポート番号
■enable_pool_hba
trueの場合、pool_hba.confを使った認証を行います
■num_init_children
pgpoolへのアクセスを受付けるプロセスの数
問い合わせを途中でキャンセルする時にはもう1つ別プロセスを使うことになるので、想定数よりも大きめの値を設定します
■logdir
デフォルトで/tmpになっていますが、ちゃんとログを取りたい場合は専用のディレクトリを設定します
■health_check_period
数字を指定すると、アクセスがない場合でも指定した秒間隔でデータベースにつながるかチェック(ヘルスチェック)するようになります
■health_check_user
ヘルスチェックを行うユーザ名
パスワードなしでデータベースにアクセスできるユーザを指定します
■backend_hostname#
■backend_port#
■backend_weight#
pgpoolで使用するPostgreSQLのホスト名、ポート、負荷分散時のアクセスウェイトを設定
#の部分にはデータベースの数に応じて0,1,2...を入れて設定します。2台の場合は
■replication_mode
マルチマスタ型レプリケーションを行う時はtrueを設定
■load_balance_mode
select文を負荷分散させる時はtrueを設定
こんな感じで設定します。
認証についてですが、データベースにアクセスするには、pool_hba.confで設定したpgpoolの認証を通った後、データベースのpg_hba.confで設定してある認証を通る必要があります。
レプリケーションモードではデータベースの方のpg_hba.conf設定にも制限があって、
trust, reject, password, pam
しか使えないので注意して下さい。
あと各PostgreSQLにはデータベースを作る権限のある同一ユーザを作成しておきます。
設定できたら、各PostgreSQL、pgpoolを起動します。
pgpoolの起動ですが、redhat系の場合は自動起動用のスクリプトがpgpoolのソールディレクトリのredhat/pgpool.initにあります。
スクリプトの最初の方の変数を適宜環境に合せて書き換えて、
これで
せっかくなので、pgbenchでベンチマークを取ってみます。
pgbenchは、PostgreSQLソースディレクトリ内のcontrib/pgbench
へ移動して
pgpoolと2つのPostgreSQLの場合
単独PostgreSQLの場合
…以上、文章は長くなってしまいましたが、pgpoolを使う環境は簡単に作れます。PostgreSQLが重い場合は試してみてはいかがでしょうか。
最後おまけで、、pgpoolにはpgpoolAdminというウェブ管理ツールがあります。初期設定は設置後/install/にアクセスして行え、各ノードの確認や設定ファイルの変更が簡単にできたりと便利です。ソースはpgpoolと同様pgfoundryからダウンロードできます。
前回、その前の前とPostgreSQLのチューニングについてでしたが今日もPostgreSQL関連で、PostgreSQLでのレプリケーションについてです。
MySQLの場合、別のソフトウェアを使わなくてもMySQLだけでレプリケーションを実現できますが、PostgreSQLの場合は別途専用のソフトが必要になります。
今回はそんなソフトの1つ、pgpool-II(以下pgpoolと書いています)を使ったレプリケーションを紹介します。
pgpoolを使うと、PostgreSQLで手軽にマルチマスタ方式のレプリケーションを実現できます。
他にも、コネクションプーリング、アクティブスタンバイ、slony-I等のレプリケーションソフトと組み合わせたマスタ・スレーブ方式のレプリケーション、時間がかかる検索処理を複数サーバで並列処理させる(パラレルモード)というようなことができたりします。
詳しくはこちらのページをご覧下さい。
http://pgpool.projects.postgresql.org/pgpool-ja.html
まずインストールですが、インストールは簡単にできます。pgfoundryのページにソースがあるので、ダウンロードします。
http://pgfoundry.org/frs/?group_id=1000055&release_id=1187
ファイルを解凍、展開して、そのディレクトリに移動後、
- ./configure
- make
- make
install
- ./configure
--prefix=/var/lib/pgpool
PostgreSQLは、今回は2台のPC(colinuxのCentOS)にPostgreSQL8.3.3をソースコンパイルでインストールしました。そのうちの1台にpgpoolも同居しています。
次に設定です。pgpoolの設定ファイルは3種類で、pgpoolのディレクトリ内のetcにあります。
■pgpool.conf
pgpoolのメイン設定ファイル。
■pcp.conf
pgpool管理用コマンドを使うユーザ、パスワードを設定。
■pool_hba.conf
pgpoolにアクセスするホスト、ユーザの認証方式を設定。
PostgreSQLのpg_hba.confにあたります。
とりあえず、.sampleファイルをコピーして各ファイルを作成します。
以下、概要です。
pcp.confには
(ユーザ名):(md5で暗号化されたパスワード)
を書きます。pg_md5コマンドを使うと便利です。
pg_md5 パスワード
で、暗号化パスワードが出力されます。
pool_hba.confはpg_hba.confと同様の書き方ですが、認証方式にtrust、reject、pamしか使えないなどの制限があります。
pgpool.confについて、レプリケーションモードで使用する主な設定項目を挙げると、、、
■listen_address
■port
pgpoolがアクセスを受け付けるアドレス、ポート番号
■pcp_port
pgpool用管理コマンドで使用するポート番号
■enable_pool_hba
trueの場合、pool_hba.confを使った認証を行います
■num_init_children
pgpoolへのアクセスを受付けるプロセスの数
問い合わせを途中でキャンセルする時にはもう1つ別プロセスを使うことになるので、想定数よりも大きめの値を設定します
■logdir
デフォルトで/tmpになっていますが、ちゃんとログを取りたい場合は専用のディレクトリを設定します
■health_check_period
数字を指定すると、アクセスがない場合でも指定した秒間隔でデータベースにつながるかチェック(ヘルスチェック)するようになります
■health_check_user
ヘルスチェックを行うユーザ名
パスワードなしでデータベースにアクセスできるユーザを指定します
■backend_hostname#
■backend_port#
■backend_weight#
pgpoolで使用するPostgreSQLのホスト名、ポート、負荷分散時のアクセスウェイトを設定
#の部分にはデータベースの数に応じて0,1,2...を入れて設定します。2台の場合は
- backend_hostname0
= 'localhost' - backend_port0
= 5432 - backend_weight0
5 - backend_hostname1
= '192.168.1.123' - backend_port1
= 5432 - backend_weight1
= 5
■replication_mode
マルチマスタ型レプリケーションを行う時はtrueを設定
■load_balance_mode
select文を負荷分散させる時はtrueを設定
こんな感じで設定します。
認証についてですが、データベースにアクセスするには、pool_hba.confで設定したpgpoolの認証を通った後、データベースのpg_hba.confで設定してある認証を通る必要があります。
レプリケーションモードではデータベースの方のpg_hba.conf設定にも制限があって、
trust, reject, password, pam
しか使えないので注意して下さい。
あと各PostgreSQLにはデータベースを作る権限のある同一ユーザを作成しておきます。
設定できたら、各PostgreSQL、pgpoolを起動します。
pgpoolの起動ですが、redhat系の場合は自動起動用のスクリプトがpgpoolのソールディレクトリのredhat/pgpool.initにあります。
スクリプトの最初の方の変数を適宜環境に合せて書き換えて、
- PGPOOLENGINE=/var/lib/pgpool/bin
- PGPOOLDAEMON=$PGPOOLENGINE/pgpool
- PGPOOLCONF=/var/lib/pgpool/etc/pgpool.conf
- PGPOOLLOG=/var/lib/pgpool/log/pgpool.log
これで
- /etc/init.d/pgpool
start
- psql
-h (pgpoolのホスト) -p (pgpool.confのport) -U (ユーザ名) (データベース名)
せっかくなので、pgbenchでベンチマークを取ってみます。
pgbenchは、PostgreSQLソースディレクトリ内のcontrib/pgbench
へ移動して
- make
- make
install
- pgbench
-i -h (pgpoolのホスト) -p (pgpool.confのport) -U (ユーザ名) (ベンチマーク用に新規作成するデータベース名) - pgbench
-h (pgpoolのホスト) -p (pgpool.confのport) -U (ユーザ名) (上のコマンドで指定したデータベース名)
pgpoolと2つのPostgreSQLの場合
- starting
vacuum...end. - transaction
type: TPC-B (sort of) - scaling
factor: 1 - number
of clients: 1 - number
of transactions per client: 10 - number
of transactions actually processed: 10/10 - tps
= 14.349405 (including connections establishing) - tps
= 15.667645 (excluding connections establishing)
単独PostgreSQLの場合
- starting
vacuum...end. - transaction
type: TPC-B (sort of) - scaling
factor: 1 - number
of clients: 1 - number
of transactions per client: 10 - number
of transactions actually processed: 10/10 - tps
= 52.104772 (including connections establishing) - tps
= 62.106015 (excluding connections establishing)
…以上、文章は長くなってしまいましたが、pgpoolを使う環境は簡単に作れます。PostgreSQLが重い場合は試してみてはいかがでしょうか。
最後おまけで、、pgpoolにはpgpoolAdminというウェブ管理ツールがあります。初期設定は設置後/install/にアクセスして行え、各ノードの確認や設定ファイルの変更が簡単にできたりと便利です。ソースはpgpoolと同様pgfoundryからダウンロードできます。
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













コメントフォーム