1

2 台の Postgresql 9.2.1.4 マシン (マスターとスレーブ) で同期レプリケーションを実行しています。

構成は次のとおりです。

マスター パラメータ

synchronous_commit=on
synchronous_standby_names = '*'
no synchronous_replication_timeout parameter, so 10 sec by default
no synchronous_replication parameter, so async by default
wal_level = hot_standby
max_wal_senders = 5
wal_keep_segments = 32
hot_standby = on

スレーブ パラメータ

no synchronous_commit, so by default on 
no synchronous_replication_service parameter, so by default async 
max_wal_senders = 5 
wal_keep_segments = 32 
hot_standby = on 

アプリケーションは、マスターにレコードを挿入し、pgpool を使用してマスターまたはスレーブからレコードを読み取ります。レコードを挿入した直後に、アプリケーションが挿入されたレコードを認識しないことがありますが (おそらく、別の db ホストから挿入されたものを読み取ったため)、後で確認すると、データベースにレコードが存在します。

http://wiki.postgresql.org/wiki/Synchronous_replication#SYNCHRONOUS_REPLICATION_OVERVIEW で、次のことがわかりました

私の質問

  1. a) マスターの synchronous_replication_timeout (デフォルトでは 10 秒) を超えた場合、および次の 3 つのケースのいずれかで、それは本当に意味しますか?
  • データがスレーブに届かなかった、または
  • トランザクションがスレーブでコミットされていないか、
  • トランザクションはスレーブでロールバックされました。

マスターはトランザクションをコミットしますが、スレーブはまったくコミットしませんか?

もしそうなら、トランザクションは本当に同期していないようです...

  1. b) マスターに synchronous_replication_timeout=0 を設定するとどうなりますか? マスターは、スレーブがコミットまたはロールバックするのを無限に待ちますか?
  2. どの値を設定すればよいですか

    synchronous_replication (マスター上) = async (def) | 受信 | fsync | 申し込み

synchronous_replication_service (on Slave)
= async (def) | recv | fsync | apply

適切な同期レプリケーションのセットアップを確実に行うため (したがって、データが両方のサーバーでコミットされているか、両方でロールバックされていると確信しています)

両方とも適用するように設定する必要がありますか?

  1. PosgreSQL 9.1.4 で同期レプリケーションを使用して、データがマスターとスレーブの両方で同時にコミットされるようにするオプションはありますか?
4

1 に答える 1

0

あなたが現在参照している wiki ページでは、コミットされていない同期レプリケーションを実装するパッチについて説明しています

したがって、GUC「synchronous_replication_timeout」または「synchronous_replication_service」に関する質問は、リリースされたバージョンの PostgreSQL には関係ありません。最終的にコミットされた同期レプリケーションのバージョンは、その wiki ページで説明されているものとは大幅に異なるためです。申し訳ありませんが、その wiki ページをクリーンアップする方法について確認します。必要な情報は http://www.postgresql.org/docs/current/static/warm-standby.html#SYNCHRONOUS-REPLICATIONにあります。

于 2012-11-09T03:28:56.360 に答える