他のバージョンの文書9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

18.6. レプリケーション

これらの設定は組み込みのストリーミングレプリケーション機能の動作を制御します(項25.2.5を参照ください)。 サーバ群のサーバはマスターかスタンバイのいずれかです。マスターはデータを送出する一方、複数のスタンバイは複製されたデータを常に受け取ります。カスケードレプリケーション(項25.2.6を参照)が使用されている場合、スタンバイサーバ群は受け取り手でもあり、送出先でもあります。 パラメータは主として送出先とスタンバイサーバ用ですが、いくつかのパラメータはマスターサーバのみに効力を発します。 必要とあればクラスターに渡って問題なく設定を変化させることができます。

18.6.1. 送出サーバ群

これらのパラメータはレプリケーションデータを1つ、またはそれ以上複数のスタンバイサーバに送るいかなるサーバ上で設定することができます。マスターは常に送出サーバであるため、パラメータは常にマスター上に設定されなければなりません。これらのパラメータの役割と意味はスタンバイが後にマスターに昇格しても変わりません。

max_wal_senders (integer)

複数のスタンバイサーバ、またはストリーミングを基盤とする予備(バックアップ)クライアントからの同時接続を受ける接続最大値を設定します(つまり、同時に稼動するWAL送信プロセスの最大値です)。 デフォルトはゼロです。その意味するところはレプリケーションは無効です。 WAL送出プロセスは最大接続数を数えているため、max_connectionsを越えたパラメータの設定できません。 このパラメータはサーバ起動時のみ設定可能です。 スタンバイサーバからの接続を許可するには、wal_levelarchive、またはhot_standbyに設定されなければなりません。

wal_keep_segments (integer)

ストリーミングレプリケーションにおいて、スタンバイサーバが過去のファイルセグメントを取得する必要がある場合に備え、pg_xlogディレクトリに保持しておくファイルセグメント数の最小値を指定します。 それぞれのセグメントは通常16メガバイトです。 もし送出サーバに接続しているスタンバイサーバがwal_keep_segmentsセグメントを越えて遅延した場合、送出サーバはスタンバイサーバが今後とも必要とするWALセグメントを削除する可能性があります。 この場合、レプリケーション接続は終了させられます。結果として下流に対する接続が同時に結果として終了されることがあります。(しかし、WALアーカイブが使用されていれば、スタンバイサーバはアーカイブからセグメントを取り出し、復旧することができます。)

pg_xlogに保持され続けるセグメントの最小値のみを設定します。 システムはWALアーカイブのため、またはチェックポイントからの復旧のため、より多くのセグメント保持が必要となることがあります。もしwal_keep_segmentsが(デフォルトの)ゼロの場合、システムは待機目的でのいかなる追加セグメントも保持しません。 従って、スタンバイサーバが使用できる古いWALセグメントの多くは、前回のチェックポイントの場所とWALアーカイブの状態を捕捉する機能になります。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

replication_timeout (integer)

指定されたミリ秒単位の値より長く非活動のレプリケーション接続を停止します。 スタンバイサーバのクラッシュ、またはネットワークの停止を送出サーバが検出することにこれが役立ちます。 値ゼロはタイムアウト機能を無効にします。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。 デフォルトの値は60秒です。

時期尚早に接続が停止されることを防ぐため、スタンバイサーバでwal_receiver_status_intervalが必ず有効になっていなければなりません。 また、その値はreplication_timeoutの値未満でなければなりません。

18.6.2. マスターサーバ

これらのパラメータはレプリケーションデータを1つ、またはそれ以上複数のスタンバイサーバに送るマスター/プライマリサーバ上で設定することができます。 これらパラメータに加え、wal_levelはマスターサーバ上で適切に設定される必要があり、任意的にWALアーカイブがサーバとしても有効になります(項18.5.3を参照してください)。 スタンバイサーバがマスターサーバになるかもしれない状況に備え、それらのパラメータをスタンバイサーバで設定したいと考えたとしても、スタンバイサーバ上でのパラメータの値は意味をなしません。

synchronous_standby_names (string)

項25.2.7で説明されているように、同期レプリケーションをサポート可能なコンマで区切られたリストでスタンバイサーバの名前を指定します。 いつの時点においても、最低限一つの活動している同期スタンバイサーバが存在します。 コミットを待機しているトランザクションは、このスタンバイサーバがそのデータの受信を確認してから処理の継続が許可されます。 同期スタンバイサーバはこのリストで一番目に名前が挙げられていており、現時点で接続され、そしてデータをリアルタイムでストリーミングしているものです( pg_stat_replication ビューにおいてストリーミング状態として示されています)。 このリストの後の方に記載されているその他のスタンバイサーバは潜在的に同期スタンバイサーバになることを示しています。 もし現在の同期スタンバイサーバが理由にかかわらず切断された場合、次に順位の高いスタンバイサーバがすぐに取って代わります。 二つ以上のスタンバイサーバ名を指定することでかなりの高可容性が得られます。

この目的のスタンバイサーバの名前は、スタンバイサーバのwalreceiverのprimary_conninfoで設定されるのと同じく、スタンバイサーバのapplication_name設定となります。 一意性を強要する仕組みにはなっていません。 walreceiverのデフォルトのアプリケーション名を含めて、特別の記載である*は全てのapplication_nameにマッチします。

