Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

AmazonEC2+Postgres-XCでDBクラスタリングを試してみる。

こんにちは。上田です。

最近DBクラスタリング周りの構築パターンとして、
AmazonEC2+Postgres-XCを試してみたので、
その辺のところを書いてみようと思います。

プロジェクトでも分散環境の構築を行うことはありますが、
分散環境の構築は色々面倒な印象が強いです。
特に
・検証するのに複数マシンを確保しなければいけない。
・分散環境の管理システムの設定に癖があり設定が大変。

そこで、
・複数マシンリソースを簡単に確保
→AmazonEC2
・DBクラスタリングを簡単に実現(すると私が思い込んでいる)
→Postgres-XC
を試してみることにしました。

構成は以下をイメージ。

Postgres-XC1.0.1の構成要素として以下を構築します。
gtm:各ノードのtransaction/タプル管理用
gtm_proxy:gtm通信用
coordinator:アプリケーションインタフェース用
Node:データ格納用

マシンリソースの確保。

AmazonEC2の利用は今回が初めてで、少し構えていたのですが、以下の流れで意外と簡単に設定できて驚きました。

1.AWSアカウントを登録。

http://aws.amazon.com/jp/register-flow/

2.ClassicWizardでの設定を選択。
3.InstanceはAmazonLinuxAMIを選択。

(★印がついているInstanceは次にT1Microを選択すると無料らしい。)

4.InstanceTypeはT1Micro、Instance数は4を指定。

5.秘密鍵ファイルを取得。後でローカルマシンからSSHアクセスするときに使います。

6.セキュリティグループ設定によるPORT絞込み。

今回設定に使う予定のPORT用に64535-65535をルールに追加。

7.確認。

後は電話の自動認証による本人確認を行うことで、
設定は完了しました。

インスタンスが4つ確保できています。手軽ですね。

マシン設定

Postgres-XC構築用のマシンはどれもPostgres-XCをインストールしている必要があるので、順次以下の手順で構築しました。

1.SSHアクセス。

まずはTeraTermから先ほどの手順"5"で作成した秘密鍵ファイルを使ってアクセスします。

接続先に"7"インスタンス確認画面から確認できるPublicDNSを指定。
ユーザ:ec2-user ←固定名defaultユーザ
パス:空。
"RSA/DSA鍵を使う"ファイル選択画面から、全てのファイル拡張子、で探して秘密鍵ファイルを指定。

アクセスできました。
以下コマンドを打ってrootユーザになり、色々やります。
sudo su -

2.Postgres-XC用に諸々入れる。

yumとwget大活躍。

・Postgres-XCを落としてきます。
wget http://sourceforge.net/projects/postgres-xc/files/latest/download

・落としてきたファイルを解凍。
tar xzvf pgxc-v1.0.1.tar.gz
cd pgxc

・makeしようとしたら、そんなコマンドないといわれて困りました。
makeできるよう以下コマンドでgcc等色々入れます。
yum groupinstall "Development Tools"
yum groupinstall "Development Libraries"

・Postgres-XCを入れる。
pgxcディレクトリにて、

export CFLAGS='-O2'
./configure --prefix=/usr/local/pgxc
make && make install

※↓このサイトを参考にしています。
http://www.interdb.jp/techinfo/pgxc/index.html

3.作業用にユーザを作成。+必要そうなディレクトリ作成。

useradd pgxcuser
su - pgxcuser

(IFコーディネータ+ノード用サーバ)
mkdir coord
mkdir node
mkdir gtm_proxy

(ELSE gtm用サーバ)
mkdir gtm

4.Postgres-XCのDB設定

打ちなれた(普通のpostgreと同じように)initdbを打ったらエラーになって困惑。
manualを見ると以下のように打つようです。

initdb -D /usr/local/pgsql/data --nodename foo

http://postgres-xc.sourceforge.net/docs/1_0/creating-cluster.html

実際は以下をコマンド実行。

(IFコーディネータ+ノード用サーバ)
▽コーディネータ用
initdb -D /home/pgxcuser/coord --nodename TestNode1
▽ノード用
initdb -D /home/pgxcuser/node --nodename TestNode1
▽gtmプロキシ用
initgtm -Z gtm_proxy -D /home/pgxcuser/gtm_proxy

(ELSE gtm用サーバ)
initgtm -Z gtm -D /home/pgxcuser/gtm

ちょっと休憩

これで各種下準備がそろったので、
postges.confやpg_hba.conf等を設定することで
いよいよ動作確認へ移ります。

でもここまで設定して息切れしたので、今日はここまで。

〜ToBeContinued.