IBM Cloud Docs
読み取り専用レプリカ

読み取り専用レプリカ

Databases for PostgreSQL読み取り専用のレプリカは、非同期レプリケーションによって、すべてのデータをリーダー配置からレプリカ配置にレプリケートします。 名前が示すとおり、読み取り専用レプリカは読み取りトランザクションをサポートするので、書き込み中心の操作と読み取り中心の操作の両方があるデータベースの負荷を分散させることができます。 読み取り専用レプリカの PostgreSQL データ・メンバーは 1 つであり、リーダーと同じようにメンバー当たりの消費レートが課金されます。

高可用性の読み取り専用レプリカ

高可用性のDatabases for PostgreSQL 読み取り専用レプリカは、読み取りスケーラビリティの向上、可用性の向上、読み取り待ち時間の短縮、バックアップとディザスタリカバリ機能、読み取りトラフィックの効率的な分散機能などの利点を提供します。 これは、アプリケーションのための、より堅牢で応答性の高いデータベース・インフラストラクチャに貢献します。 詳細については、高可用性読み取り専用レプリカ を参照してください。

リーダー

読み取り専用レプリカがプロビジョニングされる前のDatabases for PostgreSQL配置の_読み取り専用レプリカタブ_では、中央ペインに読み取りレプリカが存在しないことが表示され、[作成] ボタンが表示されます。

デプロイメントがリーダーであり、既に読み取り専用レプリカが接続されている場合、_「複製」_ペインには、レプリカ・デプロイメントのリストと、各デプロイメントへのリンクが表示されます。 読み取り専用レプリカの配置名の右側にある歯車のアイコンをクリックして、そのレプリカを管理します。

読み取り専用レプリカのプロビジョニング

PostgreSQL デプロイメントのリソースはデプロイメントごとに割り振られ、通常のデプロイメントには 2 つのメンバーがあります。 読み取り専用のレプリカにはメンバーが1人しかおらず、プロビジョニングでは現在、メモリとストレージに要求値の半分の値を使用しているため、プロビジョニングに失敗する可能性がある。 Web UI はストレージの値を変更できず、自動的にリーダーデプロイメントの値を使用します。 これだけではデータが収まらない場合は、APIやCLIを使って、プロビジョニングするストレージを2倍指定する必要がある。 (メモリについても同様です。ただし、メモリが少なければリストアが成功しないこともあります) この状態を修正するための更新が進行中です。

UIによるプロビジョニング

リーダーの[_Read replicas]タブから[Create read-only replica] をクリックして、読み取り専用レプリカをプロビジョニングします。 ソース・インスタンスは自動的に完了する。 読み取り専用レプリカの名前は「サービス名」_フィールドに自動生成されますが、自由に名前変更できます。 レプリカをデプロイするリージョンと、初期メモリー割り振り量を選択できます。 ディスク・サイズ、バージョン、パブリック・エンドポイントまたはプライベート・エンドポイントは、リーダーのデプロイメントの設定に合わせて自動的に構成されます。

Key Protect を使用する場合は、CLI と API でプロビジョニングしないと、Bring Your Own Key (BYOK) がサポートされません。 それ以外でプロビジョンすると、読み取り専用レプリカは、生成された鍵で暗号化されます。

CLIによるプロビジョニング

CLI および API で読み取り専用レプリカをプロビジョニングする作業は、標準の Databases for PostgreSQL デプロイメントをプロビジョニングする作業と似ています。 プロビジョニングはリソース・コントローラーで処理され、パラメーター {"remote_leader_id": "crn:v1:..."} を使用して、プロビジョニングするレプリカのリーダーを指定します。

CLIで読み取り専用レプリカをプロビジョニングするには、次のようなコマンドを使用します:

ibmcloud resource service-instance-create <REPLICA_NAME_OR_CRN> databases-for-postgresql standard <REGION> \
-p \ '{
  "remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
  "members_memory_allocation_mb": "2048",
  "members_disk_allocation_mb": "10240"
}'

