Postgres-XC ver 0.9.2 クイックスタート

2010年12月現在、最新版はver0.9.3だが、ここではver0.9.2のインストール方法を示す。

gtmのJava版gtmの多重化版も作成、 さらに 多重化gtmが動くVagrant boxを作成して公開: [Vagrant box| GitHub] したので、興味があればどうぞ。

Postgres-XCは同期マルチマスタ型のPostgreSQLクラスタシステムである。

PGClusterと競合するが、 Postgres-XCの目標は"Write-scalable"の1点で、 現時点でもデータノードが10台程度までは性能がリニアに向上しているとのベンチマークが出されている。
アーキテクチャも PGClusterと異なり、より大規模構成を意識したものに見える。

Potgres-XCのダウンロード & インストール

ダウンロード

Postgres-XCのサイトからダウンロードする。
ここではver0.9.2をダウンロードする。 各種ドキュメントもいっしょにダウンロードしておく。

pgxc_v0_9_2.tar.gz
PG-XC_Architecture.pdf
PG-XC_pgbench_Tutorial_v0_9_2.pdf
PG-XC_DBT1_Tutorial_v0_9_2.pdf
PG-XC_InstallManual_v0_9_2.pdf
PG-XC_ReferenceManual_v0_9_2.pdf  

システム

ドキュメント"PG-XC_pgbench_Tutorial_v0_9_2.pdf"では、サーバ4台でpgbenchを実行するシステム構成が解説されているので、 それに準拠したインストールを行う。

もしも仮想マシンなど用いずに1台だけで雰囲気を確かめたい場合はこちら

まず、3台の仮想サーバを立ち上げ、/etc/hostsに以下のホスト名を設定する。

Host Name 役割
gtm Global Transaction Manager
coordinator1 coordinator/datanode/gtm_proxy
coordinator2 coordinator/datanode/gtm_proxy

各サーバは、いろいろなポートにアクセスされるので適宜アクセス制御すること。
面倒な場合は全TCPアクセスを許可する設定を行う。

/sbin/iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -s XXX.XXX.XXX.XXX -j ACCEPT
....

インストール

3つの仮想サーバ(gtm,coordinator1, coordinator2)で同様の手順でインストールする。 今回は/usr/local/pgxc以下にインストールする。pgbenchもインストールする。

$ tar xvfz pgxc_v0_9_2.tar.gz
$ cd pgxc
$ export CFLAGS='-O2'
$ ./configure --prefix=/usr/local/pgxc
$ make && make install
$ cd contrib/pgbench
$ make && make install

仮想サーバgtmでの準備

簡単なところからはじめる。gtmの準備。

ディレクトリを作成する。

cd  ~/
mkdir -p co2dn2/gtm
mkdir -p co2dn2/gtm/log

coordinator1での準備

coordinator1には、coordinator、datanode、およびgtm_proxyを設定する。

gtm_proxyの準備

gtm_proxy用のディレクトリを作成する。

coordinator1> mkdir /home/postgres/co2dn2/gtm_proxy
coordinator1> mkdir /home/postgres/co2dn2/gtm_proxy/log
coordinatorの準備

coordinatorのデータクラスタを初期化する。

coordinator1> /usr/local/pgxc/bin/initdb -D /home/postgres/co2dn2/coord

"~/co2dn2/coord/postgresql.conf"を以下のように編集する。

~/co2dn2/coord/postgresql.confの編集箇所
num_data_nodes = 2
data_node_hosts = 'coordinator1,coordinator2'
data_node_ports = '15432,15432'
data_node_users = "postgres"
gtm_coordinator = 1

"~/co2dn2/coord/pg_hba.conf"に以下の行を追加する。"xxx.xxx.xxx.0"は適宜、自身の仮想サーバ間のネット輪ー賣アドレスを記述する。

~/co2dn2/coord/pg_hba.confへの追加
host	all	all	xxx.xxx.xxx.0/24	trust

最後、”"~/co2dn2/coord/pgxc.conf"というファイルを準備する。これはpgxc_ddlというツールのためのファイルである。

~/co2dn2/coord/pgxc.conf
coordinator_hosts = 'coordinator1,coordinator2'
coordinator_ports = '5432,5432'
coordinator_folders = '/home/postgres/co2dn2/coord,/home/postgres/co2dn2/coord'
datanodeの準備

datanodeのデータクラスタを初期化する。

coordinator1> /usr/local/pgxc/bin/initdb -D /home/postgres/co2dn2/datanode

次にdatanodeの設定を行う。"~/co2dn2/datanode/postgresql.conf"を以下のように編集する。

~/co2dn2/datanode/postgresql.confの編集箇所
max_prepared_transactions = 100
data_node_users = "postgres"
gtm_coordinator = 11

"~/co2dn2/datanode/pg_hba.conf"に以下の行を追加する。"xxx.xxx.xxx.0"は適宜、自身の仮想サーバ間のネット輪ー賣アドレスを記述する。

~/co2dn2/datanode/pg_hba.confへの追加
host	all	all	xxx.xxx.xxx.0/24	trust

coordinator2での準備

coordinator2でもcoordinator1と同様の設定を行う。

coordinatorとdatanodeを準備する。

$ /usr/local/pgxc/bin/initdb -D /home/postgres/co2dn2/coord
$ /usr/local/pgxc/bin/initdb -D /home/postgres/co2dn2/datanode

coordinatorの設定を行う。
"~/co2dn2/coord/postgresql.conf"は次のように設定する。coordinator1のcoordinatorとの違いは"gtm_coordinar"の値である。こちらは"2"を設定する。

