このページでは、インスタンスの高可用性構成について説明します。
インスタンスの高可用性は、インスタンスを作成するときに構成することも、既存のインスタンスで有効にすることもできます。
高可用性の詳細については、高可用性の構成の概要をご覧ください。
高可用性構成の新しいインスタンスを作成する
インスタンスを作成し、高可用性向けに構成すると、Cloud SQL はこれをリージョン インスタンスとして作成します。
高可用性向けに構成されたインスタンスを作成するには:
コンソール
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - [インスタンスを作成] を選択します。
 - データベース エンジンを選択します。
 - [リージョンとゾーンの可用性の選択] セクションで、[複数のゾーン(高可用性)] を選択します。
 - [ゾーンを指定] を開きます。
 - プライマリ ゾーンとセカンダリ ゾーンを選択します。インスタンスの作成中または編集中にセカンダリ ゾーンが使用される場合は、次の条件が適用されます。
- ゾーンのデフォルトは、プライマリ ゾーンは 
Any、セカンダリ ゾーンはAny (different from primary)です。 
プライマリ ゾーンとセカンダリ ゾーンの両方を指定する場合は、別々のゾーンにする必要があります。
 - ゾーンのデフォルトは、プライマリ ゾーンは 
 - [保存] をクリックします。
インスタンスの更新中に、プライマリ インスタンスのインスタンス ページに戻ります。
 
gcloud
- リージョン インスタンスを作成します。
gcloud sql instances create REGIONAL_INSTANCE_NAME \ --availability-type=REGIONAL \ --database-version=SQLSERVER_2017_STANDARD \ --cpu=NUMBER_CPUS \ --memory=MEMORY_SIZE
 - root ユーザーを構成します。
gcloud sql users set-password root no-host \ --instance=REGIONAL_INSTANCE_NAME \ --password=PASSWORD
 
Terraform
高可用性を持つインスタンスを作成するには、Terraform リソースを使用します。
変更を適用する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
 - 
    
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
 
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
- 
    Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は 
.tfにする必要があります(例:main.tf)。このチュートリアルでは、このファイルをmain.tfとします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
 - 
    
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tfにサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
 - 環境に適用するサンプル パラメータを確認し、変更します。
 - 変更を保存します。
 - 
    Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgradeオプションを使用します。terraform init -upgrade
 
変更を適用する
- 
    構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
 - 
    次のコマンドを実行します。プロンプトで「
yes」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
 - Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
 
変更を削除する
変更を削除するには、次の手順を行います。
- 削除の保護を無効にするには、Terraform 構成ファイルで 
deletion_protection引数をfalseに設定します。deletion_protection = "false"
 - 次のコマンドを実行します。プロンプトで「
yes」と入力して、更新された Terraform 構成を適用します。terraform apply
 
- 
             
次のコマンドを実行します。プロンプトで「
yes」と入力して、以前に Terraform 構成で適用されたリソースを削除します。terraform destroy
 
REST v1
リクエストのパラメータの完全な一覧については、instances:insert ページをご覧ください。リージョン インスタンスを作成します。
- 
    
    
    
    
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-name: インスタンス名
 - database-version: データベース バージョンの列挙型文字列
 - region: GCP リージョン
 - machine-type: マシンタイプ
 
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances
リクエストの本文(JSON):
{ "name": "instance-name", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "backupConfiguration": { "enabled": true }, "availabilityType": "REGIONAL" } }リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
 - インスタンスの初期化が完了したら、インスタンスの root パスワードを更新します。
    
    
    
    
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-id: インスタンス ID
 - password: 新しい root ユーザーのパスワード
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=%25&name=sqlserver'
リクエストの本文(JSON):
{ "name": "sqlserver", "host": "nohost", "password": "password"}リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
 
REST v1beta4
リクエストのパラメータの完全な一覧については、instances:insert ページをご覧ください。リージョン インスタンスを作成します。
- 
    
    
    
    
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-name: インスタンス名
 - database-version: データベース バージョンの列挙型文字列
 - region: GCP リージョン
 - machine-type: マシンタイプ
 
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances
リクエストの本文(JSON):
{ "name": "instance-name", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "backupConfiguration": { "enabled": true }, "availabilityType": "REGIONAL" } }リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
 - インスタンスの初期化が完了したら、インスタンスの root パスワードを更新します。
    
    
    
    
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-id: インスタンス ID
 - password: 新しい root ユーザーのパスワード
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=sqlserver'
リクエストの本文(JSON):
{ "name": "sqlserver", "host": "nohost", "password": "password"}リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
 
インスタンスの作成に関する詳細は、インスタンスを作成するをご覧ください。
高可用性向けに既存のインスタンスを構成する
高可用性の Cloud SQL インスタンスを構成するには、 Google Cloud コンソール、gcloud CLI、または API を使用します。
コンソール
高可用性向けにインスタンスを構成するには:
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
 - [編集] をクリックします。
 - [自動バックアップと高可用性] 構成オプションのセクションで、[高可用性(リージョン)] を選択します。[自動バックアップ] を有効にすることもおすすめします。
 - [保存] をクリックします。
 