RAMとディスクの両方を指定する必要がありますが、最小サイズはRAMが2GB、ディスクが10GBです。 オプションで、読み取り専用レプリカでパブリックとプライベートのどちらのエンドポイントを使用するかを指定します。 読み取り専用レプリカのバージョンは指定できません。 このバージョンは、リーダーのデプロイメントと同じメジャー・バージョンに自動的に設定されます。

API を使用したプロビジョニング

APIを通じて読み取り専用のレプリカをプロビジョニングすることは、標準的なDatabases for PostgreSQLデプロイメントのプロビジョニング と同様に機能します。 プロビジョニングはリソース・コントローラーで処理され、パラメーター {"remote_leader_id": "crn:v1:..."} を使用して、プロビジョニングするレプリカのリーダーを指定します。

APIを通じて読み取り専用のレプリカをプロビジョニングするには、以下のようなコマンドを使用する:

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "<REPLICA_NAME_OR_CRN>",
    "target": "<REGION>",
    "resource_group": "<RESOURCE_GROUP_ID>",
    "resource_plan_id": "databases-for-postgresql-standard",
    "parameters": {
      "remote_leader_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71819::",
      "members_memory_allocation_mb": "2048",
      "members_disk_allocation_mb": "10240"
    }
  }'

RAMとディスクの両方を指定する必要がありますが、最小サイズはRAMが2GB、ディスクが10GBです。 オプションで、読み取り専用レプリカでパブリックとプライベートのどちらのエンドポイントを使用するかを指定します。 読み取り専用レプリカのバージョンは指定できません。 このバージョンは、リーダーのデプロイメントと同じメジャー・バージョンに自動的に設定されます。

読み取り専用レプリカ

読み取り専用レプリカの_Read replicas_タブでは、_Replication_にその名前とリージョン、リーダーの名前とリージョンが表示されます。 また、読み取り専用レプリカを再同期するボタンや、プロモートするボタンもあります。

レプリケーション状況の確認

レプリケーションの状態は自動的に監視されないので、レプリケーションを監視する必要があります。

psql 持つ読み取り専用レプリカのレプリケーションステータスを確認する。 admin の資格情報psqlを使用して、 でリーダー・デプロイメントに接続します。 接続したら、以下のいずれかを実行します。

  • PostgreSQLバージョン10以降の場合、'SELECT * from pg_stat_replication;.

それとも

  • PostgreSQLバージョン9.x以前の場合、'SELECT * FROM get_pg_stat_replication();.

読み取り専用レプリカのユーザーと特権

  • リーダーのユーザーは、読み取り専用レプリカをプロビジョニングする前に存在していたユーザーであっても、リーダーのオブジェクトに対して持っている特権と同じ特権で、読み取り専用レプリカにログインして読み取りを実行することができます。

  • 1 つのリーダーに複数の読み取り専用レプリカを関連付けた場合、リーダーで作成したユーザーは、他のすべての読み取り専用レプリカにも作成されます。

  • adminユーザーを含め、リーダーで作成したユーザーは、読み取り専用レプリカをスタンドアロン・デプロイメントにプロモートしてもレプリカに存在し続けます。 読み取り専用レプリカをプロモートすると、リーダーのすべてのユーザーと特権が、プロモートしたデプロイメントに転送されます。

  • 読み取り専用レプリカに対する書き込み操作は、すべてのユーザーについてフィルタリングまたは拒否されるわけではなく、データベース・レベルで機能しなくなります。

読み取り専用レプリカにはアクセスできるが、読み取り専用レプリカからリーダーにアクセスすることはできないユーザーを作成することもできます。 1 つのリーダーに複数の読み取り専用レプリカを関連付けた場合に、いずれかの読み取り専用レプリカでユーザーを作成すると、そのユーザーは他のすべての読み取り専用レプリカにも作成されます。

ある読み取り専用レプリカで作成した読み取り専用レプリカ・ユーザーは、それらのレプリカに接続して読み取りを実行することができます。 読み取り専用レプリカ・ユーザーは、リーダーに接続して操作を実行することはできません。 また、読み取り専用レプリカをスタンドアロン・デプロイメントにプロモートすると、存在しなくなります。

