🐷

【GoogleCloud】Cloud SQLの高可用性

2024/08/26に公開

初めに

こんにちは。hikaruです。
今回は、Cloud SQLの高可用性について解説していきます。
Cloud SQLについての記事は、過去に2つほど出していますので興味がある方はこちらも確認いただけると嬉しいです。

Cloud SQLの高可用性(HA)

Cloud SQLはGoogleが管理するVPCネットワーク(サービスプロデューサVPC)上に、構築されますがその際にインスタンスが稼働するゾーンを選択することになります。
インスタンスが稼働するゾーンをプライマリゾーンと呼び、プライマリゾーンで稼働するインスタンスをプライマリインスタンスと呼びます。
この時、プライマリゾーンや、プライマリインスタンスで障害があった際に、ダウンタイムを削減する目的でCloud SQLを高可用性(HA)にすることができます。
高可用性(HA)にした際に追加されるインスタンスが稼働するゾーンをセカンダリゾーンと呼び、セカンダリゾーンで稼働するインスタンスをスタンバイインスタンスと呼びます。
高可用性(HA)では、各ゾーンに存在する永続ディスクへデータが同期レプリケーションされるため、トランザクションがcommitされた際にプライマリインスタンスへの書き込みが、各ゾーンへ複製されます。

HA構成のCloudSQLのアーキテクチャ
HA構成のCloudSQLのアーキテクチャ
https://cloud.google.com/sql/docs/mysql/high-availability?hl=ja

フェールオーバー

プライマリインスタンスや、プライマリゾーンに障害があった場合は、スタンバイインスタンスが新しくプライマリインスタンスに昇格し、トラフィックは新しいプライマリインスタンスへ転送されます。このことをフェールオーバーと言います。
ハートビートシステムにより、プライマリインスタンスへの正常稼働確認を1秒ごと行っており、複数のハートビートが検出されない場合、フェールオーバーが発動します。
フェールオーバーが発動しても、ユーザやアプリケーションはプライマリインスタンスと同様の静的IPアドレスを使用してセカンダリインスタンスへ接続することができます。
フェールオーバーはコンソール上から手動で実行することも可能ですし、以下のgcloudコマンドで実行することも可能です。

gcloud sql instances failover <PRIMARY_INSTANCE_NAME>

フェールオーバー時のアプリケーションの挙動確認や、障害テスト等に上記は利用できます。

クロスリージョンリードレプリカによるDR構成

Cloud SQLはリージョンサービスなので、高可用性(HA)では、ゾーンレベルの障害しか耐えることができません。リージョンレベルでの障害に耐えられるようにするためには、セカンダリリージョンでCloud SQLを利用できるようにする必要があります。Cloud SQLでは、クロスリージョンリードレプリカを構成することで、リージョンレベルでの障害に対応できるようにすることできます。
Cloud SQLのプライマリインスタンスとスタンバイインスタンス間はリージョン永続ディスクを使用しており、データが同期されますが、セカンダリリージョンにあるクロスリージョンレプリカは、プライマリインスタンスからのデータは非同期レプリケーションを使用するため、フェールオーバーが発動した際にはデータの不整合が発生する可能性があります。

最後に

今回は、Cloud SQLの高可用性について解説しました。
本番環境でCloud SQLを利用する際には、高可用性(HA)の設定はマストになると思います。
クロスリージョンリードレプリカは、かなりの高可用性が求められる場合ではない限り利用することはなさそうですが、知識として頭に入れておきたいと思います。

GitHubで編集を提案

Discussion