Cloud SQL のレプリケーション

レプリケーションとは、Cloud SQL インスタンスまたはオンプレミス データベースのコピーを作成して、作業をそのコピーにオフロードする機能です。

はじめに

レプリケーションを使用する主な理由は、パフォーマンスを低下させることなく、データベース内のデータ使用をスケーリングすることです。その他、次の理由があります。

  • リージョン間でのデータ移行
  • プラットフォーム間でのデータ移行
  • オンプレミス データベースから Cloud SQL へのデータ移行

また、元のインスタンスが破損した場合にレプリカを昇格させることもできます。

Cloud SQL インスタンスを参照する場合、複製されるインスタンスは「プライマリ インスタンス」と呼ばれ、コピーは「リードレプリカ」と呼ばれます。プライマリ インスタンスとリードレプリカはすべて Cloud SQL にあります。

オンプレミス データベースを指している場合、レプリケーション シナリオは「外部サーバーからのレプリケーション」と呼ばれます。このシナリオでは、複製されるデータベースは、ソース データベース サーバーです。Cloud SQL にあるコピーは Cloud SQL レプリカと呼ばれます。また、Cloud SQL のソース データベース サーバーを表すインスタンスもあります。このインスタンスをソース表現インスタンスといいます。

Database Migration Service を使用して、ソース データベース サーバーから Cloud SQL に継続的にレプリケーションすることもできます。

Cloud SQL は、次の種類のレプリカをサポートします。

Cloud SQL では、2 台の外部サーバー間のレプリケーションはサポートされていません。

リードレプリカ

リードレプリカを使用して Cloud SQL インスタンスから作業をオフロードします。リードレプリカとは、プライマリ インスタンスの正確なコピーです。プライマリ インスタンスのデータやその他の変更は、リードレプリカでほぼリアルタイムで更新されます。

リードレプリカは読み取り専用です。書き込みはできません。リードレプリカは、クエリ、読み取りリクエスト、アナリティクス トラフィックを処理し、プライマリ インスタンスの負荷を低減します。プライマリ インスタンスごとに最大 10 個のリードレプリカを作成できます。

レプリカの接続名と IP アドレスを使用して、レプリカに直接接続します。プライベート IP アドレスを使用してレプリカに接続している場合は、プライマリ インスタンスから継承されるため、レプリカに追加の VPC プライベート接続を作成する必要はありません。

リードレプリカの作成方法の詳細については、リードレプリカの作成をご覧ください。リードレプリカの管理については、リードレプリカの管理をご覧ください。

プライマリ インスタンスで HA を使用する場合は、プライマリ インスタンスとは異なるゾーンにリードレプリカを配置することをおすすめします。これにより、プライマリ インスタンスが配置されたゾーンで障害が発生しても、リードレプリカのオペレーションを継続できます。詳細については、高可用性の概要をご覧ください。

リージョン間リードレプリカ

クロスリージョン レプリケーションでは、プライマリ インスタンスとは異なるリージョンにリードレプリカを作成できます。クロスリージョン リードレプリカは、リージョン内のレプリカを作成するで説明した方法で作成します。

クロスリージョン レプリカ:

  • レプリカをアプリケーションのリージョンのより近くで利用できるようにすることで、読み取りパフォーマンスを向上させます。
  • リージョンの障害から保護するために、追加の障害復旧機能を提供します。
  • 最小限のダウンタイムで、あるリージョンから別のリージョンにデータを移行できます。

クロスリージョン レプリカの詳細については、リージョン移行または障害復旧のためにレプリカを昇格させるをご覧ください。

外部リードレプリカ

外部リードレプリカは、Cloud SQL プライマリ インスタンスを複製する外部 MySQL インスタンスです。たとえば、Compute Engine で実行される MySQL インスタンスは外部インスタンスとみなされます。

