ストリーミングレプリケーションプロトコル

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 46章フロントエンド/バックエンドプロトコル | 早送り | 次のページ

# 46.3. ストリーミングレプリケーションプロトコル

ストリーミングレプリケーションを初期化するために、フロントエンドは開始メッセージにて`replication`パラメータを送信します。 これはバックエンドに対して、SQL文ではなく小規模なレプリケーションコマンド群を発行できるようになる、walsenderモードに入るように伝えます。 walsenderモードでは簡易問い合わせプロトコルのみを使用することができます。 walsenderモードで受け付けられるコマンドは以下の通りです。

IDENTIFY_SYSTEM

  サーバに自身を識別することを要求します。 サーバは以下の３つのフィールドを持つ単一行の結果セットをもって応答します。

  systemid

    クラスタを識別する一意なシステム識別子です。 これを使用してスタンバイを初期化するために使用するベースバックアップが同じクラスタに由来していることを検査することができます。

  timeline

    現在のTimelineIDです。 同様にスタンバイがマスタと一貫性を持つことを検査するために使用されます。

  xlogpos

    現在のxlogの書き出し位置です。 ストリーミングを開始できるトランザクションログの既知の位置を得る際に有用です。

START_REPLICATION `XXX`/`XXX`

  サーバに対して、WALのストリーミングを`XXX`/`XXX` WAL時点から開始するよう指示します。 サーバが、例えば、要求されたWALの断片がすでに回収されているなど、エラーを返すことがありえます。 成功時サーバはCopyBothResponseメッセージで応答し、フロントエンドに対するWALのストリーミングを開始します。 WALのストリーミングは接続が壊れるまで継続され、他に受け付けられるコマンドはありません。

  WALデータはCopyDataメッセージ群として送信されます。 （これにより他の情報を混在させることができます。 具体的にはサーバはストリーム開始後に失敗が起きた場合にErrorResponseメッセージを送信することができます。） CopyDataメッセージのペイロードは以下の書式に従います。

  XLogData (B)

    Byte1('w')

      メッセージをWALデータとして識別します。

    Byte8

      このメッセージ内のWALの開始点。 書式はXLogRecPtrです。

    Byte8

      サーバ上の現在のWAL終了点。 書式はXLogRecPtrです。

    Byte8

      トランザクションの時点でのサーバのシステム時刻。 書式はTimestampTzです。

    Byte`n`

      WALデータストリームの断片。

  単一のWALレコードが2つのCopyDataメッセージに分かれることはありません。 しかしWALレコードがWALページ境界を跨る場合、継続レコードを用いてすでに分割されていますので、ページ境界で分割することができます。 言い換えると、先頭の主WALレコードとその継続レコードは、別のCopyDataメッセージとして分かれることがありえます。

  WALデータ内のすべてのフィールドと上記ヘッダが送信元サーバ用の書式であることに注意してください。 エンディアンやタイムスタンプの書式は受信側が送信元のシステム識別子が自身の`pg_control`の内容と一致するかどうかを検証しない限り予測できません。

  WAL送信プロセスが（postmasterの停止中に）正常に終了する場合、終了前にCommandCompleteメッセージを送信します。 当然ながら異常終了の場合にはこれは送信されないかもしれません。

  受信側のプロセスはいつでも送信側に、以下のメッセージ書式のいずれかを使用して、応答を返送することができます。

  スタンバイ状態の更新(F)

    Byte1('r')

      メッセージを受信側の状態更新として識別します。

    Byte8

      スタンバイにおいて受信しディスクに書き込まれた最終WALバイト+1のXLogRecPtr書式の場所。

    Byte8

      スタンバイにおいてディスクに吐き出された最終WALバイト+1のXLogRecPtr書式の場所。

    Byte8

      スタンバイにおいて適用された最終WALバイト+1のXLogRecPtr書式の場所。

    Byte8

      送信時のサーバのシステムクロック（TimestampTz書式）です。

  ホットスタンバイフィードバックメッセージ(F)

    Byte1('h')

      メッセージをホットスタンバイのフィードバックメッセージとして識別します。

    Byte8

      送信時のサーバのシステムクロック（TimestampTz書式）です。

    Byte4

      スタンバイの現在のxminです。

    Byte4

      スタンバイの現在のエポックです。

