高可用性を有効または無効にする

このページでは、インスタンスの高可用性構成について説明します。

インスタンスの高可用性は、インスタンスを作成するときに構成することも、既存のインスタンスで有効にすることもできます。

高可用性の詳細については、高可用性の構成の概要をご覧ください。

高可用性向けに構成された新しいインスタンスを作成する

インスタンスを作成し、高可用性向けに構成すると、Cloud SQL はこれをリージョン インスタンスとして作成します。

高可用性向けに構成されたインスタンスを作成するには:

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [インスタンスを作成] を選択します。
  3. データベース エンジンを選択します。
  4. [リージョンとゾーンの可用性の選択] セクションで、[複数のゾーン(高可用性)] を選択します。
  5. [ゾーンを指定] を開きます。
  6. プライマリ ゾーンとセカンダリ ゾーンを選択します。インスタンスの作成中または編集中にセカンダリ ゾーンが使用される場合は、次の条件が適用されます。
    • ゾーンのデフォルトは、プライマリ ゾーンは Any、セカンダリ ゾーンは Any (different from primary) です。
    • プライマリ ゾーンとセカンダリ ゾーンの両方を指定する場合は、別々のゾーンにする必要があります。

  7. [保存] をクリックします。

    インスタンスの更新中に、プライマリ インスタンスのインスタンス ページに戻ります。

gcloud

  1. リージョン インスタンスを作成します。
    gcloud sql instances create REGIONAL_INSTANCE_NAME \
    --availability-type=REGIONAL \
    --database-version=SQLSERVER_2017_STANDARD \
    --cpu=NUMBER_CPUS \
    --memory=MEMORY_SIZE
  2. root ユーザーを構成します。
    gcloud sql users set-password root no-host \
    --instance=REGIONAL_INSTANCE_NAME \
    --password=PASSWORD
使用可能なパラメータすべてが記載されたリストは、gcloud sql instances create のリファレンス ページをご覧ください。

Terraform

高可用性を持つインスタンスを作成するには、Terraform リソースを使用します。

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance-ha"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled    = true
      start_time = "20:55"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

変更を適用する

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
    terraform init

    必要に応じて、最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

変更を削除する

変更を削除するには、次の手順を行います。

  1. 削除の保護を無効にするには、Terraform 構成ファイルで deletion_protection 引数を false に設定します。
    deletion_protection =  "false"
  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、更新された Terraform 構成を適用します。
    terraform apply
  1. 以前に Terraform 構成で適用されたリソースを削除するには、次のコマンドを実行して、プロンプトに「yes」と入力します。

    terraform destroy

REST v1

リクエストのパラメータの完全な一覧については、instances:insert ページをご覧ください。

リージョン インスタンスを作成します。

  1. リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  2. インスタンスの初期化が完了したら、インスタンスの 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 ページをご覧ください。

リージョン インスタンスを作成します。

  1. リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

  2. インスタンスの初期化が完了したら、インスタンスの 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 を使用します。

コンソール

高可用性向けにインスタンスを構成するには:

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. [自動バックアップと高可用性] 構成オプションのセクションで、[高可用性(リージョン)] を選択します。[自動バックアップ] を有効にすることもおすすめします。
  5. [保存] をクリックします。

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)と空のレスポンスが返されます。

フェイルオーバーを開始する

フェイルオーバーのテストはオプションですが、フェイルオーバーの発生時にアプリケーションがどのように応答するかを確認するため、テストすることをおすすめします。

フェイルオーバーの詳細については、フェイルオーバーの概要を参照してください。

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [フェイルオーバー] をクリックします。
  4. [フェイルオーバーの手動トリガー] ダイアログ ボックスで、テキスト フィールドにインスタンスの ID を入力し、[フェイルオーバーをトリガー] をクリックします。

gcloud

フェイルオーバーを開始します。

gcloud sql instances failover PRIMARY_INSTANCE_NAME

REST v1

  1. 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"
    }
    
  2. フェイルオーバーを開始します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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

  1. 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"
    }
    
  2. フェイルオーバーを開始します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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 レスポンスが返されます。

インスタンスはフェイルオーバーし、数分間データを提供できなくなります。

インスタンスの高可用性構成を確認する

インスタンスの高可用性を確認し、実行中のゾーンを表示するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] セクションに、次の高可用性設定が表示されていることを確認します。
    • 高可用性(リージョナル)
    • [現在の場所] には、インスタンスの現在のプライマリ ゾーンが表示されます。

gcloud

gcloud sql instances describe INSTANCE_NAME

出力には、availabilityTypeREGIONAL であることが示されます。 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"
}

出力には、availabilityTypeREGIONAL であることが示されます。 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",
}

出力には、availabilityTypeREGIONAL であることが示されます。 gceZone フィールドと secondaryGceZone フィールドに、インスタンスの現在のプライマリ ゾーンとセカンダリ ゾーンが表示されます。

高可用性インスタンスのゾーンを変更する

既存の高可用性インスタンスのゾーンのいずれかまたは両方を変更すると、インスタンスの再構成中に数分間のダウンタイムが発生します。高可用性インスタンスが実行されている現在のプライマリ ゾーンとセカンダリ ゾーンを確認するには、インスタンスの高可用性構成を確認するをご覧ください。

高可用性インスタンスのゾーンを変更するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. [リージョンとゾーンの可用性の選択] セクションで、[ゾーンを指定] を展開し、新しいゾーンを選択します。ゾーンのデフォルトは、プライマリ ゾーンは Any、セカンダリ ゾーンは Any (different from primary) です。次の制限が適用されます。
    • プライマリ ゾーンのみ、またはプライマリ ゾーンとセカンダリ ゾーンの両方を指定できます。
    • プライマリ ゾーンとセカンダリ ゾーンの両方を指定する場合は、別々のゾーンにする必要があります。
  5. [保存] をクリックします。

    インスタンスの更新中に、プライマリ インスタンスのインスタンス ページに戻ります。

gcloud

インスタンスが実行されているゾーンを変更します。

gcloud sql instances patch INSTANCE_NAME \
  --zone=PRIMARY_ZONE --secondary-zone=SECONDARY_ZONE

--secondary-zone パラメータは省略可能です。省略すると、Cloud SQL はプライマリ ゾーンとは別の使用可能なゾーンを選択します。

次の制限が適用されます。

  • ゾーンは、Cloud SQL インスタンスと同じリージョンに属する有効なゾーンである必要があります。
  • セカンダリ ゾーンを指定する場合は、プライマリ ゾーンとは異なるものにする必要があります。

REST v1

  1. リージョン インスタンスのゾーンを変更します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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

  1. リージョン インスタンスのゾーンを変更します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • 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 を使用します。

コンソール

インスタンスの高可用性を無効にするには:

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [編集] をクリックします。
  4. 自動バックアップを開きます。
  5. [可用性] セクションで、[シングルゾーン] をクリックします。
  6. [保存] をクリックします。この編集を行うには、インスタンスを再起動する必要があります。
  7. ダイアログが表示されたら、[保存して再起動] をクリックします。

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 とメモリのサイズを大きくします。

次のステップ