高可用性向けのレガシー構成

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

レガシー HA 構成では、Cloud SQL for MySQL インスタンスがフェイルオーバー レプリカを使用してインスタンスの高可用性を追加します。この機能は Google Cloud コンソールでは使用できません。新しい構成ではフェイルオーバー レプリカを使用しません。代わりに、Google のリージョン永続ディスクを使用して、リージョン内の 2 つのゾーン間でブロックレベルでデータを同期的に複製します。

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

レガシーから現在の高可用性構成にインスタンスを更新する

インスタンスをレガシーから新しい高可用性構成に更新する手順は次のとおりです。

  1. 更新する MySQL インスタンスのフェイルオーバー レプリカを削除します。インスタンスでの高可用性の無効化をご覧ください。
  2. 現行バージョンの高可用性を使用するようにインスタンスを構成します。既存のインスタンスの高可用性向け構成をご覧ください。

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

インスタンスを作成するときに、高可用性向けに構成できます。Cloud SQL は、プライマリの作成と同時にフェイルオーバー レプリカを作成します。Google Cloud コンソールでは、以前の機能は使用できません。代わりに、gcloud または cURL コマンドを使用します。

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

gcloud

  1. プライマリ インスタンスとそのフェイルオーバー レプリカを作成します。
    gcloud sql instances create PRIMARY_INSTANCE_NAME \
    --backup-start-time=BACKUP_WINDOW_START_TIME \
    --failover-replica-name=FAILOVER_REPLICA_NAME \
    --cpu=CPU \
    --database-version=DATABASE_VERSION \
    --memory=MEMORY \
    --enable-bin-log
    

    バックアップ ウィンドウの開始時間は、HH:MM の形式です。

    DATABASE_VERSION プレースホルダは、MySQL 5.6 または MySQL 5.7(--database-version=MYSQL_5_6 または --database-version=MYSQL_5_7)に置き換えてください。

    database-version パラメータにバージョンを指定しないと、デフォルトで MySQL 8.0 が選択されます。MySQL の高可用性のレガシー構成では、バージョン 8.0 はサポートされません。

    使用可能なパラメータすべてが記載されたリストは、gcloud sql instances create のリファレンス ページをご覧ください。

  2. プライマリ インスタンスの root ユーザーを構成します。
    gcloud sql users set-password root --host=% \
    --instance PRIMARY_INSTANCE_NAME \
    --password PASSWORD
    

    フェイルオーバー レプリカは、プライマリ インスタンスと同じ CPU とメモリを使用して作成されます。フェイルオーバー レプリカの CPU とメモリは後で変更できますが、少なくともプライマリ インスタンスと同じ大きさにする必要があります。

curl

  1. プライマリ インスタンスとそのフェイルオーバー レプリカを作成します。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"name":"PRIMARY_INSTANCE_NAME", "region":"REGION",
                  "settings": {
                               "tier":"MACHINE_TYPE",
                               "backupConfiguration": {"binaryLogEnabled": true, "enabled": true}},
                               "failoverReplica": {"name": "FAILOVER_REPLICA_NAME"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    
    リクエストのパラメータの完全な一覧については、instances:insert ページをご覧ください。
  2. プライマリ インスタンスの初期化が完了したら、プライマリ インスタンスの root パスワードを更新します。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"name": "root", "host": "%", "password": "ROOT_PASSWORD"}' \
         'https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/users?host=%25&name=root'
    
    この変更は自動的にレプリカに伝播されます。

レガシー構成: 既存のインスタンスを高可用性向けに構成する

既存のインスタンスを高可用性向けに構成すると、インスタンスの再構成中に数分間のダウンタイムが発生します。

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

gcloud

  1. プライマリ インスタンスのステータスを確認します。
    gcloud sql instances describe PRIMARY_INSTANCE_NAME
    

    databaseReplicationEnabled プロパティが true の場合、インスタンスはレプリカです。レプリカのフェイルオーバー レプリカは作成できません。

  2. backupConfigurationenabled プロパティが false の場合、このステップでプライマリ インスタンスのバックアップを有効にします。
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --backup-start-time HH:MM
    

    backup-start-time パラメータは、UTC±00 タイムゾーンの 24 時間で指定され、4 時間のバックアップ期間の開始を指定します。バックアップはバックアップ時間枠の任意の時刻に開始できます。

  3. binaryLogEnabled プロパティが false の場合、バイナリログを有効にします。
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --enable-bin-log
    

    バイナリ ロギングを有効にすると、インスタンスが再起動されます。

  4. レプリカを作成します。
    gcloud sql instances create FAILOVER_REPLICA_NAME \
    --master-instance-name=PRIMARY_INSTANCE_NAME \
    --replica-type=FAILOVER
    