BASE_BACKUP [`LABEL` `'label'`] [`PROGRESS`] [`FAST`] [`WAL`] [`NOWAIT`]

  サーバにベースバックアップのストリーミングを始めるよう指示します。 システムはバックアップが開始される前に自動的にバックアップモードになり、バックアップが完了した時に取り出されます。 以下のオプションを受け付けることができます。

  `LABEL` `'label'`

    バックアップのラベルを設定します。 指定がない場合、`base backup`というバックアップラベルが使用されます。 ラベルについての引用符付け規則は、standard_conforming_stringsを有効にした場合の標準SQLの文字列の規則と同じです。

  `PROGRESS`

    進行状況の報告を生成するために必要な情報を要求します。 これは、ストリームが完了するまでにどのくらいかかるかを計算するために使用することができる、各テーブル空間のヘッダ内の概算容量を返送します。 これは、転送を始める前のすべてのファイルサイズを１度数え上げることで計算されます。 これ自体が性能に与える悪影響があるかもしれません。 特に最初のデータがストリームされるまでにより多くの時間がかかる可能性があります。 データベースファイルはバックアップの間変更される可能性がありますので、容量は概算に過ぎず、概算時と実ファイルを送信するまでの間に増減される可能性があります。

  `FAST`

    高速チェックポイントを要求します。

  `WAL`

    バックアップ内に必要なWALセグメントを含めます。 ベースディレクトリtarファイルの`pg_xlog`ディレクトリにある、バックアップの開始から終了までのすべてのファイルが含まれます。

  `NOWAIT`

    デフォルトでは、バックアップは必要な最終xlogセグメントがアーカイブされるまで待機します。 ログアーカイブが有効でない場合は警告が発せられます。 `NOWAIT`により、必要なログが利用できるようになったことを確認することをクライアント側の責任として、この待機や警告が無効になります。

  バックアップを開始する時、サーバはまず２つの通常の結果セットを送信し、続けて１つ以上のCopyResponse結果を送信します。

  最初の通常の結果セットには、単一行の単一列という形でXLogRecPtr書式のバックアップの開始位置が含まれます。

  ２番目の通常の結果セットには各テーブル空間に付き１行を持ちます。 この行のフィールドは以下の通りです。

  spcoid

    テーブル空間のoidです。 ベースディレクトリの場合は`NULL`です。

  spclocation

    テーブル空間ディレクトリのフルパスです。 ベースディレクトリの場合は`NULL`です。

  size

    進行状況報告が要求された場合は、テーブル空間の概算容量です。 要求されていない場合は`NULL`です。

  ２番目の通常の結果セットの後、１つ以上のCopyResponse結果が送信されます。 １つはPGDATA用、`pg_default`、`pg_global`以外の追加のテーブル空間ごとに1つ送信されます。 CopyResponse結果内のデータは、テーブル空間の内容のtar形式ダンプ（ustar00拡張を使用）です。 このtarデータが終わった後、最終の通常結果セットが送信されます。

  データディレクトリと各テーブル空間のtarアーカイブには、そのディレクトリ内のファイルがPostgreSQLファイルかそのディレクトリに追加された他のファイルかに関係なく、すべて含まれます。 以下に除かれるファイルを示します。

  - `postmaster.pid`

  - サブディレクトリを含む`pg_xlog`。 バックアップがwalファイルを含めて実行される場合、合成された版のpg_xlogが含まれます。 これにはバックアップが動作するために必要なファイルのみが含まれ、残りの内容は含まれません。

  サーバ上の基盤となるファイルシステムがサポートする場合、所有者、グループ、ファイルのモードが設定されます。

  すべてのテーブル空間が送信された後、最終の通常の結果セットが送信されます。 この結果セットには、単一行の単一列という形でXLogRecPtr書式のバックアップの終了位置が含まれます。

前のページ | ホーム | 次のページ
メッセージの流れ | 上に戻る | メッセージのデータ型