こんにちは。上田です。
最近DBクラスタリング周りの構築パターンとして、
AmazonEC2+Postgres-XCを試してみたので、
その辺のところを書いてみようと思います。
プロジェクトでも分散環境の構築を行うことはありますが、
分散環境の構築は色々面倒な印象が強いです。
特に
・検証するのに複数マシンを確保しなければいけない。
・分散環境の管理システムの設定に癖があり設定が大変。
そこで、
・複数マシンリソースを簡単に確保
→AmazonEC2
・DBクラスタリングを簡単に実現(すると私が思い込んでいる)
→Postgres-XC
を試してみることにしました。
Postgres-XC1.0.1の構成要素として以下を構築します。
gtm:各ノードのtransaction/タプル管理用
gtm_proxy:gtm通信用
coordinator:アプリケーションインタフェース用
Node:データ格納用
マシンリソースの確保。
AmazonEC2の利用は今回が初めてで、少し構えていたのですが、以下の流れで意外と簡単に設定できて驚きました。
1.AWSアカウントを登録。
2.ClassicWizardでの設定を選択。
5.秘密鍵ファイルを取得。後でローカルマシンからSSHアクセスするときに使います。
マシン設定
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.