読み取り専用レプリカで作成したユーザーには、リーダーから特権が割り当てられ、ibm-cloud-base-user-ro 役割が割り当てられ、 ibm-cloud-base-user グループのメンバーになります。 サービス資格情報、CLI、または API を使用して作成されたリーダーのすべてのユーザーを含め、このグループの他のメンバーによって作成されたすべてのオブジェクトにアクセスできます。 ibm-cloud-base-user の権限と同様に、読み取り専用のレプリカを作成したユーザーは、adminユーザーによって作成されたオブジェクトや、'psql によって作成された他のユーザーへのアクセス権を持たない。 詳しくは、PostgreSQL の役割と特権のページを参照してください。

読み取り専用レプリカの再同期

読み取り専用レプリカを再同期する必要がある場合は、**「読み取り専用レプリカの再同期 (Resync Read-Only Replica)」**ボタンをクリックします。 再同期は中断を伴う操作です。再同期を実行すると、読み取り専用レプリカのデータは解体されて最初から再構築されます。 再同期の実行中は、読み取り専用レプリカで他の操作を実行することも、照会を実行することもできません。 照会の宛先がリーダーに変更されることはないので、読み取り専用レプリカへの接続は、再同期が完了するまで失敗します。

読み取り専用レプリカの再同期にかかる時間はそれぞれに異なりますが、長い時間がかかるプロセスになる可能性があります。

CLIによる読み取り専用レプリカの再同期

CLI を使用して再同期を開始するには、cdb read-replica-resync コマンドを使用します。

ibmcloud cdb read-replica-resync <DEPLOYMENT_NAME_OR_CRN>

APIによる読み取り専用レプリカの再同期

API を使用して再同期を開始するには、/deployments/{id}/remotes/resync エンドポイントに POST を送信します。

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/resync \
  -H 'Authorization: Bearer <>'

読み取り専用レプリカのプロモート

読み取り専用レプリカを、読み取り操作だけでなく書き込み操作も受け入れる独立したクラスターにプロモートすることができます。 リーダーのデプロイメントに問題が発生した場合に、読み取り専用レプリカをスタンドアロン・クラスターにプロモートして、アプリケーションからの書き込みの受け入れを開始することができます。 read-replicaクラスタにすでに複数のデータメンバが存在する場合、read-replicaクラスタをスタンドアロンクラスタに昇格させる方が速くなります。

プロモーションが行われると、読み取り専用レプリカはリーダーへの接続を終了し、スタンドアロンの Databases for PostgreSQL のデプロイメントになります。 このデプロイメントは読み取り操作と書き込み操作の受け入れと実行を開始できます。バックアップが有効になり、独自の管理者ユーザーが発行されます。 新規データ・メンバーが 1 台追加されるので、デプロイメントはデータ・メンバー 2 台のクラスターになります。 これによってコストは増えますが (メンバーの使用量を基準とする同じ料金が課金されるため)、デプロイメントのメンバーは 1 台ではなく 2 台になります。

読み取り専用レプリカをプロモートするときに、通常はプロモート時に取得する初期バックアップをスキップすることができます。 初期バックアップをスキップすると、レプリカはより早く使用可能になりますが、即時バックアップは利用できません。 プロモーションのプロセスが完了したら、オンデマンド・バックアップを開始できます。

独立したデプロイメントにプロモートした読み取り専用レプリカは、読み取り専用レプリカに戻すことも、リーダーに再参加させることもできなくなります。

UIで読み取り専用レプリカをプロモートする

UI から読み取り専用レプリカをプロモートするには、読み取り専用レプリカのプロモートをクリックします。

CLIで読み取り専用レプリカをプロモートする

CLI を使用してプロモートするには、cdb read-replica-promote コマンドを使用します。

ibmcloud cdb read-replica-promote <DEPLOYMENT_NAME_OR_CRN>

APIによる読み取り専用レプリカのプロモート

API を使用してプロモートするには、/deployments/{id}/remotes/promotion エンドポイントに POST を送信します。

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {}}' \

プロモートし、プロモート後の初期バックアップをスキップするには、JSON 本文に skip_initial_backup も設定します。

curl -X POST \
  https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/remotes/promotion \
  -H 'Authorization: Bearer <>'  \
 -H 'Content-Type: application/json' \
 -d '{"promotion": {"skip_initial_backup": true}}' \

