PostgreSQL9.0ストリーミングレプリケーション手順検証
@knakaとtwitterでやり取りして疑問が出たので検証をしておきます。
ただtwitterでの制限されたやり取りなので@knakaの確認したい事と
ずれてる可能性があります。
今回はそのやり取りの中で私がやっとこうと思った検証を行なっておきます。
その後、@knakaの確認したい事を聞いて、確実にしておきたいと思います。
また、PostgreSQLとして本当に正しい手順も気になるので
この検証とは別に@knakaと話をしておきたいと思います。
検証環境のサーバは3台
プライマリー 192.168.14.101
ホットスタンバイ 192.168.14.102
ホットスタンバイ 192.168.14.103
設定方法は下記に準じます。
http://d.hatena.ne.jp/bose999/20100922/1285140248
◯検証 その1 ホットスタンバイを作っているバックアップモード後に
データに差分が出たらどうなるか?
手順
プライマリーからホットスタンバイサーバ2台にファイルをコピーした後に、
バックアップモードを解除してデータに差分を作ります。
その後、ホットスタンバイサーバを起動させてデータを確認します。
結果
きちんとレプリケーションされていて問題がなかった。
# su - postgres $ psql psql (9.0.0) "help" でヘルプを表示します. postgres=# select pg_start_backup('init'); pg_start_backup ----------------- 0/1B000020 (1 行) postgres=# \q $ exit logout # scp -r /var/lib/pgsql/9.0/data 192.168.14.102:/var/lib/pgsql/9.0/ # scp -r /var/lib/pgsql/9.0/data 192.168.14.103:/var/lib/pgsql/9.0/ →バックアップモード中にファイルコピー # su - postgres $ psql psql (9.0.0) "help" でヘルプを表示します. postgres=# select pg_stop_backup(); NOTICE: pg_stop_backup complete, all required WAL segments have been archived pg_stop_backup ---------------- 0/1B0000D8 (1 行) postgres=# \q →バックアップモードを解除 $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 (6 行) sample=# insert into test values(8); INSERT 0 1 sample=# insert into test values(9); INSERT 0 1 sample=# insert into test values(10); INSERT 0 1 sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 (9 行) sample=# \q -bash-3.2$ exit logout # →バックアップモード解除後にデータを投入。 ファイルコピー後にトランザクションが発生しています。 先程のバックアップから差分が発生している状態です。
1台目のホットスタンバイを立ち上げてselectしてみます。
結果は同期できています。
# su - postgres $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 (9 行) sample=# \q -bash-3.2$ exit logout
2台目のホットスタンバイを立ち上げてselectしてみます。
結果は同期できています。
# su - postgres $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 (9 行) sample=#
◯検証 その2 ホットスタンバイを作っているバックアップモード中と、
バックアップモード解除後にデータに差分が出たらどうなるか?
手順
プライマリーからホットスタンバイサーバ2台にファイルをコピーした後に、
バックアップモードを解除しないでデータ差分を発生させます。
次にバックアップモードを解除してさらにデータに差分を作る。
その後、ホットスタンバイサーバを起動させてデータを確認します。
結果
きちんとレプリケーションされていて問題はなかった。
# su - postgres $ psql psql (9.0.0) "help" でヘルプを表示します. postgres=# select pg_start_backup('init2'); pg_start_backup ----------------- 0/1E000020 (1 行) postgres=# \q $ exit logout # scp -r /var/lib/pgsql/9.0/data 192.168.14.102:/var/lib/pgsql/9.0/ # scp -r /var/lib/pgsql/9.0/data 192.168.14.103:/var/lib/pgsql/9.0/ →バックアップモード中にファイルコピー # su - postgres $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 (9 行) sample=# insert into test values(11); INSERT 0 1 sample=# insert into test values(12); INSERT 0 1 sample=# insert into test values(13); INSERT 0 1 sample=# insert into test values(14); INSERT 0 1 sample=# insert into test values(15); INSERT 0 1 sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 11 12 13 14 15 (14 行) sample=# select pg_stop_backup(); NOTICE: pg_stop_backup complete, all required WAL segments have been archived pg_stop_backup ---------------- 0/1E000B08 (1 行) →バックアップモードを解除 sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 11 12 13 14 15 (14 行) sample=# insert into test values(16); INSERT 0 1 sample=# insert into test values(17); INSERT 0 1 sample=# insert into test values(18); INSERT 0 1 sample=# insert into test values(19); INSERT 0 1 sample=# insert into test values(20); INSERT 0 1 sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (19 行) sample=# \q -bash-3.2$ exit logout # →バックアップモード解除後にデータを投入 バックアップモード解除前と解除後にトランザクションが発生している。 バックアップモードの開始から差分が2段階発生している状態
1台目のホットスタンバイを立ち上げてselectしてみます。
結果は同期できています。
# su - postgres $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (19 行) sample=# \q $ exit logout #
2台目のホットスタンバイを立ち上げてselectしてみます。
結果は同期できています。
# su - postgres $ psql sample psql (9.0.0) "help" でヘルプを表示します. sample=# select * from test; ID ---- 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (19 行) sample=# \q $ exit logout
追記
http://twitter.com/knaka/status/25294413943
この疑問は調べておかないと行けない感じ。