技術メモ置き場

2016-02-11

Postgres-XC 多重化GTM システムが走るVagrant box

| 13:39

(5年前に作った)Postgres-XC用の多重化GTMシステムが動くVagrant boxを作ったので公開します。

Postgres-XC用の多重化GTMシステムについては例えば”こちら”を参照。

f:id:interdb:20160211012339p:image

Requirement

Install

GitHubからリポジトリをcloneしてください。

# git clone https://github.com/s-hironobu/mgtm.git

次にAtlasからVagrant boxをダウンロード+登録します。

# cd mgtm
# vagrant box add s-hironobu/centos67_32_mgtm4pgxc092 

実行

[1] 起動

5つのVMを起動します: mgtm1, mgtm2, mgtm3, node1, node2

# vagrant up

ssh関連で起動に失敗する場合があります。そのときは起動がうまくいかないVMvagrant destroyで一旦削除し、改めてvagrant upで作成するとうまくいくことが多いです。

[2] 5つのターミナルを作成

5つのターミナルを、以下の図のように生成します。

f:id:interdb:20160211012219p:image

ターミナルvagrant sshでアクセスします。例えばmgtm1には次のようにしてアクセスします。

# vagrant ssh mgtm1
[vagrant@mgtm1 ~]$
[3] GTM起動

mgtm1, mgtm2, mgtm3で mgtm-startコマンドを実行します。

[vagrant@mgtm1 ~]$ mgtm-start
[vagrant@mgtm2 ~]$ mgtm-start
[vagrant@mgtm3 ~]$ mgtm-start

すると、mgtm1に以下のようなメッセージが表示されます。

[vagrant@mgtm1 ~]$ mgtm-start
I'm running...
I'm LEADER!!!!
[4] XC-nodeの起動

node1とnode2でnode-startコマンドを実行します。

[vagrant@node1 ~]$ node-start

I'm ready!!!
[vagrant@node2 ~]$ node-start

I'm ready!!!

両方のターミナルに"I'm ready!!!"というメッセージがでれば、それがPostgres-XC準備完了の合図です。


[5] pgbench

node1かnode2でpgbenchを実行します。

[vagrant@node2 ~]$ pgbench

SELECT, UPDATE, INSERT, DELETEなど簡単なSQLも実行できます。(ただし、最初に実行する前にvacuumを実行してください。)

[vagrant@node2 ~]$ psql -c "vacuum"
VACUUM
[vagrant@node1 ~]$ psql 
psql (8.4.3)
Type "help" for help.

pgbench=# 

XC version 0.9.2は超基本的なSQLしかサポートしていません。実行できないSQLの場合はシステムがクラッシュします。

GRMクラッシュのシミュレーション

(1) pgbenchを-Tオプションで起動

適当な時間、pgbenchを実行し続けます。

[vagrant@node2 ~]$ pgbench -T 30

(2) mgtm1で^Cを実行:mgtm1を強制終了
[vagrant@mgtm1 ~]$ mgtm-start
I'm running...
I'm LEADER!!!!
I'm LEADER!!!!
I'm LEADER!!!!

^C

すると、mgtm2が次のリーダーになります。

[vagrant@mgtm2 ~]$ mgtm-start
I'm running...
I'm LEADER!!!!

この状況を図に示します。

f:id:interdb:20160211012037p:image

GTMとXCの終了

GTMは^Cで終了させます。

[vagrant@mgtm2 ~]$ mgtm-start 
I'm running...
I'm LEADER!!!!
^C
[vagrant@mgtm3 ~]$ mgtm-start 
I'm running...
^C

node1とnode2でnode-stopコマンドを実行し、関連プロセスを終了します。

[vagrant@node1 ~]$ node-stop
[vagrant@node2 ~]$ node-stop

再実行

もう一度試したい場合は、[3] GTM起動に戻ります。

Vagrantの終了

どれか一つのターミナルexitし、HostOS上でvagrant haltを実行します。

[vagrant@node2 ~]$ exit

# vagrant halt

ベンチマーク

詳しい説明抜きでベンチマーク結果を示します。

f:id:interdb:20160211011711p:image

"mgtm x 3"は3台のgtm, "mgtm x 2"は2台のgtmが稼働しているときの結果。gtmはXCオリジナルgtmによる結果です。


Memo

簡単にmulti-master open source database clusterの状況をしめします。

  1. 2015年、Postgres-XCはPostgres-X2に改名しました。相変わらずwrite-scalableが目標です。
  2. 2014年、XCをベースにしたPostgres-XLがリリースされました。Postgres-XLは大規模なデータに対する効率的なOLAPやOLTPを目指しています。
  3. 一方、Galera Cluster (MariaDBMySQL)が技術的にも商業的にも成功しています。GaleraはPostgres-Rとほぼ同様の機構(XC/XLとは全く異なる)のmulti-master database clusterです。