Slony-I 1.2で複数DBのレプリケーションをやってみた
前回の例では、単一DBを複数のノードにレプリケートしたが、複数のDBを別個のノードにレプリケートする際には、複数のセットを定義する必要がある。
例えば、
set1: 1: repldb1: 1 ==> repldb2: 2 set11: 11: slmaster: 11 ==>slslave: 12 set21: 21: pgbenchmaster: 21 ==> pgbenchmaster: 22
のように、複数のDBからレプリケートするには、次のように repldb1(DB), slmaster(DB), pgbenchmaster(DB) の中に含まれるテーブルを書き下す必要がある。(テーブルは筆者の環境で任意に作成した)
"set1" => { "set_id" => 1, "origin" => 1, "table_id" => 1, "pkeyedtables" => ["table1","table2","table3"], }, "set11" => { "set_id" => 11, "origin" => 11, "table_id" => 11, "pkeyedtables" => ["table1"], }, "set21" => { "set_id" => 21, "origin" => 21, "table_id" => 21, "pkeyedtables" => ["public.accounts", "public.branches", "public.tellers"], "serialtables" => ["public.history"], },
また、 add_node のところでも念のため、対応するparent を設定することができるが、set がDBごとに重複しないなら、 set 内でoriginを設定することでもsetごとにmasterが設定されるようだ。(未確認)
なお、この方法では、既にレプリケートが行われている中で新たにレプリケートを追加したい場合、slonik_* では、新たに追加したいノードに _クラスタ名 のスキーマを加えることができない (通常は slonik_init_cluster を使うが、既に稼働中の場合は使用できない ) ため、手動でスキーマを作成するなどの手段が必要なようだ。
ただし、単純にレプリケートをDBごとに追加したいだけなら、同一のslon_tools.conf を使用する必要は無く、 repldb1_repldb2.conf, slmaster_slslave.conf などの設定ファイルをDBごとに設定する方法もある。設定ファイルは、slonik_*, slon_start で --config 設定ファイル名 のオプションを使って与えることが出来る。
この方法なら、他DBに影響を与えることなく、各DBのレプリケーションを始めることができる。頻繁に新規のDBを追加する環境では使いやすそうだ。