このページでは、高可用性のための MySQL インスタンスのレガシー構成について説明します。
レガシー HA 構成では、Cloud SQL for MySQL インスタンスでフェイルオーバー レプリカを使用することによって、そのインスタンスに高可用性を追加します。この機能は Google Cloud コンソールにはありません。新しい構成ではフェイルオーバー レプリカは使用されません。代わりに、Google のリージョン永続ディスクを使用して、リージョン内の 2 つのゾーン間でブロックレベルでデータを同期的に複製します。
現在の高可用性構成の詳細については、高可用性構成の概要をご覧ください。
レガシーから現在の高可用性構成にインスタンスを更新する
インスタンスをレガシーから新しい高可用性構成に更新する手順は次のとおりです。
- 更新する MySQL インスタンスのフェイルオーバー レプリカを削除します。インスタンスでの高可用性の無効化をご覧ください。
- 現行バージョンの高可用性を使用するようにインスタンスを構成します。既存のインスタンスの高可用性向け構成をご覧ください。
レガシー構成: 高可用性向けに構成された新しいインスタンスを作成する
インスタンスを作成するときに、高可用性を実現するように構成できます。このように構成すると、Cloud SQL によってプライマリが作成されるときにフェイルオーバー レプリカも作成されます。このレガシー機能は、Google Cloud コンソールにはありません。代わりに、gcloud CLI または cURL のコマンドを使用します。
高可用性向けに構成されたインスタンスを作成するには:
gcloud
- プライマリ インスタンスとそのフェイルオーバー レプリカを作成します。
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 のリファレンス ページをご覧ください。
- プライマリ インスタンスの root ユーザーを構成します。
gcloud sql users set-password root --host=% \ --instance PRIMARY_INSTANCE_NAME \ --password PASSWORD
フェイルオーバー レプリカは、プライマリ インスタンスと同じ CPU とメモリを使用して作成されます。フェイルオーバー レプリカの CPU とメモリは後で変更できますが、少なくともプライマリ インスタンスと同じ大きさにする必要があります。
curl
- プライマリ インスタンスとそのフェイルオーバー レプリカを作成します。
リクエストのパラメータの完全な一覧については、instances:insert ページをご覧ください。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
- プライマリ インスタンスの初期化が完了したら、プライマリ インスタンスの 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
- プライマリ インスタンスのステータスを確認します。
gcloud sql instances describe PRIMARY_INSTANCE_NAME
databaseReplicationEnabled
プロパティがtrue
の場合、インスタンスはレプリカです。レプリカのフェイルオーバー レプリカは作成できません。 backupConfiguration
のenabled
プロパティがfalse
の場合、このステップでプライマリ インスタンスのバックアップを有効にします。gcloud sql instances patch PRIMARY_INSTANCE_NAME \ --backup-start-time HH:MM
backup-start-time
パラメータは、UTC±00 タイムゾーンの 24 時間で指定され、4 時間のバックアップ期間の開始を指定します。バックアップはバックアップ時間枠の任意の時刻に開始できます。binaryLogEnabled
プロパティがfalse
の場合、バイナリログを有効にします。gcloud sql instances patch PRIMARY_INSTANCE_NAME \ --enable-bin-log
バイナリ ロギングを有効にすると、インスタンスが再起動されます。
- レプリカを作成します。
gcloud sql instances create FAILOVER_REPLICA_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --replica-type=FAILOVER
curl
- プライマリ インスタンスのステータスを確認します。
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 }
enabled
またはbinaryLogEnabled
のいずれかがfalse
の場合、インスタンス リソースのpatch
メソッドを使用して、両方を有効にします。そのまま保持するバックアップ構成のプロパティと変更するプロパティを指定します。バックアップを有効にするには、
enabled
をtrue
に設定し、startTime
をバックアップ ウィンドウの開始値に設定します。 バイナリ ロギングを有効にするには、binaryLogEnabled
をtrue
に設定します。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/
-
インスタンス リソースの
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
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
- フェイルオーバーを開始します。
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 コンソールにある Cloud Monitoring を使用すると、レプリケーション ラグがしきい値を超えたときにアラートを受け取ることができます。
レプリケーション ラグの詳細については、MySQL ドキュメントの SHOW SLAVE STATUS 構文ページで「seconds_behind_master」を検索してください。
Cloud Monitoring の詳細については、Cloud Monitoring のドキュメントをご覧ください。
レガシー構成: 特定のフェイルオーバー レプリカのアラートを設定する
- Google Cloud コンソールのナビゲーション パネルで、[Monitoring] を選択してから、[アラート] を選択します。
- [アラート ポリシーを作成] をクリックします。
- アラートの記述名を入力します。
- [指標しきい値] を選択し、[次へ] をクリックして [ターゲット] タブを開きます。
- [リソースの種類] には、[Cloud SQL] を選択します。
- [適用対象] には、[単一] を選択してフェイルオーバー レプリカを選択します。
- [次へ] をクリックして [設定] タブを開きます。
次の値を入力します。
フィールド 値 指標 Seconds Behind Master 条件 above しきい値 120(または、環境に適切な任意の値) 継続時間 3 分 通知方法を選択し、[条件を保存] をクリックします。
レガシー構成: フェイルオーバー レプリカのグループにアラートを設定する
同じプロジェクトに複数のフェイルオーバー レプリカを作成する場合、個々のフェイルオーバー レプリカにアラートを設定するより、グループ全体にアラートを設定する方が簡単です。モニタリング対象のグループを作成するには、フェイルオーバー レプリカの名前に "-failover" などの接尾辞を使用します。この接尾辞を他の種類の Cloud SQL インスタンスに使用していないことを確認してください。
フェイルオーバー レプリカ グループを作成するには:
-
Google Cloud コンソールで [Monitoring] ページに移動します。
- 上部のメニューバーから [グループ] > [作成...] を選択します。
- グループの記述名を入力します。
- [名前] と [含む] を選択したままにして、名前の従属文字列を入力します。
- [グループを保存] をクリックします。新しいグループの概要ページが開きます。
- 目的のインスタンスがグループに含まれていることを確認します。
フェイルオーバー レプリカ グループのアラートを作成するには:
- Google Cloud コンソールのナビゲーション パネルで、[Monitoring] を選択してから、[アラート] を選択します。
- [アラート ポリシーを作成] をクリックします。
- グループ アラートの記述名を入力します。
- [指標しきい値] を選択し、[次へ] をクリックして [ターゲット] タブを開きます。
- [リソースの種類] には、[Cloud SQL] を選択します。
- [適用対象] には、[グループ] を選択してフェイルオーバー グループを選択します。
- [違反者] を選択したままにして、[次へ] をクリックして [構成] タブを開きます。
次の値を入力します。
フィールド 値 指標 Seconds Behind Master 条件 above しきい値 120(または、環境に適切な任意の値) 継続時間 3 minutes 適切な通知方法を選択し、[条件を保存] をクリックします。
レガシー構成: インスタンスで高可用性を無効にする
プライマリ インスタンスで高可用性を無効にするには、フェイルオーバー レプリカ インスタンスを削除する必要があります。
この手順を実行する前に、プライマリ インスタンスで実行中のオペレーションがないことを確認してください。
高可用性を無効にするには:
コンソール
-
Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- 高可用性を無効にするインスタンスのフェイルオーバー インスタンスを選択します。
- [インスタンスの詳細] ページで、[削除] をクリックします。
- レプリカの削除ウィンドウで、フェイルオーバー インスタンスの名前を再度入力します。
- [削除] をクリックします。元のインスタンスの構成がゾーンに変わります。
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
次のステップ
- 高可用性構成の動作について学習する。
- インスタンスを再開して、接続が失われた場合のアプリケーションの対応をテストする。
- データベース接続の管理について学習する。
- Cloud Monitoring についてさらに学習する。
- インスタンスのリードレプリカを作成する。