外部リードレプリカには次の制限があります。

  • 他のクラウド プラットフォームでホストされる MySQL インスタンスに複製できないことがあります。他のプロバイダのドキュメントを確認してください。たとえば、構成フィールド replicate-ignore-db の設定は必須であり、許可されていないクラウド プロバイダはサポートされていません。その他の必要な構成フィールドについては、外部レプリカの構成をご覧ください。
  • ネットワークまたはサーバーの停止などによって複製が数時間中断された場合、レプリカはプライマリよりも古い状態のものになります。プライマリに再接続され、複製が再開されると、レプリカは最新状態になります。ただし、中断時間が Cloud SQL の複製ログの保存期間(7 つのバックアップ)よりも長かった場合は、レプリカを削除して新しく作成する必要があります。
  • プライマリから外部レプリカに流れるデータは外向き(下り)ネットワークとして課金されます。ご使用の Cloud SQL インスタンス タイプの外向き(下り)ネットワークの料金については、料金ページをご覧ください。

レプリケーションのユースケース

次のユースケースは、レプリケーションのタイプごとに適用されます。

名前 プライマリ レプリカ 利点と使用例 詳細
リードレプリカ Cloud SQL インスタンス Cloud SQL インスタンス
  • 追加の読み取り容量
  • アナリティクスのターゲット
クロスリージョン リードレプリカ Cloud SQL インスタンス Cloud SQL インスタンス
  • 追加の読み取り容量
  • アナリティクスのターゲット
  • 追加の障害復旧機能
  • 読み取りパフォーマンスを向上させる
  • リージョン間でデータを移行する
外部リードレプリカ Cloud SQL インスタンス Cloud SQL に対する外部 MySQL インスタンス
  • 外部接続のレイテンシの削減
  • アナリティクスのターゲット
  • 他のプラットフォームへの移行パス
外部サーバーからのレプリケーション Cloud SQL に対する外部 MySQL インスタンス Cloud SQL for MySQL インスタンス
  • Cloud SQL への移行パス
  • Google Cloud Platform へのデータ レプリケーション
  • アナリティクスのターゲット

リードレプリカを作成するための前提要件

プライマリ Cloud SQL インスタンスのリードレプリカを作成するには、インスタンスが次の要件を満たしている必要があります。

  • 自動バックアップが有効になっていること。
  • バイナリ ロギングが有効になっていること。これには、ポイントインタイム リカバリが有効になっている必要があります。このログの影響についてはこちらをご確認ください
  • バイナリ ロギングを有効にした後に、少なくとも 1 つのバックアップが作成されていること。

外部レプリカの追加要件:

  • レプリカの MySQL バージョンがプライマリ インスタンスの MySQL バージョン以降であること。詳細については、こちらをご覧ください。
  • セキュリティ上、プライマリ インスタンスで SSL / TLS を構成すること。詳細については、こちらをご覧ください。

バイナリ ロギングを有効にした場合の影響

リードレプリカをサポートするには、ポイントインタイム リカバリを有効にして、プライマリ インスタンスのバイナリ ロギングを有効にする必要があります。その結果、次の影響があります。

  • パフォーマンスのオーバーヘッド

    Cloud SQL は、MySQL フラグ sync_binlog=1innodb_support_xa=true による行ベースのレプリケーションを使用します。そのため、書き込みオペレーションのたびにディスクの fsync が余分に必要となり、パフォーマンスが低下します。

  • ストレージのオーバーヘッド

    バイナリログのストレージは、通常のデータと同じレートで課金されます。バイナリログは、最も古い自動バックアップの日付で自動的に切り捨てられます。現在、Cloud SQL は最新の 7 つの自動バックアップとすべてのオンデマンド バックアップを保持します。課金対象となるバイナリログのサイズはワークロードによって異なるため、請求される料金も異なります。たとえば、書き込み中心のワークロードでは、読み取り中心のワークロードよりも多くのバイナリログ容量を消費します。

    バイナリログのサイズは、SHOW BINARY LOGS MySQL コマンドを使用して確認できます。

    バックアップを作成すると、データと一緒にログがバックアップに保存されます。

  • インスタンスの再起動

    バイナリログを有効または無効にすると、インスタンスが再起動されます。既存のデータベース接続が失われ、再確立する必要があります。

リードレプリカのバイナリ ロギング

  • バイナリ ロギングはリードレプリカ インスタンスでサポートされています(MySQL 5.7 および 8.0 のみ)。レプリカのバイナリ ロギングを有効にするには、プライマリのインスタンス名ではなくレプリカのインスタンス名を指定して、プライマリと同じ API コマンドを使用します。

    sync_binlog フラグを使用して、レプリカ(プライマリではなく)のインスタンスのバイナリ ロギングの耐久性を設定できます。これにより、MySQL サーバーがバイナリログをディスクに同期する頻度を制御できます。

    プライマリのバックアップが無効になっている場合でも、レプリカでバイナリ ロギングを有効にできます。

    この値を持つレプリカがスタンドアロン サーバーに昇格されている場合、設定はスタンドアロン サーバーで安全な値 1 にリセットされます。