ここに同期スタンバイ名が指定されていない場合、同期レプリケーションは有効とはならず、トランザクションコミットはレプリケーションを待機しません。これがデフォルトの設定です。同期レプリケーションが有効であっても、synchronous_commitパラメータをlocal または offに設定することにより、個別のトランザクションをレプリケーションに対して待機しないように設定できます。

このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

vacuum_defer_cleanup_age (integer)

VACUUM および HOTの更新が不要行バージョンの清掃と差があるかを決めるトランザクションの数を指定します。デフォルトはゼロトランザクションです。この意味は、不要行バージョンは速やかに削除され、即いかなる開いているトランザクションから不可視となります。 項25.5に記載されているように、ホットスタンバイサーバをサポートしている場合、非ゼロ値に設定したい場合があります。早期に掃除された行のため、衝突を回避するためスタンバイ上での問い合わせが完了するのにより時間を割くことができます。しかし、値はプライマリーサーバ上で発生している書き込みトランザクションの観点から計測されるため、スタンバイの問い合わせにたいして猶予時間がどのくらい有効となるかは予測できません。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

このパラメータの使用の代わりにスタンバイサーバ上に hot_standby_feedbackの設定を考慮する必要もあります。

18.6.3. スタンバイサーバ

これらの設定はレプリケーションデータを受け取るスタンバイサーバの動作を管理します。 マスターサーバ上のこれらの値は無意味です。

hot_standby (boolean)

項25.5に記載されている通り、リカバリの最中に接続し、そして問い合わせを実行できるか否かを設定します。デフォルト値はoffです。 このパラメータはサーバ起動時のみ設定可能です。これは、アーカイブリカバリ期間、又は待機モードにある場合にのみ効果をもたらします。

max_standby_archive_delay (integer)

ホットスタンバイが稼動している場合、このパラメータは項25.5.2で記載されているように、まさに適用されようとしているWALエントリと衝突するスタンバイサーバの問い合わせをキャンセルするにはどれだけ待機しなければならないかを設定します。 max_standby_streaming_delayはWALデータをWALアーカイブから読み込んでいる時に適用されます(従って最新ではありません)。 デフォルトは30秒です。特に指定が無ければ単位はミリ秒です。値-1は衝突する問い合わせが完了するまでスタンバイサーバが待ち続けられるようにします。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

max_standby_archive_delayはキャンセル前に問い合わせが実行できる最大の時間の長さと同じでないことに注意してください。むしろ、任意の1つのWALセグメントのデータに適用される最大許可時間です。従って、ある問い合わせがWALセグメント内で時間的に初期の段階で大幅な遅延となった場合、その後の衝突する問い合わせの猶予時間はましてさらに短くなります。

max_standby_streaming_delay (integer)

ホットスタンバイが稼動している場合、このパラメータは項25.5.2で記載されているように、まさに適用されようとしているWALエントリと衝突するスタンバイサーバの問い合わせをキャンセルするにはどれだけ待機しなければならないかを設定します。 max_standby_streaming_delayはWALデータをストリーミングレプリケーションから受け取っている時に適用されます。 デフォルトは30秒です。特に指定が無ければ単位はミリ秒です。値-1は衝突する問い合わせが完了するまでスタンバイサーバが待ち続けられるようにします。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

max_standby_streaming_delayはキャンセル前に問い合わせが実行できる最大の時間の長さと同じでないことに注意してください。むしろ、プライマリサーバから一度受け取られたWALデータを適用するための最大許可時間です。 従って、ある問い合わせがWALセグメントにおいてそれまでに大幅な遅延となった場合、それに続いて衝突する問い合わせは、スタンバイサーバがふたたび遅れを取り戻すまで、猶予時間はさらに短くなります。

wal_receiver_status_interval (integer)

プライマリー、または上位サーバに対してレプリケーションの進捗情報を送信するため、スタンバイ上のWAL受信プロセスの最小頻度を指定します。ここで、 pg_stat_replicationビューにより確認することが可能です。 スタンドバイサーバは既に書き込まれた最終のログ位置を報告し、その最終位置がディスクにフラッシュされ、その最終位置が適用されます。 このパラメータの値がそれぞれの報告間における秒単位の最大の時間間隔です。 書き込み、またはフラッシュ位置が変更される毎に更新が行われます。 あるいは、少なくともこのパラメータで設定された頻度で行われます。 このパラメータをゼロに設定すると、ステータスの更新を完全に無効化します。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。 デフォルトの値は10秒です。

送出サーバ上でreplication_timeoutが有効になっている場合、wal_receiver_status_intervalも有効になっていなければなりません。 そして、その値はreplication_timeoutの値未満である必要があります。

hot_standby_feedback (boolean)

ホットスタンバイがスタンバイサーバ上で現在処理を行っている問い合わせについて、プライマリーまたは上位サーバにフィードバックを送るか否かを指定します。 このパラメータはレコードの後片付けに起因する問い合わせの取り消しを排除するために使用することができます。 しかし、いくつかの作業負荷に対してはプライマリーサーバ上でのデータベース肥大の原因となります。 フィードバックメッセージはwal_receiver_status_interval毎に、一回以上送信されません。 デフォルトの値はoffです。 このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

カスケードレプリケーションが使用されている場合、フィードバックは最終的にプライマリーに到達するまで上位サーバに転送されます。スタンバイは上位に転送以外、受け取ったフィードバックを他に使用しません。