完了までの時間

プロモート・タスクは、データベースの可用性が高くないと完了できません。 ただし、読み取り/書き込みの可用性は約 10 分後に発生しますが、大きな注意点が 1 つあります。データベースの可用性は、タスクが完了するまでは高くなりません。

読み取りレプリカの全プロモーション時間は、データのサイズに基づいて、以下の 2 つの可能な方法によって判別されます。

  • 読み取りレプリカはそれぞれ単一のメンバーです。 プロモートされると、フォーメーション仕様は 2 つのメンバーに変更され、2 番目のレプリカが作成されます。 そのレプリカの作成時間はデータのサイズによって異なります。 そのレプリカの作成は、ネットワークを渋滞させないように、25 MB/s で実行されます。 データベースが拡大すると、作成には相当の時間がかかるようになります。 このタスクは、そのレプリカが作成されるまで完了しません。
  • プロモーションの一環としてバックアップを取ることを選択した場合は、そのバックアップも完了しないとタスクは完了しません。 これについても、データベースのサイズによって異なります。

昇格タスクが完了するまで、高可用性メンバーは存在しない。 同様に、初期バックアップを行うことにした場合、2 番目のポイントが完了するか手動バックアップが作成されるまで、バックアップは存在しません。

プロモート中のアップグレード

データベースの新しいメジャー・バージョンにアップグレードする必要がある場合は、読み取り専用レプリカをスタンドアロン・デプロイメントにプロモートするときにアップグレードすることができます。 詳しくは、新しいメジャーバージョンへのアップグレード をご覧ください。

読み取り専用レプリカに関する考慮事項

  • 読み取り専用レプリカは、ソース構成と同じリージョンに置くことも、別のリージョンに置いて、リージョンをまたいでデータを複製することもできます。

  • 読み取り専用レプリカは、リーダーと同じメジャー・バージョンでなければなりません。

  • 読み取り専用レプリカではバックアップは無効になっています。 バックアップは、リーダーのデプロイメントでのみ取得されます。

  • Replicas are restorable to other regions, except for EU Cloud-enabled regions (currently eu-de and par-01), which are only restorable with each other (for example, par-01 replicas can be restored to eu-de, and vice versa).

  • リーダー1人につき読み取り専用レプリカは5個まで。

  • 読み取り専用レプリカはリーダー・クラスターのリーダー/フォロワーの選択に関与しないので、読み取り専用レプリカへのフェイルオーバーは自動化されません。 読み取り専用レプリカのフル・デプロイメントへのプロモーションは、ユーザーが開始して手動で行う作業です。

  • 読み取り専用レプリカの最小サイズは、2 GB の RAM および 10 GB のディスクです。 リーダーのデプロイメントがこれより小さくても、この最小サイズは変わりません。

  • 読み取り専用レプリカが、リーダーに合わせて自動的にスケーリングされることはありません。 保管するデータの量がデプロイメントに割り振られているディスクの量を超える場合は、読み取り専用レプリカのディスクをスケーリングしてから、リーダーのディスクをスケーリングしてください。 読み取り専用レプリカを最初にスケーリングすることで、読み取り専用レプリカのスペースが枯渇しないようにします。 スペースではなくパフォーマンスのためにリーダーのディスクをスケーリングした場合は、読み取り専用レプリカのスケーリングは必須ではありません。

  • レプリケーションは非同期で行われるので、レプリケーションに遅れが生じることがあります。 デフォルトでは、プライマリとレプリカの間に一貫したコミュニケーションはない。 再同期が必要になるほど、読み取り専用のレプリカが遅れる可能性があります。 リーダーから地理的に遠く離れたリージョンにレプリカを置くと、レプリケーションの遅れが大きくなります。

  • 読み取り専用レプリカは、単一のデータメンバを持つ配置であり、内部的な高可用性はありません。 メンテナンス時には一時的な中断やダウンタイムが発生しがちです。 読み取り専用レプリカに依存するアプリケーションがある場合は、失敗した照会を再試行するロジックや、複数の読み取り専用レプリカに負荷を分散させるロジックを実装してください。