課金

  • リードレプリカは、標準 Cloud SQL インスタンスと同じレートで課金されます。データ レプリケーションには課金されません。
  • レプリカはそのプライマリとの接続を常時維持しているため、プライマリ インスタンスは停止されません。このシナリオでは、プライマリ インスタンスの課金が増加する可能性があります。詳細については、こちらをご覧ください。
  • 外部レプリカの場合、プライマリから外部レプリカに流れるデータは外向き(下り)ネットワークとして課金されます。ご使用の Cloud SQL インスタンス タイプの外向き(下り)ネットワークの料金については、料金ページをご覧ください。
  • Cloud SQL インスタンスに関連する通常のコストに加えて、クロスリージョン レプリカでは、プライマリからレプリカに送信されるレプリケーション ログに対してクロスリージョン ネットワークの下り(外向き)の料金が発生します。詳しくは、ネットワーク下り(外向き)の料金をご覧ください。
  • クロスリージョン リードレプリカの料金は、リージョン内で新しいインスタンスを作成する場合と同じです。Cloud SQL インスタンスの料金を参照して、適切なリージョンを選択します。

Cloud SQL リードレプリカのクイック リファレンス

トピック ディスカッション
高可用性 リードレプリカは高可用性を備えたものではなく、それを提供するものでもありません。
フェイルオーバー プライマリ インスタンスはリードレプリカにフェイルオーバーできず、またリードレプリカは停止時にフェイルオーバーできません。
メンテナンスの時間枠 メンテナンスの時間枠はリードレプリカに設定できないため、プライマリ インスタンスとも共有されません。リードレプリカではメンテナンスをいつでも行えます。リードレプリカのメンテナンスは、プライマリ インスタンスと異なる時間に行われます。
中断を伴うアップグレード リードレプリカでは、中断を伴うアップグレードが時間に関係なく行われる可能性があります。
パフォーマンス リードレプリカを作成しても、プライマリ インスタンスのパフォーマンスや可用性に影響はありません。
複数のリードレプリカ 1 つのプライマリ インスタンスに対して最大で 10 個のリードレプリカを作成できます。
負荷分散 Cloud SQL では、レプリカ間の負荷分散を行いません。接続プールを使用し、レプリカ間でクエリを分散します。
設定 root パスワード、ユーザー テーブルの変更などのプライマリ インスタンスの MySQL 設定は、レプリカに伝播されます。CPU とメモリの変更はレプリカに伝播されません。
並列レプリケーション 並列レプリケーションを使用したパフォーマンスの向上については、並列レプリケーションの構成をご覧ください。
コアとメモリ リードレプリカは、プライマリ インスタンスとは異なるコア数とメモリ容量を使用できます。
ユーザー テーブル レプリカのユーザー テーブルに変更を加えることはできません。すべてのユーザー変更は、プライマリ インスタンスで行う必要があります。
バックアップ レプリカのバックアップは構成できません。
プライマリ インスタンスの復元 レプリカのプライマリは、そのレプリカが存在する場合は復元できません。インスタンスをバックアップから復元する前や、インスタンスでポイントインタイム リカバリを実行する前に、すべてのレプリカを昇格または削除する必要があります。
プライマリ インスタンスの削除 プライマリ インスタンスを削除する前に、すべてのリードレプリカをスタンドアロン インスタンスに昇格するか、リードレプリカを削除する必要があります。
バイナリ ロギングの無効化 プライマリ インスタンスのバイナリログを無効にするには、その前にすべてのリードレプリカを昇格または削除する必要があります。
レプリカの複製 レプリカのレプリカは作成できません。
レプリカの停止 レプリカの stop は実行できません。restartdeletedisable replication は可能ですが、プライマリ インスタンスで行うように停止することはできません。
プライベート IP プライベート IP アドレスを使用してレプリカに接続している場合は、プライマリ インスタンスから継承されるため、レプリカに追加の VPC プライベート接続を作成する必要はありません。

次のステップ