~/co2dn2/coord/postgresql.confの編集箇所
num_data_nodes = 2
data_node_hosts = 'coordinator1,coordinator2'
data_node_ports = '15432,15432'
data_node_users = "postgres"
gtm_coordinator = 2

"~/co2dn2/coord/pg_hba.conf"、""~/co2dn2/coord/pgxc.confはcoordinator1と同じである。


次にdatanodeの設定を行う。
"~/co2dn2/datanode/postgresql.conf"を以下のように編集する。coordinator1のdatanodeとの違いは"gtm_coordintor"の 値である。

~/co2dn2/datanode/postgresql.confの編集箇所
max_prepared_transactions = 100
data_node_users = "postgres"
gtm_coordinator = 12

"~/co2dn2/coord/pg_hba.conf"、""~/co2dn2/coord/pgxc.confはcoordinator1と同じである。



システムの初期化

ver0.9.2では、 coordinatorが1台のときにデータベースやテーブルを作成して、 そのcoordinatorのデータを"手動"で複数のcoordinatorで共有できるようにする。
マルチマスタ状態で自由にDDLを実行できるのはver0.9.3からである。

gtmの起動

はじめにgtmを起動する。gtmへのアクセスポート番号は"-p"オプションで指定する。

gtm> /usr/local/pgxc/bin/gtm -x 1000 -D /home/postgres/co2dn2/gtm -l /home/postgres/co2dn2/gtm/log/gtmlog -p 16680 &

gtm_proxyの起動

coordinator1で以下のコマンドを実行する。

coordinator1> /usr/local/pgxc/bin/gtm_proxy -D /home/postgres/co2dn2/gtm_proxy -h localhost -p 6666 -s gtm -t 16680 

coordinator2でも同じコマンドを実行する。

coordinator2> /usr/local/pgxc/bin/gtm_proxy -D /home/postgres/co2dn2/gtm_proxy -h localhost -p 6666 -s gtm -t 16680 

datanodeの起動

次に2つのdatanodeを起動する。

coordinator1で以下のコマンドを実行する。

coordinator1> /usr/local/pgxc/bin/postgres -X -i -p 15432 -D /home/postgres/co2dn2/datanode/ &

coordinator2でも同じコマンドを実行する。

coordinator2> /usr/local/pgxc/bin/postgres -X -i -p 15432 -D /home/postgres/co2dn2/datanode/ &

coordinatorの起動

最後にcoordinatorを起動する。

coordinator1で以下のコマンドを実行する。

coordinator1> /usr/local/pgxc/bin/postgres -C -i -p 5432 -D /home/postgres/co2dn2/coord &

coordinator2でも同じコマンドを実行する。

coordinator2> /usr/local/pgxc/bin/postgres -C -i -p 5432 -D /home/postgres/co2dn2/coord &

pgbenchのインストール

ここで、実験用にpgbenchをインストールする。

これからクライアントがアクセスするのはcoordinatorである。

まず、データベースpgbenchを作成する。 coordinator1のcoordinatorにアクセスして"CREATE DATABASE"を実行すると、 coordinator1のdatanodeとcoordinator2のdatanodeにデータベースが作成される。

coordinator1> /usr/local/pgxc/bin/psql template1 -c "CREATE DATABASE pgbench"

次に、pgbenchの各種テーブルをインストールするため、"pgbench -i"を実行する。

coordinator1> /usr/local/pgxc/bin/pgbench -i pgbench

実は、すでにPotgres-XCは稼働している。ここでpgbenchを実行すれば結果を返してくる。

coordinator1> pgbench pgbench

しかし、クライアント側からみるとcoordinatorが1台しかなく、マルチマスタではない。

マルチマスタ化

いよいよPostgres-XCをマルチマスタ化する。 ver0.9.2からは便利なツールpgxc_ddlが用意されている。

coordinator1で以下のスクリプトを実行する。sshやscpが何度も実行されるので、その都度パスワードを入力する。

coordinator1> export PATH=/usr/local/pgxc/bin:${PATH}
coordinator1> pgxc_ddl -D /home/postgres/co2dn2/coord -n 1

スクリプトが終了すると、通常はcoordinator1とcoordinator2のそれぞれのcoordinatorは再起動しているはずだが、 たまにうまくいかない場合がある。そのときはcoordnatorを手動で起動する。

coordinator1> postgres -C -i -p 5432 -D /home/postgres/co2dn2/coord &
coordinator2> postgres -C -i -p 5432 -D /home/postgres/co2dn2/coord &

クライアントからのアクセス

これでcoordinatorが2台体制になったので、coordinator1とcoordinator2のいずれのcoordinatorにもアクセスできる。

coordinator1> pgbench pgbench -h coordinator2
coordinator2> pgbench pgbench

など。

停止

システムを停止するには、以下の手順で行う。

coordinator1> /usr/local/pgxc/bin/pg_ctl -D /home/postgres/co2dn2/coord stop
coordinator2> /usr/local/pgxc/bin/pg_ctl -D /home/postgres/co2dn2/coord stop
coordinator1> /usr/local/pgxc/bin/pg_ctl -D /home/postgres/co2dn2/datanode stop
coordinator2> /usr/local/pgxc/bin/pg_ctl -D /home/postgres/co2dn2/datanode stop
gtm> /usr/local/pgxc/bin/gtm_ctl stop -S gtm -D /home/postgres/co2dn2/gtm

Last-modified: 2012-10-28