2010年11月10日水曜日

PostgreSQL 9.0でレプリケーション先の追加

前回、PostgreSQL 9.0のレプリケーション機能を試したが、今回は、レプリケーション先の追加を試してみました。
イメージはこんな感じで

サーバーAからサーバーBにレプリケーションされている状態に、新たにサーバーCをレプリケーション先として追加します。

まず、サーバーCにubuntuを入れてPostgreSQL9.0をソースからビルドしておきます。

次に、サーバーBとサーバーCのPostgreSQLを停止します。
サーバーBで
$ sudo /etc/init.d/postgresql stop
サーバーCで
$ sudo /etc/init.d/postgresql stop

サーバーBの/usr/local/pgsql/dataをサーバーCにコピーします。
サーバーBで
$ su - postgres
$ cd /usr/local/pgsql/
$ tar zcvf data.tar.gz data
$ scp data.tar.gz 192.168.168.238:/usr/local/pgsql/
$ exit
サーバーCで
$ su - postgres
$ cd /usr/local/pgsql/
$ tar zxvf data.tar.gz
$ exit

最後に、サーバーBとサーバーCのPostgreSQLを起動します。
サーバーBで
$ sudo /etc/init.d/postgresql start
サーバーCで
$ sudo /etc/init.d/postgresql start

これで、サーバーCがレプリケーション先として追加できました。
動作を確認してみます。
レプリケーション元のデータを更新します。
サーバーAで
$ su - postgres
$ psql testdb
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
(1 row)

testdb=# insert into table1(id) values (2);
INSERT 0 1
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
  2 | 2010-11-10 14:54:15.611948
(2 rows)
サーバーBとサーバーCで
$ su - postgres
$ psql testdb
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
  2 | 2010-11-10 14:54:15.611948
(2 rows)
となり、更新内容が反映されていることが確認できました。


あと、レプリケーション先のサーバーBとサーバーCのPostgreSQLが停止している間に、サーバーAのデータが更新された場合も確認してみました。

まず、レプリケーション先のPostgreSQLを停止します。
サーバーBで
$ sudo /etc/init.d/postgresql stop
サーバーCで
$ sudo /etc/init.d/postgresql stop

次に、レプリケーション元のサーバーAのデータを更新します。
$ su - postgres
$ psql testdb
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
  2 | 2010-11-10 14:54:15.611948
(2 rows)

testdb=# insert into table1(id) values (3);
INSERT 0 1
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
  2 | 2010-11-10 14:54:15.611948
  3 | 2010-11-10 14:59:57.012077
(3 rows)

レプリケーション先のPostgreSQLを起動します。
サーバーBで
$ sudo /etc/init.d/postgresql start
サーバーCで
$ sudo /etc/init.d/postgresql start

レプリケーション元のサーバーAの更新内容が反映されているか確認します。
サーバーBとサーバーCで
$ su - postgres
$ psql testdb
testdb=# select * from table1;
 id |        create_date
----+----------------------------
  1 | 2010-11-08 11:19:10.162554
  2 | 2010-11-10 14:54:15.611948
  3 | 2010-11-10 14:59:57.012077
(3 rows)
となり、更新内容が反映されていることが確認できました。

0 コメント :

コメントを投稿