レプリケーションとは、Cloud SQL インスタンスのコピーを作成して、そのコピーに作業をオフロードする機能です。
はじめに
レプリケーションを使用する主な理由は、パフォーマンスを低下させることなく、データベース内のデータ使用をスケーリングすることです。
レプリケーションは、リージョン間でデータを移行するために行うこともあります。
また、元のインスタンスが破損している場合に、レプリカをスタンドアロン インスタンスに昇格することもできます(この場合、既存のレプリカはそのインスタンスをプライマリと見なされません)。
Cloud SQL インスタンスを参照する場合、複製されるインスタンスは「プライマリ インスタンス」と呼ばれ、コピーは「リードレプリカ」と呼ばれます。プライマリ インスタンスとリードレプリカはすべて Cloud SQL にあります。
最初のレプリカが作成されると、次のようになります。
- プライマリ インスタンスは、プライマリ インスタンス上にあるすべてのデータベースの完全な復旧モデルに設定されます。
一時ディスクが作成され、完全バックアップが一時ディスクに保存されます。レプリカの作成プロセスが完了すると、一時ディスクは削除されます。
最初のレプリカの作成中にユーザーが単純な復旧モデルに切り替えると、レプリカの作成に失敗します。
レプリカの作成後にプライマリ インスタンスに追加されたデータベースは次のようになります。
- データベースは可用性グループに自動的に追加され、自動シーディングを使用してレプリカに設定されます。
- レプリカが作成されるたびに、プライマリ インスタンス上にあるデータベースの完全なバックアップ(完全復旧モデル)が作成されます。レプリカの作成より後に作成されたログイン情報とサーバー オブジェクトは複製されません。
Cloud SQL は、次の種類のレプリカをサポートします。
Cloud SQL は、2 台の外部サーバー間のレプリケーションをサポートしていません。
リードレプリカ
リードレプリカを使用して Cloud SQL インスタンスから作業をオフロードします。リードレプリカとは、プライマリ インスタンスの正確なコピーです。プライマリ インスタンスのデータやその他の変更は、リードレプリカでほぼリアルタイムで更新されます。
リードレプリカは読み取り専用です。書き込みはできません。リードレプリカは、クエリ、読み取りリクエスト、アナリティクス トラフィックを処理し、プライマリ インスタンスの負荷を低減します。プライマリ インスタンスごとに最大 8 個のリードレプリカを作成できます。
レプリカの接続名と IP アドレスを使用して、レプリカに直接接続します。プライベート IP アドレスを使用してレプリカに接続している場合は、接続がプライマリ インスタンスから継承されるため、レプリカに追加の VPC プライベート接続を作成する必要はありません。
リードレプリカの作成方法の詳細については、リードレプリカの作成をご覧ください。リードレプリカの管理については、リードレプリカの管理をご覧ください。
プライマリ インスタンスで HA を使用する場合は、プライマリ インスタンスとは異なるゾーンにリードレプリカを配置することをおすすめします。これにより、プライマリ インスタンスが配置されたゾーンで障害が発生しても、リードレプリカのオペレーションを継続できます。詳細については、高可用性の概要をご覧ください。
適切なマシンタイプを選択する
リードレプリカのマシンタイプは、プライマリ マシンタイプと異なる場合があります。CPU とメモリの使用状況など、インスタンスの指標をモニタリングして、レプリカ インスタンスがワークロードに適したサイズになるようにしてください(特にプライマリ インスタンスよりも小さい場合)。レプリカ インスタンスのサイズが小さすぎると、メモリ不足(OOM)が頻繁に発生するなど、パフォーマンスが低下しやすくなります。
クロスリージョン リードレプリカ
クロスリージョン レプリケーションでは、プライマリ インスタンスとは異なるリージョンにリードレプリカを作成できます。クロスリージョン リードレプリカは、リージョン内のレプリカを作成するで説明した方法で作成します。
SQL Server リードレプリカの場合、レプリカがプライマリ レプリカと同じ仮想ネットワーク内にあるか、パブリック IP 経由で通信することを前提としています。クロスリージョン レプリカ:
- レプリカをアプリケーションのリージョンのより近くで利用できるようにすることで、読み取りパフォーマンスを向上させます。
- リージョンの障害から保護するために、追加の障害復旧機能を提供します。
- リージョン間でデータを移行できます。
クロスリージョン レプリカの詳細については、リージョン移行または障害復旧のためにレプリカを昇格させるをご覧ください。
リードレプリカのカスケード
カスケード レプリケーションでは、同じリージョンまたは別のリージョンの別のリードレプリカの下にリードレプリカを作成できます。カスケード レプリカは、分散可用性グループを使用して実装されます。カスケード レプリカのユースケースには、次のようなものがあります。
- 障害復旧: リードレプリカのカスケード階層を使用して、プライマリ インスタンスとそのリードレプリカのトポロジをシミュレートできます。停止している間も、選択したリードレプリカがプライマリに昇格し、新しいプライマリのリードレプリカのレプリケーションが継続して、使用可能な状態になります。新しいプライマリが使用可能になると、古いプライマリは新しいプライマリのセカンダリになります。復旧後、スイッチオーバーを使用して古いプライマリに戻すことができます。障害復旧にカスケード レプリカを使用する方法については、障害復旧についてをご覧ください。
- パフォーマンスの改善: レプリケーション作業を複数のリードレプリカにオフロードすることで、プライマリ インスタンスの負担を軽減します。
- 読み取りのスケーリング: レプリカを増やして読み取りの負荷を軽減できます。
- コスト削減: 他のリージョンでクロスリージョン レプリケーションを含む単一のカスケード レプリカを使用すると、ネットワーク費用を削減できます。
用語
- カスケード可能なレプリカ: Cloud SQL for SQL Server を使用した高度な障害復旧(DR)のスイッチオーバーとレプリカ フェイルオーバー オペレーションに使用できるクロスリージョン リードレプリカ。
- カスケード レプリカ: 独自のレプリカを持つリードレプリカ。
- レベル: カスケード レプリカの階層内に、レプリカのレベルを作成できます。たとえば、インスタンスに 4 つのレプリカを追加すると、これらのレプリカは同じレベルになります。
- 兄弟インスタンス: 同じプライマリ インスタンスから複製された複数のレプリカ。兄弟要素は、レプリカ階層の同じレベルにあります。1 つのレプリカには最大 8 個の兄弟要素を設定できます。
- リーフレプリカ: 独自のレプリカがないリードレプリカ。 マルチレベルのレプリケーション階層で最後のレベルにあるのがリーフレプリカです。
- プロモート: 階層の任意レベルのレプリカをプライマリ インスタンスに変換するアクション。プロモートするときに、レプリカのカスケード レプリカ階層は保持されます。
カスケード レプリカを構成する
カスケード レプリカを使用すると、既存のレプリカにリードレプリカを追加できます。プライマリ インスタンスを含む、最大 4 レベルまでのレプリカを追加できます。レプリカをカスケード レプリカ階層の最上位に昇格させると、そのレプリカがプライマリ インスタンスになり、カスケード レプリカのレプリケーションが継続します。
分散可用性グループの構成の詳細については、Always On 分散可用性グループを構成するをご覧ください。
制限事項
- 下位にレプリカがあるレプリカは削除できません。レプリカを削除するには、リーフレプリカから始めて、階層の上を順に進む必要があります。
- リージョンの循環依存はサポートされていません。カスケード レプリカのレプリカをプライマリ インスタンスと同じリージョンに配置する場合は、カスケード レプリカも同じリージョンに配置する必要があります。
- カスケード可能なレプリカは、プライマリ インスタンスのリージョンとは異なるリージョンに作成する必要があります。その後、カスケード可能なレプリカと同じリージョンにカスケード レプリカを作成できます。
レプリケーションのユースケース
次のユースケースは、レプリケーションのタイプごとに適用されます。
名前 | プライマリ | レプリカ | 利点と使用例 | 詳細 |
---|---|---|---|---|
リードレプリカ | Cloud SQL インスタンス | Cloud SQL インスタンス |
|
|
クロスリージョン リードレプリカ | Cloud SQL インスタンス | Cloud SQL インスタンス |
|
|
SQL Server のレプリケーション | Cloud SQL の外部のインスタンス | Cloud SQL for SQL Server インスタンス |
|
課金
- リードレプリカは、標準 Cloud SQL インスタンスと同じレートで課金されます。データ レプリケーションには課金されません。
- クロスリージョン リードレプリカの料金は、リージョン内で新しい Cloud SQL インスタンスを作成する場合と同じです。Cloud SQL インスタンスの料金を参照して、適切なリージョンを選択します。インスタンスに関連する通常のコストに加えて、クロスリージョン レプリカでは、プライマリ インスタンスからレプリカ インスタンスに送信されるレプリケーション ログに対してリージョン間のデータ転送料金が発生します。詳しくは、ネットワーク下り(外向き)の料金をご覧ください。
Cloud SQL リードレプリカのクイック リファレンス
トピック | ディスカッション |
---|---|
バックアップ | レプリカのバックアップは構成できません。 |
コア数とメモリ | リードレプリカでは、プライマリ インスタンスとは異なる数のコアやメモリ量を使用できます。 |
プライマリ インスタンスの削除 | プライマリ インスタンスを削除するには、まずすべてのリードレプリカをスタンドアロン インスタンスに昇格するか、リードレプリカを削除する必要があります。 |
レプリカの削除 | レプリカを削除しても、プライマリ インスタンスのステータスには影響しません。 |
複製されたデータベースの削除 | Google Cloud コンソールまたは gcloud コマンドを使用して、複製された SQL Server データベースを削除できます。削除はレプリカに自動的に伝播されます。T-SQL コマンドを使用して、複製された SQL Server データベースを削除することはできません。 |
フェイルオーバー | プライマリ インスタンスは、レプリカが DR レプリカの場合にのみレプリカにフェイルオーバーできます。リードレプリカは停止時にフェイルオーバーできません。 |
ロード バランシング | Cloud SQL では、レプリカ間のロード バランシングを提供しません。 |
メンテナンスの時間枠 | リードレプリカはプライマリ インスタンスとメンテナンスの時間枠を共有します。リードレプリカは、メンテナンスの時間枠、スケジュール変更、メンテナンス拒否期間などのプライマリ インスタンスのメンテナンス設定に従います。メンテナンス中、Cloud SQL はすべてのリードレプリカを更新してから、プライマリ インスタンスを更新します。 |
複数のリードレプリカ | 1 つのプライマリ インスタンスに対して最大で 8 個のリードレプリカを作成できます。 |
プライベート IP | プライベート IP アドレスを使用してレプリカに接続している場合は、プライマリ インスタンスから継承されるため、レプリカに追加の VPC プライベート接続を作成する必要はありません。 |
プライマリ インスタンスの復元 | レプリカのプライマリ インスタンスは、そのレプリカが存在する場合は復元できません。インスタンスをバックアップから復元する前や、インスタンスでポイントインタイム リカバリを実行する前に、すべてのレプリカを昇格または削除する必要があります。 |
設定 | インスタンスにアクセスできるユーザーに関するデータの変更を含め、プライマリ インスタンスの設定はレプリカに伝播されます。 |
レプリカの停止 | レプリカの stop は実行できません。restart または delete は可能ですが、プライマリ インスタンスで行うように停止することはできません。 |
レプリカのアップグレード | リードレプリカでは、中断を伴うアップグレードが時間に関係なく行われる可能性があります。 |
ユーザー テーブル | レプリカに変更を加えることはできません。すべてのユーザー変更は、プライマリ インスタンスで行う必要があります。 |
制限事項
この機能が適用されるのは、Cloud SQL for SQL Server の次のバージョンのみです。
- SQL Server 2017 Enterprise
- SQL Server 2019 Enterprise
- SQL Server 2022 Enterprise
ログイン情報はレプリカに伝播されません。
T-SQL や SQL Server Management Studio を使用してレプリカをモニタリングする必要があります。
データベースを削除する前に、データベース接続を閉じる必要があります。
レプリカを作成する場合、プライマリ インスタンスにシングルユーザー モードのデータベースを含めることはできません。そうでないと、レプリカの作成は失敗します。
次のステップ
- リードレプリカの作成方法を学習する。
- インスタンスの高可用性を構成する方法を確認する。