読み取り専用レプリカ
Databases for PostgreSQL読み取り専用のレプリカは、非同期レプリケーションによって、すべてのデータをリーダー配置からレプリカ配置にレプリケートします。 名前が示すとおり、読み取り専用レプリカは読み取りトランザクションをサポートするので、書き込み中心の操作と読み取り中心の操作の両方があるデータベースの負荷を分散させることができます。 読み取り専用レプリカの PostgreSQL データ・メンバーは 1 つであり、リーダーと同じようにメンバー当たりの消費レートが課金されます。
高可用性の読み取り専用レプリカ
高可用性のDatabases for PostgreSQL 読み取り専用レプリカは、読み取りスケーラビリティの向上、可用性の向上、読み取り待ち時間の短縮、バックアップとディザスタリカバリ機能、読み取りトラフィックの効率的な分散機能などの利点を提供します。 これは、アプリケーションのための、より堅牢で応答性の高いデータベース・インフラストラクチャに貢献します。 詳細については、高可用性読み取り専用レプリカ を参照してください。
リーダー
デプロイメント Databases for PostgreSQL の 「読み取り専用レプリカ 」タブでは、読み取り専用レプリカがプロビジョニングされる前に、中央ペインに「読み取り専用レプリカが存在しません」と表示され、 「作成 」ボタンが提供されます。
デプロイメントがリーダーであり、既に読み取り専用レプリカが接続されている場合、_「複製」_ペインには、レプリカ・デプロイメントのリストと、各デプロイメントへのリンクが表示されます。 読み取り専用レプリカのデプロイメント名の右側にある歯車アイコンをクリックして管理します。
読み取り専用レプリカのプロビジョニング
PostgreSQL デプロイメントのリソースはデプロイメントごとに割り振られ、通常のデプロイメントには 2 つのメンバーがあります。 読み取り専用レプリカはメンバーが1つしか存在せず、プロビジョニングでは現在メモリとストレージの要求値の半分を使用するため、プロビジョニングが失敗する可能性があります。 Web UIではストレージの値を変更できず、自動的にリーダーデプロイメントの値(半減された値)が使用されます。 データが収まらない場合は、APIまたはCLIを使用して、プロビジョニングしたいストレージ容量の2倍を指定する必要があります。 (メモリについても同様ですが、メモリ容量が少なくても復元が成功しないとは限りません。) この状態を修正するための更新が進行中です。
UIによるプロビジョニング
リーダーの「 読み_取り専用レプリカ」タブから、 [読み取り専用レプリカを作成] をクリックして読み取り専用レプリカを提供します。 ソースインスタンスは自動的に完了します。 読み取り専用レプリカの名前は「サービス名」_フィールドに自動生成されますが、自由に名前変更できます。 レプリカをデプロイするリージョンと、初期メモリー割り振り量を選択できます。 ディスク・サイズ、バージョン、パブリック・エンドポイントまたはプライベート・エンドポイントは、リーダーのデプロイメントの設定に合わせて自動的に構成されます。
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であることを留意してください。 オプションで、読み取り専用レプリカでパブリックとプライベートのどちらのエンドポイントを使用するかを指定します。 読み取り専用レプリカのバージョンは指定できません。 このバージョンは、リーダーのデプロイメントと同じメジャー・バージョンに自動的に設定されます。
読み取り専用レプリカ
_読み取り_専用レプリカのリディレプリカタブでは、 _レプリケーションには_その名前とリージョン、およびそのリーダーの名前とリージョンが含まれます。 また、読み取り専用レプリカを再同期するボタンや、プロモートするボタンもあります。
レプリケーション状況の確認
レプリケーションの状態は自動的に監視されないので、レプリケーションを監視する必要があります。
読み取り専用レプリカのレプリケーション状態は、そのリーダーからのみで確認できます psql。 admin の資格情報psqlを使用して、 でリーダー・デプロイメントに接続します。
接続したら、次のコマンドを実行してください:
SELECT * from pg_stat_replication;
レプリケーション遅延の出力監視時には、がフォーメーションIDまたはクラウドリソース名(CRN)を application_name 指すことに注意してください。 レプリケーション中に「async」の sync_state 値、「Streaming」の state 値、および時間統計を探してください。 詳細については、 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 番目のポイントが完了するか手動バックアップが作成されるまで、バックアップは存在しません。
プロモート中のアップグレード
データベースの新しいメジャー・バージョンにアップグレードする必要がある場合は、読み取り専用レプリカをスタンドアロン・デプロイメントにプロモートするときにアップグレードすることができます。 詳しくは、新しいメジャーバージョンへのアップグレード をご覧ください。
読み取り専用レプリカに関する考慮事項
-
読み取り専用レプリカは、ソース構成と同じリージョンに置くことも、別のリージョンに置いて、リージョンをまたいでデータを複製することもできます。
-
読み取り専用レプリカは、リーダーと同じメジャー・バージョンでなければなりません。
-
読み取り専用レプリカではバックアップは無効になっています。 バックアップは、リーダーのデプロイメントでのみ取得されます。
-
レプリカは他のリージョンに復元可能ですが、EUクラウド対応リージョン(現在
eu-deおよびpar-01)は互いにのみ復元可能です(例:par-01のレプリカは に復元可能eu-de、その逆も同様)。 -
リーダーごとに読み取り専用レプリカは5つまでです。
-
読み取り専用レプリカはリーダー・クラスターのリーダー/フォロワーの選択に関与しないので、読み取り専用レプリカへのフェイルオーバーは自動化されません。 読み取り専用レプリカのフル・デプロイメントへのプロモーションは、ユーザーが開始して手動で行う作業です。
-
読み取り専用レプリカの最小サイズは、2 GB の RAM および 10 GB のディスクです。 リーダーのデプロイメントがこれより小さくても、この最小サイズは変わりません。
-
読み取り専用レプリカが、リーダーに合わせて自動的にスケーリングされることはありません。 保管するデータの量がデプロイメントに割り振られているディスクの量を超える場合は、読み取り専用レプリカのディスクをスケーリングしてから、リーダーのディスクをスケーリングしてください。 読み取り専用レプリカを最初にスケーリングすることで、読み取り専用レプリカのスペースが枯渇しないようにします。 スペースではなくパフォーマンスのためにリーダーのディスクをスケーリングした場合は、読み取り専用レプリカのスケーリングは必須ではありません。
-
レプリケーションは非同期で行われるので、レプリケーションに遅れが生じることがあります。 デフォルトでは、プライマリとレプリカ間の一貫した通信は行われません。 再同期が必要になるほど、読み取り専用のレプリカが遅れる可能性があります。 リーダーから地理的に遠く離れたリージョンにレプリカを置くと、レプリケーションの遅れが大きくなります。
-
読み取り専用レプリカは、単一のデータメンバーを持つデプロイメントであり、内部的な高可用性を一切備えていません。 メンテナンス時には一時的な中断やダウンタイムが発生しがちです。 読み取り専用レプリカに依存するアプリケーションがある場合は、失敗した照会を再試行するロジックや、複数の読み取り専用レプリカに負荷を分散させるロジックを実装してください。
インプレースでのメジャーバージョンアップグレード時の読み取り専用レプリカの状態
当社の Databases for PostgreSQL サービスにおけるインプレースでのメジャーバージョンアップグレードの導入に伴い、読み取り専用レプリカは読み取りトランザクションの継続性を維持するのに役立ち、特にアップグレードプロセス中に有用であることが証明されています。 ただし、現時点ではこの機能は読み取り専用レプリカには適用できないことに注意してください。 それでも、アップグレード中のインスタンスからデータを読み取る必要がある場合は、 スタンバイインスタンスを作成し、アプリケーションの接続先をスタンバイインスタンスに変更することを検討してください。 これにより、アップグレードを開始する前に、データベースの最新コピーを確保できます。 インプレースアップグレードが正常に完了しなかった場合、スタンバイインスタンスをプライマリインスタンスとして昇格させて使用することも可能です。
インプレースでのメジャーバージョンアップグレード中、ソースインスタンスとその読み取り専用レプリカはレプリケーション機能を失い、アップグレード後もレプリケーションは自動的に復元されません(なお、バージョン変更により互換性が失われる点にも注意してください)。 ただし、読み取り専用レプリカはスタンドアロンインスタンスとして完全に動作し続けます。 したがって、アップグレードの結果とは独立して、いつでも安全に読み取り専用レプリカをプライマリインスタンスに昇格させることができます。 アップグレードに失敗した場合、読み取り専用レプリカを昇格させることで、データベースを迅速に復元できます。