slony-Iでレプリケーションしよっか
こんばんわ、東京に帰ってきた人です。
今日はむかーしに紹介したpostgreSQLレプリケーションするslony-Iについて深堀します。
以下のエントリーの続きになるよね。
上記のエントリーのようにslony-Iインストール済が前提条件です。インストールパスなども上記エントリーを踏まえて本エントリーも記述します。
いよいよ2台のpostgreSQLがconfigされたサーバのデータベースをレプリケーションいたします。
レプリケーションする作業は/usr/local/slony1/bin/にあるperlツールをpostgreSQLユーザと関連するユーザ(ここではユーザ名slony1とします)で使用しますので/usr/local/slony1/bin/にパスを通しておくと◎
それではさくっとれっつすろーにー!
1.クラスタセットset1の初期化
/usr/local/slony1/etc/slon_tools.confで定義したクラスタセットset1について初期化します。
通常はクラスタセットはset1のみとなるはず。
マスターノードで。
[slony1@MasNod etc]$ slonik_create_set set1 | sed s/"public."/"geekdb."/ | slonik
CONTEXT: SQL statement "SELECT "_replication3".setAddSequence_int( $1 , $2 , $3 , $4 )"
PL/pgSQL function "setaddsequence" line 36 at PERFORM
ちなみにslonik_create_setはクラスタセットを作成する命令文でこの標準出力をslonikコマンドに渡してslonikコマンドがslony-Iにconfigしています。
sedコマンド部分は"public."を"geekdb."に置換しています。postgreSQLのデフォルトスキーマ名は
"public"ですが恐らくみなさん"public"でないと思うので適宜痴漢するよろし。
2.クラスタセットset1のサブスクライバ(スレーブノード)の設定
マスターノードで。
[slony1@MasNod etc]$ slonik_subscribe_set set1 2 | slonik
/usr/local/slony1/etc/slon_tools.confの中身を見てスレーブノードをconfigしているので
実行の前にusr/local/slony1/etc/slon_tools.confをちゃんと確認してね。
3.slony-I起動
マスターノードで。
[slony1@MasNod etc]$ slon_start 1
Invoke slon for node 1 - /usr/local/pgsql/bin//slon -s 1000 -d2 replication3 'host=MasNod dbname=geekdb user=slony1 port=5432' 2>&1 > /var/log/slony1/slony1/node1/slonydb-2010-09-17_20:13:24.log &
Slon successfully started for cluster replication3, node node1
PID [8401]
Start the watchdog process as well...
スレーブノードで。
[slony1@SlaNod etc]$ slon_start 2
Invoke slon for node 2 - /usr/local/pgsql/bin//slon -s 1000 -d2 replication 'host=SlaNod dbname=geekdb user=slony1 port=5432' 2>&1 > /var/log/slony1/slony1/node2/slonydb-2010-09-17_20:15:42.log &
Slon successfully started for cluster replication, node node2
PID [22651]
Start the watchdog process as well...
NOTICE: ALTER TABLE / ADD UNIQUE will create implicit index "tbl__Slony-I_replication_rowID_key" for table "tbl"
CONTEXT: SQL statement "alter table only "public"."tbl" add unique ("_Slony-I_replication_rowID");"
PL/pgSQL function "determineattkindserial" line 54 at EXECUTE statement
NOTICE: truncate of "public"."tbl" succeeded
NOTICE: truncate of "public"."tbl_pkey" succeeded
NOTICE: truncate of "public"."tbl_uniq" succeeded
これにてslonyプロセスがマスター/スレーブノードで起動します。
4.動作確認
ちゃんとレプリケーションできているか確認したいと思います。
マスターノードで。
# su - slony1
$ psql geekdb -q
slonydb=# INSERT INTO tbl VALUE (2,2);
スレーブノードで
# su - slony1
$ psql geekdb -q
slonydb=# SELECT * FROM tbl;
マスターノードでインサートしたデータが格納されていることを確認するよろし。
これで終いです。次回は自動フェールオーバ・・・からのぉぉ・・フェールバック(手動)について論じます。