このページでは、Cloud SQL インスタンスのリードレプリカを作成する方法について説明します。
外部サブスクライバーのパブリッシャーとして機能する Cloud SQL インスタンスを設定するには、外部レプリカを構成するをご覧ください。
リードレプリカとは、プライマリ インスタンスのコピーのことで、プライマリへの変更が通常の状況下で、ほぼリアルタイムで反映されます。リードレプリカは、プライマリ インスタンスからの読み取りリクエストやアナリティクス トラフィックをオフロードするために使用します。
また、障害復旧では、リージョンを移行することもできます。レプリカがクロスリージョン レプリカの場合は、別のリージョンにフェイルオーバーできます。たとえば、レプリカをスタンドアロン インスタンスに昇格できます(この場合、このインスタンスは既存のレプリカのプライマリとは見なされません)。
レプリケーションの仕組みについて詳しくは、Cloud SQL のレプリケーションをご覧ください。
始める前に
このインスタンスのレプリカを初めて作成する場合は、インスタンスがプライマリ インスタンスの要件を満たしていることを確認してください。詳細
リードレプリカを作成する
リードレプリカを作成する際は、次の点を考慮してください。- プライマリ インスタンスごとに最大 8 つのリードレプリカを作成できます。
- エディションを指定しない場合、デフォルトは Cloud SQL Enterprise エディションです。
- リードレプリカまたはカスケード レプリカを作成するときに、プライマリが Cloud SQL Enterprise Plus エディションのインスタンスである場合は、使用するエディションと階層を指定する必要があります。
リードレプリカを作成する手順は次のとおりです。
コンソール
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- レプリカを作成するインスタンスを探して、リストの横にある [
more actions] メニューを開きます。 - [リードレプリカを作成] を選択します。
この選択肢が表示されない場合、そのインスタンスはレプリカです。レプリカのレプリカを作成することはできません。
[インスタンスのカスタマイズ] セクションで、レプリカの設定を更新します。最初に [構成オプションを表示] をクリックして、設定のグループを表示します。次に、目的のグループを開いて設定を確認し、カスタマイズします。選択したすべてのオプションの [サマリー] が右側に表示されます。これらの設定のカスタマイズはオプションです。カスタマイズを行わない場合、デフォルト値が割り当てられます。
各設定の詳細については、インスタンスの設定ページをご覧ください。
- [レプリカを作成する] をクリックします。
Cloud SQL により、必要に応じてバックアップが作成され、レプリカが作成されます。プライマリのインスタンス ページに戻ります。
gcloud
レプリカを作成します。
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME
必要な場合は、--tier パラメータを使用して異なる階層サイズを指定できます。
--region パラメータを使用して別のリージョンを指定できます。
プライマリ インスタンスが内部 IP アドレスだけを持つ場合は、--no-assign-ip パラメータをコマンドに追加します。
他のインスタンス設定のパラメータを追加することもできます。詳細については、gcloud sql インスタンスの作成をご覧ください。
レプリカは、プライマリ インスタンスと同じ VPC ネットワーク内に作成する必要があります。同じ VPC ネットワークで allocated-ip-range-name を指定することもできます。範囲が指定されていない場合、レプリカはランダムな範囲で作成されます。
Terraform
リードレプリカを作成するには、Terraform リソースを使用します。
REST v1beta4
インスタンス リソースの insert メソッドを使用してリードレプリカを作成します。リージョンと databaseVersion プロパティはマスターと同じにする必要があります。
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
- database-version: 列挙型のバージョン文字列(例: SQLSERVER_2017_ENTERPRISE)
- primary-instance-name: プライマリ インスタンスの名前
- primary-instance-region: プライマリ インスタンスのリージョン
- replica-region: レプリカ インスタンスのリージョン
- replica-name: レプリカ インスタンスの名前
- machine-type: マシンタイプの列挙型文字列。例: 「db-custom-1-3840」
sqlNetworkArchitecture フィールドを使用すると、プロジェクトが完全にアップグレードされていない場合でも、インスタンスの作成時に新しいネットワーク アーキテクチャの使用を強制できます。新しいネットワーク アーキテクチャとその影響の詳細については、
インスタンスを新しいネットワーク アーキテクチャにアップグレードすると IP アドレス範囲を割り振るをご覧ください。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances
リクエストの本文(JSON):
{
"masterInstanceName": "primary-instance-name",
"project": "project-id",
"databaseVersion": "database-version",
"name": "replica-name",
"region": "replica-region",
"settings":
{
"tier": "machine-type",
"settingsVersion": 0,
},
"sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
Private Service Connect が有効になっているインスタンスのリードレプリカを作成する
Private Service Connect が有効になっているインスタンスのリードレプリカを作成するには、gcloud CLI または API を使用します。このレプリカは、プライマリ インスタンスと同じリージョンまたは別のリージョン(クロスリージョン リードレプリカ)に作成できます。
接続タイプが異なるインスタンスから、リードレプリカを使用して複製することはできません。たとえば、Private Service Connect が有効になっているインスタンスは、別の Private Service Connect インスタンスからのみ複製できます。また、外部 IP 接続をサポートするインスタンスや、プライベート サービス アクセスを使用するように構成されたインスタンスからは複製できません。
gcloud
インスタンスのリードレプリカを作成するには、gcloud sql instances create コマンドを使用します。
gcloud sql instances create REPLICA_INSTANCE_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip
次のように置き換えます。
- REPLICA_INSTANCE_NAME: レプリカ インスタンスの名前。
- PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。
- REGION_NAME: レプリカ インスタンスのリージョン名。
ALLOWED_PROJECTS: 許可されているプロジェクト ID または番号のリスト(カンマ区切り)。このリストに含まれていないプロジェクトについては、そのプロジェクトを使用してインスタンスを作成して Private Service Connect を有効にすることはできません。
Cloud SQL では、プライマリ インスタンスで許可されているプロジェクトはレプリカにコピーされません。レプリカごとに Private Service Connect エンドポイントを作成する必要があります。Cloud SQL Auth Proxy または Cloud SQL 言語コネクタを使用している場合は、レプリカの DNS ゾーンと DNS レコードを作成する必要があります。
- AVAILABILITY_TYPE: インスタンスの高可用性を有効にします。このパラメータには、次のいずれかの値を指定します。
REGIONAL: 高可用性を有効にします。本番環境インスタンスに推奨されます。インスタンスは、選択したリージョン内の別のゾーンにフェイルオーバーします。ZONAL: フェイルオーバー機能を提供しません。これがデフォルト値です。
インスタンスの高可用性の設定と削除の詳細については、既存のインスタンスを高可用性向けに構成するとインスタンスの高可用性を無効にするをご覧ください。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。
- REPLICA_INSTANCE_NAME: レプリカ インスタンスの名前。
- REGION_NAME: レプリカ インスタンスのリージョン名。
- MACHINE_TYPE: インスタンスのマシンタイプ。
- AVAILABILITY_TYPE: インスタンスの高可用性を有効にします。このパラメータには、次のいずれかの値を指定します。
REGIONAL: 高可用性を有効にします。本番環境インスタンスに推奨されます。インスタンスは、選択したリージョン内の別のゾーンにフェイルオーバーします。ZONAL: フェイルオーバー機能を提供しません。これがデフォルト値です。
インスタンスの高可用性の設定と削除の詳細については、既存のインスタンスを高可用性向けに構成するとインスタンスの高可用性を無効にするをご覧ください。
ALLOWED_PROJECTS: 許可されているプロジェクト ID または番号のリスト(カンマ区切り)。このリストに含まれていないプロジェクトについては、そのプロジェクトを使用してインスタンスを作成して Private Service Connect を有効にすることはできません。
Cloud SQL では、プライマリ インスタンスで許可されているプロジェクトはレプリカにコピーされません。レプリカごとに Private Service Connect エンドポイントを作成する必要があります。Cloud SQL Auth Proxy または Cloud SQL 言語コネクタを使用している場合は、レプリカの DNS ゾーンと DNS レコードを作成する必要があります。
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
リクエストの本文(JSON):
{
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT_ID",
"databaseVersion": "SQLSERVER_2019_STANDARD",
"name": "REPLICA_INSTANCE_NAME",
"region": "REGION_NAME",
"kind": "sql#instance",
"settings":
{
"tier": "MACHINE_TYPE",
"availabilityType": "AVAILABILITY_TYPE",
"settingsVersion": 0,
"ipConfiguration": {
"ipv4Enabled": false,
"pscConfig": {
"allowedConsumerProjects": [ALLOWED_PROJECTS],
"pscEnabled": true
}
},
"kind": "sql#settings",
"pricingPlan": "PER_USE",
"replicationType": "ASYNCHRONOUS",
"tier": "MACHINE_TYPE"
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "CREATE_REPLICA",
"name": "OPERATION_ID",
"targetId": "REPLICA_INSTANCE_NAME",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。
- REPLICA_INSTANCE_NAME: レプリカ インスタンスの名前。
- REGION_NAME: レプリカ インスタンスのリージョン名。
- MACHINE_TYPE: インスタンスのマシンタイプ。
- AVAILABILITY_TYPE: インスタンスの高可用性を有効にします。このパラメータには、次のいずれかの値を指定します。
REGIONAL: 高可用性を有効にします。本番環境インスタンスに推奨されます。インスタンスは、選択したリージョン内の別のゾーンにフェイルオーバーします。ZONAL: フェイルオーバー機能を提供しません。これがデフォルト値です。
インスタンスの高可用性の設定と削除の詳細については、既存のインスタンスを高可用性向けに構成するとインスタンスの高可用性を無効にするをご覧ください。
ALLOWED_PROJECTS: 許可されているプロジェクト ID または番号のリスト(カンマ区切り)。このリストに含まれていないプロジェクトについては、そのプロジェクトを使用してインスタンスを作成して Private Service Connect を有効にすることはできません。
Cloud SQL では、プライマリ インスタンスで許可されているプロジェクトはレプリカにコピーされません。レプリカごとに Private Service Connect エンドポイントを作成する必要があります。Cloud SQL Auth Proxy または Cloud SQL 言語コネクタを使用している場合は、レプリカの DNS ゾーンと DNS レコードを作成する必要があります。
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances
リクエストの本文(JSON):
{
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT_ID",
"databaseVersion": "SQLSERVER_2019_STANDARD",
"name": "REPLICA_INSTANCE_NAME",
"region": "REGION_NAME",
"kind": "sql#instance",
"settings":
{
"tier": "MACHINE_TYPE",
"availabilityType": "AVAILABILITY_TYPE",
"settingsVersion": 0,
"ipConfiguration": {
"ipv4Enabled": false,
"pscConfig": {
"allowedConsumerProjects": [ALLOWED_PROJECTS],
"pscEnabled": true
}
},
"kind": "sql#settings",
"pricingPlan": "PER_USE",
"replicationType": "ASYNCHRONOUS",
"tier": "MACHINE_TYPE"
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "CREATE_REPLICA",
"name": "OPERATION_ID",
"targetId": "REPLICA_INSTANCE_NAME",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
カスケード レプリカを作成する
このセクションでは、カスケード レプリカの作成と管理の方法について説明します。
カスケード レプリカの仕組みについては、レプリカのカスケードをご覧ください。
始める前に
プライマリ インスタンスにはカスケード可能なレプリカが必要です。次のセクションでは、カスケード可能なレプリカを作成する手順について説明します。
カスケード可能なレプリカの作成手順
カスケード可能なレプリカを作成する場合は、プライマリ インスタンスとは異なるリージョンにレプリカを作成する必要があります。カスケード可能なレプリカを構成するには、cascadable-replica フラグを設定します。
gcloud
--master-instance-name フラグと --cascadable-replica フラグを使用してプライマリ インスタンスを指定し、新しいレプリカを作成します。
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --cascadable-replica \ --region=REGION
次のように置き換えます。
- REPLICA_NAME: 作成するレプリカの一意の ID。
- PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
- REGION: 新しいレプリカを作成するリージョン。このリージョンは、プライマリ インスタンスのリージョンと別にする必要があります。
レプリカは、プライマリ インスタンスと同じ VPC ネットワーク内に作成する必要があります。その VPC ネットワークで割り振られた IP 範囲の名前を指定することもできます。範囲が指定されていない場合、レプリカはランダムな範囲で作成されます。
他のインスタンス設定のパラメータを追加することもできます。次に例を示します。
--tierパラメータを使用して、別のマシン階層サイズを指定できます。- プライマリ インスタンスにプライベート IP アドレスしかない場合は、
--no-assign-ipパラメータをコマンドに追加します。
インスタンス設定のパラメータの追加の詳細については、gcloud sql instances create をご覧ください。
カスケード可能なレプリカを作成した後、カスケード レプリカを作成できます。
curl
- プライマリ インスタンスの下にカスケード可能なレプリカを作成するには、次の JSON コードサンプルを編集して
request.jsonというファイルに保存します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID。
- DATABASE_VERSION: データベース バージョンの列挙型文字列。たとえば、
SQLSERVER_2017_ENTERPRISE.のようにします。 - PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
- PRIMARY_INSTANCE_REGION: プライマリ インスタンスのリージョン。
- REPLICA_REGION: レプリカ インスタンスのリージョン。
- REPLICA_NAME: レプリカ インスタンスの名前。
- MACHINE_TYPE: マシンタイプの列挙型文字列。例:
db-custom-2-3840
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "DATABASE_VERSION" "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", "settingsVersion": 0, } "replicaConfiguration": { "cascadableReplica": true } }
replicaConfigurationセクションで、cascadadableReplicaフィールドがtrueに設定されていることを確認します。- 次のコマンドを実行します。
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
カスケード可能なレプリカを作成した後、カスケード レプリカを作成できます。
Terraform
カスケード可能なレプリカを作成するには、Terraform リソースを使用します。
次のサンプルでは、高度な障害復旧(DR)の一部としてスイッチオーバー オペレーションを実行するときに DR レプリカとして割り当てることができるプライマリ インスタンスとカスケード可能なレプリカを作成します。
カスケード レプリカの作成手順
カスケード レプリカを作成する場合は、カスケード可能なレプリカと同じリージョンにレプリカを作成する必要があります。カスケード レプリカを構成するには、–master-instance-name パラメータにカスケード可能なレプリカの名前を指定します。コンソール
-
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
- 作成するレプリカの親として機能するレプリカ用の [レプリカ] タブをクリックします。
- [レプリカを作成する] をクリックします。
- [リードレプリカを作成する] ページで、インスタンス ID とその他の構成オプション(名前、リージョン、ゾーンなど)を更新します。
- [作成] をクリックします。
Cloud SQL がレプリカを作成します。親レプリカのインスタンス ページに戻ります。
- 作成する新しいカスケード レプリカごとに手順 4~6 を行います。
gcloud
--master-instance-nameフラグでカスケード可能なレプリカ インスタンスを指定して、新しいレプリカを作成します。- REPLICA_NAME: 作成するレプリカの一意の ID
- CASCADABLE_REPLICA_NAME: カスケード可能なレプリカの名前
- カスケード レプリカの作成後に、プライマリ インスタンスに対して変更を行うと、その変更内容がカスケード レプリカ チェーン内のすべてのレプリカに複製されます。
gcloud sql instances create REPLICA_NAME \ --master-instance-name=CASCADABLE_REPLICA_NAME \
curl
- カスケード可能なレプリカの下にカスケード レプリカを作成するには、次の JSON コードサンプルを編集して
request.jsonというファイルに保存します。{ "masterInstanceName": "CASCADABLE_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 次のコマンドを実行します。
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
トラブルシューティング
| 問題 | トラブルシューティング |
|---|---|
| 作成時にリードレプリカがレプリケーションを開始しなかった。 | ログファイルに、より具体的なエラーが記録されている可能性があります。Cloud Logging のログを調べて、実際のエラーを確認します。 |
| リードレプリカを作成できない - invalidFlagValue エラー。 | リクエスト内のフラグのいずれかが無効です。これは、明示的に指定されたフラグか、デフォルト値に設定されたフラグである可能性があります。 まず、
|
| リードレプリカを作成できない - 不明なエラー。 | ログファイルに、より具体的なエラーが記録されている可能性があります。Cloud Logging のログを調べて、実際のエラーを確認します。 エラーが |
| ディスクに空きがない。 | レプリカの作成中にプライマリ インスタンスのディスクの空きがなくなる可能性があります。プライマリ インスタンスを編集して、より大きなディスクサイズにアップグレードします。 |
| レプリカ インスタンスのメモリ使用量が多すぎる。 | レプリカは一時メモリを使用して頻繁にリクエストされる読み取りオペレーションをキャッシュに保存するため、プライマリ インスタンスより多くのメモリを使用する可能性があります。 レプリカ インスタンスを再起動して、一時メモリ領域を再利用します。 |
| レプリケーションが停止した。 | ストレージの上限に達しており、ストレージの自動増量が有効になっていません。 インスタンスを編集して |
| レプリケーション ラグが常に大きい。 | 書き込みの負荷が大きすぎてレプリカで処理できません。レプリケーション ラグは、レプリカの SQL スレッドで IO スレッドに対応できない場合に発生します。クエリやワークロードによっては、特定のスキーマで一時的または永続的に高いレプリケーション ラグが発生することがあります。レプリケーション ラグの一般的な原因は次のとおりです。
考えられる解決策は次のとおりです。
|
| レプリカの作成がタイムアウトで失敗する。 | プライマリ インスタンスで長時間 commit されていないトランザクションが実行されると、リードレプリカの作成に失敗することがあります。 実行中のクエリをすべて停止してからレプリカを再作成します。 |
次のステップ
- レプリカの管理について学習します。
- クロスリージョン レプリカについて学習する。
- 高度な障害復旧(DR)について学習する