curl

  1. プライマリ インスタンスのステータスを確認します。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/PRIMARY_INSTANCE_NAME?fields=settings
    

    出力には backupConfiguration が含まれ、たとえば次のようになります。

    "backupConfiguration": {
        "kind": "sql#backupConfiguration",
        "startTime": "12:00",
        "enabled": true,
        "binaryLogEnabled": true
    }
    
  2. enabled または binaryLogEnabled のいずれかが false の場合、インスタンス リソースの patch メソッドを使用して、両方を有効にします。そのまま保持するバックアップ構成のプロパティと変更するプロパティを指定します。

    バックアップを有効にするには、enabledtrue に設定し、startTime をバックアップ ウィンドウの開始値に設定します。 バイナリ ロギングを有効にするには、binaryLogEnabledtrue に設定します。

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"settings" : {"backupConfiguration" : {"startTime": "HH:MM", "enabled": true, "binaryLogEnabled": true}}}' \
         -X PATCH \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/PRIMARY_INSTANCE_NAME/
    
  3. インスタンス リソースの insert メソッドを使用して、フェイルオーバー レプリカを作成します。

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"name": "REPLICA_NAME", "masterInstanceName": "PRIMARY_INSTANCE_NAME",
                  "region": "PRIMARY_IMSTANCE_REGION", "databaseVersion": "PRIMARY_DATABASE_VERSION",
                  "replicaConfiguration": {"failoverTarget": true},
                  "settings": {"tier":"MACHINE_TYPE"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    MACHINE_TYPE は、プライマリ インスタンスのマシンタイプと同じか、それ以上にする必要があります。

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

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

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

gcloud

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

gcloud sql instances failover PRIMARY_INSTANCE_NAME

curl

  1. settingsVersion フィールドの値を取得するには、プライマリ インスタンスを記述します。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/PRIMARY_INSTANCE_NAME
    
  2. フェイルオーバーを開始します。
    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"failoverContext":{"settingsVersion":"SETTINGS_VERSION"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/PRIMARY_INSTANCE_NAME/failover
    

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

レガシー構成: レプリケーション ラグのアラートを作成する

フェイルオーバー オペレーションに必要な時間は、フェイルオーバー開始時のレプリケーション ラグの量に依存します。Google Cloud コンソールで Google Cloud のオペレーション スイート Monitoring を使用すると、レプリケーション ラグがしきい値を超えたときにアラートを受け取ることができます。

レプリケーション ラグの詳細については、MySQL ドキュメントの SHOW SLAVE STATUS 構文ページの "seconds_behind_master" を検索してください。

Google Cloud のオペレーション スイート Monitoring の詳細については、Google Cloud のオペレーション スイート Monitoring のドキュメントをご覧ください。

レガシー構成: 特定のフェイルオーバー レプリカのアラートを設定する

  1. 左上にある Google Cloud のオペレーション スイートのロゴをクリックして、Google Cloud のオペレーション スイート [Monitoring] ページに戻ります。
  2. [通知ポリシーの作成] をクリックします。
  3. アラートの記述名を入力します。
  4. [指標しきい値] を選択し、[次へ] をクリックして [ターゲット] タブを開きます。
  5. [リソースの種類] には、[Cloud SQL] を選択します。
  6. [適用対象] には、[単一] を選択してフェイルオーバー レプリカを選択します。
  7. [次へ] をクリックして [設定] タブを開きます。
  8. 次の値を入力します。

    フィールド
    指標 Seconds Behind Master
    条件 above
    しきい値 120(または、環境に適切な任意の値)
    継続時間 3 minutes

  9. 適切な通知方法を選択し、[条件を保存] をクリックします。

レガシー構成: フェイルオーバー レプリカのグループにアラートを設定する

同じプロジェクトに複数のフェイルオーバー レプリカを作成する場合、個々のフェイルオーバー レプリカにアラートを設定するより、グループ全体にアラートを設定する方が簡単です。モニタリング グループを作成するには、フェイルオーバー レプリカの名前に "-failover" などの接尾辞を使用します。この接尾辞を他の種類の Cloud SQL インスタンスに使用していないことを確認してください。

フェイルオーバー レプリカを作成するには:

  1. Google Cloud コンソールで [Monitoring] ページに移動します。

    [Monitoring] に移動

  2. 上部のメニューバーから [グループ] > [作成...] を選択します。
  3. グループの記述名を入力します。
  4. [名前] と [含む] を選択したままにして、名前の従属文字列を入力します。
  5. [グループを保存] をクリックします。新しいグループの概要ページが開きます。
  6. 目的のインスタンスがグループに含まれていることを確認します。

フェイルオーバー レプリカ グループのアラートを作成するには:

  1. 左上にある Google Cloud のオペレーション スイートのロゴをクリックして、Google Cloud のオペレーション スイート [Monitoring] ページに戻ります。
  2. [通知ポリシーの作成] をクリックします。
  3. グループ アラートの記述名を入力します。
  4. [指標しきい値] を選択し、[次へ] をクリックして [ターゲット] タブを開きます。
  5. [リソースの種類] には、[Cloud SQL] を選択します。
  6. [適用対象] には、[グループ] を選択してフェイルオーバー グループを選択します。
  7. [違反者] を選択したままにして、[次へ] をクリックして [設定] タブを開きます。
  8. 次の値を入力します。

    フィールド
    指標 Seconds Behind Master
    条件 above
    しきい値 120(または、環境に適切な任意の値)
    継続時間 3 minutes

  9. 適切な通知方法を選択し、[条件を保存] をクリックします。

レガシー構成: インスタンスで高可用性を無効にする

プライマリ インスタンスで高可用性を無効にするには、フェイルオーバー レプリカ インスタンスを削除する必要があります。

この手順を実行する前に、プライマリ インスタンスで実行中のオペレーションがないことを確認してください。

高可用性を無効にするには:

コンソール

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

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

  2. 高可用性を無効にするインスタンスのフェイルオーバー インスタンスを選択します。
  3. [インスタンスの詳細] ページで、[削除] をクリックします。
  4. レプリカの削除ウィンドウで、フェイルオーバー インスタンスの名前を再度入力します。
  5. [削除] をクリックします。元のインスタンスの構成がゾーンに変わります。

gcloud

参照情報については、gcloud sql instances delete をご覧ください。
gcloud sql instances delete FAILOVER_REPLICA_NAME

curl

次のリクエストでは、instances:delete メソッドを使用してインスタンスを削除します。
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json'\
      -X DELETE\
https://www.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME

次のステップ