gcloud
インスタンスをリージョンの高可用性インスタンスとして構成するには、gcloud sql instances patch コマンドを使用します。
gcloud sql instances patch INSTANCE_NAME \ --availability-type REGIONAL
INSTANCE_NAME は、高可用性を構成する Cloud SQL インスタンスの名前に置き換えます。
REST v1
インスタンスをリージョンの高可用性インスタンスとして構成するには:
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性構成を行うインスタンスの名前
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{
  "settings": {"availabilityType": "REGIONAL" }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
REST v1beta4
インスタンスをリージョンの高可用性インスタンスとして構成するには:
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性構成を行うインスタンスの名前
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{
  "settings": {"availabilityType": "REGIONAL" }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
フェイルオーバーを開始する
フェイルオーバーのテストはオプションですが、フェイルオーバーの発生時にアプリケーションがどのように応答するかを確認するため、テストすることをおすすめします。
フェイルオーバーの詳細については、フェイルオーバーの概要を参照してください。
コンソール
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
 - [フェイルオーバー] をクリックします。
 - [フェイルオーバーの手動トリガー] ダイアログ ボックスで、テキスト フィールドにインスタンスの ID を入力し、[フェイルオーバーをトリガー] をクリックします。
 
gcloud
フェイルオーバーを開始します。
gcloud sql instances failover PRIMARY_INSTANCE_NAME
REST v1
settingsVersionフィールドの値を取得するには、プライマリ インスタンスを記述します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性構成を行うインスタンスの名前
 
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }- フェイルオーバーを開始します。
  
  
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-name: インスタンス名
 - settings-version: instanceInfo の settingsVersion
 
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-name/failover
リクエストの本文(JSON):
{ "failoverContext": { "settingsVersion":"settings-version" } }リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
 
REST v1beta4
settingsVersionフィールドの値を取得するには、プライマリ インスタンスを記述します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性構成を行うインスタンスの名前
 
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD" }- フェイルオーバーを開始します。
  
  
  
  
  
    
    
  
  
  
    
  
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-name: インスタンス名
 - settings-version: instanceInfo の settingsVersion
 
HTTP メソッドと URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-name/failover
リクエストの本文(JSON):
{ "failoverContext": { "settingsVersion":"settings-version" } }リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
 
インスタンスはフェイルオーバーし、数分間データを提供できなくなります。
インスタンスの高可用性構成を確認する
インスタンスの高可用性を確認し、実行中のゾーンを表示するには:
コンソール
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
 - [構成] セクションに、次の高可用性設定が表示されていることを確認します。
 - 高可用性(リージョナル)
 - [現在の場所] には、インスタンスの現在のプライマリ ゾーンが表示されます。
 
gcloud
gcloud sql instances describe INSTANCE_NAME
  出力には、availabilityType が REGIONAL であることが示されます。gceZone フィールドと secondaryGceZone フィールドに、インスタンスの現在のプライマリ ゾーンとセカンダリ ゾーンが表示されます。
REST v1
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-id: インスタンス ID
 
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "SQLSERVER_2019_STANDARD"
}
  出力には、availabilityType が REGIONAL であることが示されます。gceZone フィールドと secondaryGceZone フィールドに、インスタンスの現在のプライマリ ゾーンとセカンダリ ゾーンが表示されます。
REST v1beta4
リクエストのデータを使用する前に、次のように置き換えます。
- project-id: プロジェクト ID
 - instance-id: インスタンス ID
 
HTTP メソッドと URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "SQLSERVER_2017_STANDARD",
}
  出力には、availabilityType が REGIONAL であることが示されます。gceZone フィールドと secondaryGceZone フィールドに、インスタンスの現在のプライマリ ゾーンとセカンダリ ゾーンが表示されます。
高可用性インスタンスのゾーンを変更する
既存の高可用性インスタンスのゾーンのいずれかまたは両方を変更すると、インスタンスの再構成中に数分間のダウンタイムが発生します。高可用性インスタンスが実行されている現在のプライマリ ゾーンとセカンダリ ゾーンを確認するには、インスタンスの高可用性構成を確認するをご覧ください。
高可用性インスタンスのゾーンを変更するには:
コンソール
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
 - [編集] をクリックします。
 - [リージョンとゾーンの可用性の選択] セクションで、[ゾーンを指定] を展開し、新しいゾーンを選択します。ゾーンのデフォルトは、プライマリ ゾーンは 
Any、セカンダリ ゾーンはAny (different from primary)です。次の制限が適用されます。- プライマリ ゾーンのみ、またはプライマリ ゾーンとセカンダリ ゾーンの両方を指定できます。
 - プライマリ ゾーンとセカンダリ ゾーンの両方を指定する場合は、別々のゾーンにする必要があります。
 
 - [保存] をクリックします。
インスタンスの更新中に、プライマリ インスタンスのインスタンス ページに戻ります。
 
gcloud
インスタンスが実行されているゾーンを変更します。
gcloud sql instances patch INSTANCE_NAME \ --zone=PRIMARY_ZONE --secondary-zone=SECONDARY_ZONE
--secondary-zone パラメータは省略可能です。省略すると、Cloud SQL はプライマリ ゾーンとは別の使用可能なゾーンを選択します。
次の制限が適用されます。
- ゾーンは、Cloud SQL インスタンスと同じリージョンに属する有効なゾーンである必要があります。
 - セカンダリ ゾーンを指定する場合は、プライマリ ゾーンとは異なるものにする必要があります。
 
REST v1
リージョン インスタンスのゾーンを変更します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
 - INSTANCE_NAME: インスタンス名
 - PRIMARY_ZONE: プライマリ ゾーン
 - SECONDARY_ZONE: セカンダリ ゾーン
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{ "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}} }リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
secondaryZoneパラメータは省略可能です。省略すると、Cloud SQL はプライマリ ゾーンとは別の使用可能なゾーンを選択します。次の制限が適用されます。
- ゾーンは有効なゾーンである必要があります。
 - 選択するゾーンは、Cloud SQL インスタンスと同じリージョンに属している必要があります。
 
REST v1beta4
リージョン インスタンスのゾーンを変更します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: プロジェクト ID
 - INSTANCE_NAME: インスタンス名
 - PRIMARY_ZONE: プライマリ ゾーン
 - SECONDARY_ZONE: セカンダリ ゾーン
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{ "settings": {"locationPreference": {"zone": "PRIMARY_ZONE", "secondaryZone": "SECONDARY_ZONE"}} }リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
secondaryZoneパラメータは省略可能です。省略すると、Cloud SQL はプライマリ ゾーンとは別の使用可能なゾーンを選択します。次の制限が適用されます。
- ゾーンは有効なゾーンである必要があります。
 - 選択するゾーンは、Cloud SQL インスタンスと同じリージョンに属している必要があります。
 
インスタンスの高可用性を無効にする
Cloud SQL インスタンスの高可用性を無効にするには、 Google Cloud コンソール、gcloud CLI、または API を使用します。
インスタンスの高可用性を無効にすると、ゾーン停止が発生した場合にインスタンスを手動で復元する必要があります。詳細については、スタンドアロン インスタンスの復元オプションをご覧ください。
コンソール
インスタンスの高可用性を無効にするには:
- 
Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。
 - インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
 - [編集] をクリックします。
 - 自動バックアップを開きます。
 - [可用性] セクションで、[シングルゾーン] をクリックします。
 - [保存] をクリックします。この編集を行うには、インスタンスを再起動する必要があります。
 - ダイアログが表示されたら、[保存して再起動] をクリックします。
 
gcloud
インスタンスの高可用性を無効にするには、gcloud sql instances patch コマンドを使用します。
gcloud sql instances patch INSTANCE_NAME \ --availability-type ZONAL
INSTANCE_NAME は、高可用性を無効にする Cloud SQL インスタンスの名前に置き換えます。
REST v1
インスタンスの可用性タイプを ZONAL に変更するには、instances:patch メソッドを使用します。このメソッドは、インスタンスの高可用性を無効にします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性を無効にするインスタンスの名前
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{
  "settings": {"availabilityType": "ZONAL" }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
REST v1beta4
インスタンスの可用性タイプを ZONAL に変更するには、instances:patch メソッドを使用します。このメソッドは、インスタンスの高可用性を無効にします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
 - INSTANCE_NAME: 高可用性を無効にするインスタンスの名前
 
HTTP メソッドと URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
リクエストの本文(JSON):
{
  "settings": {"availabilityType": "ZONAL" }
}
リクエストを送信するには、次のいずれかのオプションを展開します。
成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。
トラブルシューティング
| 問題 | トラブルシューティング | 
|---|---|
| 手動フェイルオーバーの指標が表示されない。 | 自動フェイルオーバーの指標のみが表示されます。 | 
| Cloud SQL インスタンス リソース(CPU と RAM)の使用率が 100% に近いため、高可用性インスタンスが停止する。 | インスタンスのマシンサイズが負荷に対して小さすぎます。 インスタンスを編集してより大きなマシンサイズにアップグレードし、CPU とメモリのサイズを大きくします。  | 
  
次のステップ
- 高可用性設定の動作について学習します。
 - インスタンスを再開することにより、接続が失われた場合のアプリケーションの対応をテストします。
 - データベース接続を管理するについて学習する。
 - Google Cloud Observability について学習する。