グローバルデータベースネットワーク (GDN) のベーシックエディションでは、セカンダリクラスターが書き込みリクエストをプライマリクラスターに転送します。このプロセスにより、クラスター間の物理的距離が離れている場合、書き込みレイテンシが著しく増加する可能性があります。マルチライト対応 GDN は、テーブル単位のマルチライトソリューションを提供し、各サブクラスターが自身に書き込み権限を持つテーブルに対してローカルに書き込みを行えるようにします。この設計により、読み取りおよび書き込みの両方で近接アクセスが可能となり、クロスリージョンの書き込みレイテンシを効果的に低減します。
PolarDB のマルチライト対応 GDN は現在パブリックプレビュー中です。この機能をご利用になるには、DingTalk グループにご参加のうえ、アクセス権をご申請ください。
DingTalk グループ番号:30245017864
仕組み
マルチライト対応 GDN は PolarDB の物理レプリケーション技術を活用し、クロスリージョンデプロイメント向けにテーブル単位のマルチライト機能を提供します。そのコアメカニズムは以下のとおりです。
テーブル単位の書き込み権限所有:各テーブルの書き込み権限は、厳密に 1 つのサブクラスターに割り当てられます。これにより、任意の時点において、テーブルへの書き込みが可能なのは 1 つのサブクラスターのみとなります。
ローカル書き込み:各サブクラスターは、自身が書き込み権限を持つテーブルに対してローカルに書き込みを行うことができます。これにより、低レイテンシかつ高スループットでのデータ更新が実現されます。
グローバルなデータ同期:すべてのデータ変更は、高性能な物理レプリケーションリンクを通じて他のサブクラスターとリアルタイムで同期され、グローバルデータ整合性が確保されます。
完全なデータ読み取り可能:すべてのサブクラスターは、すべてのテーブルの最新データを直接読み取ることができ、クロスリージョンシナリオにおいてもローカル読み取りアクセスをサポートします。
中国 (香港)、シンガポール、ドイツ (フランクフルト) にそれぞれサブクラスターを配置した例を考えてみます。
中国 (香港) のサブクラスターにテーブル A を作成します。このテーブルの書き込み権限はデフォルトで中国 (香港) のサブクラスターに帰属します。
シンガポールのサブクラスターにテーブル B を作成します。このテーブルの書き込み権限はシンガポールのサブクラスターに帰属します。
ドイツ (フランクフルト) のサブクラスターにテーブル C を作成します。このテーブルの書き込み権限はドイツ (フランクフルト) のサブクラスターに帰属します。
中国 (香港) のサブクラスターにおけるテーブル A に対するすべての書き込み操作は、ローカルデータに直接適用されます。同時に、このサブクラスターは物理レプリケーションを通じて、シンガポールおよびドイツ (フランクフルト) のサブクラスターからテーブル B およびテーブル C のデータ変更をリアルタイムで受信します。そのため、中国 (香港) のサブクラスターは、ローカルでの効率的な書き込み(テーブル A)だけでなく、すべてのテーブル(テーブル A、B、C)の最新データを直接読み取ることも可能です。シンガポールおよびドイツ (フランクフルト) のサブクラスターについても同様の原則が適用されます。
前提条件
ご利用の PolarDB クラスターは MySQL 8.0.2 を実行している必要があります。
マルチライト対応 GDN の作成
アクセス権の申請:PolarDB のマルチライト対応 GDN は現在パブリックプレビュー中です。この機能をご利用になるには、DingTalk グループにご参加のうえ、アクセス権をご申請ください。DingTalk グループ番号:30245017864
グローバルデータベースネットワークの作成と管理:前提条件を満たすクラスターを選択し、グローバルデータベースネットワーク (GDN) のプライマリクラスターとして設定します。
重要マルチライト対応 GDN を作成すると、プライマリクラスターが 1 回再起動します。
セカンダリクラスターの追加と管理:PolarDB 購入ページにアクセスし、GDN にセカンダリクラスターを追加します。
グローバルデータベースネットワークへの接続:GDN 内では、各サブクラスター(プライマリおよびセカンダリクラスター)が独立したクラスターエンドポイントを提供します。アプリケーションのリージョンに基づき、最も近いクラスターエンドポイントに接続できます。さらに、GDN はグローバルドメイン名も提供しており、近接アクセスを実現するだけでなく、プライマリクラスターのスイッチオーバー後も変更されません。
ビジネス要件に基づき、特定のリージョンのサブクラスターに必要なテーブルを作成します。これにより、各サブクラスターが自身に書き込み権限を持つテーブルに対してローカルに書き込みを行い、読み取りおよび書き込みの近接アクセスを実現し、クロスリージョンの書き込みレイテンシを効果的に低減できます。
テーブルの書き込み権限の管理
サブクラスター上にテーブルを作成すると、そのサブクラスターがデフォルトで当該テーブルの書き込み権限を保持します。各テーブルの書き込み権限は、常に 1 つのサブクラスターのみが保持し、他のすべてのサブクラスターはデフォルトで読み取り専用アクセスとなります。
書き込み権限の譲渡
以下の DDL 文を使用して、サブクラスター間でテーブルの書き込み権限を動的に譲渡できます。
文 | 説明 |
| 現在のサブクラスターからテーブルの書き込み権限を解放します。実行後、当該テーブルは現在のサブクラスター上で読み取り専用になります。 |
| 現在のサブクラスター上でテーブルの書き込み権限を取得します。この文を実行する前に、元のクラスターから書き込み権限を解放しておく必要があります。 |
書き込み権限の所有状況の確認
SHOW CREATE TABLE 文の出力を確認することで、現在のサブクラスターがテーブルの書き込み権限を保持しているかどうかを判断できます。
出力に
/* GDN_REMOTE */タグが含まれている場合、当該テーブルの書き込み権限は別のサブクラスターに帰属しており、現在のサブクラスターは読み取り専用アクセスのみ可能です。出力に
/* GDN_REMOTE */タグが含まれていない場合、現在のサブクラスターが当該テーブルの書き込み権限を保持しています。
例
以下の例では、中国 (香港) のサブクラスターで作成されたテーブル t_A の書き込み権限をシンガポールのサブクラスターに譲渡する方法を示します。
中国 (香港) のサブクラスターにテーブルを作成し、書き込み権限の所有状況を確認します。
-- 中国 (香港) のサブクラスターにテーブルを作成します。 CREATE TABLE t_A (id INT PRIMARY KEY); -- テーブルスキーマを確認します。出力に GDN_REMOTE タグが含まれていないため、書き込み権限が現在のサブクラスターに帰属していることを示しています。 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8中国 (香港) のサブクラスターでテーブルの書き込み権限を解放します。
ALTER TABLE t_A GDN_RELEASE; -- 再度確認します。出力に GDN_REMOTE タグが含まれているため、書き込み権限が解放されたことを示しています。 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) /* GDN_REMOTE */ ENGINE=InnoDB DEFAULT CHARSET=utf8シンガポールのサブクラスターでテーブルの書き込み権限を取得します。
ALTER TABLE t_A GDN_FETCH; -- テーブルスキーマを確認します。出力に GDN_REMOTE タグが含まれていないため、書き込み権限が現在のサブクラスターに譲渡されたことを示しています。 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8ドイツ (フランクフルト) のサブクラスターでテーブルを確認し、引き続き読み取り専用であることを検証します。
-- 出力に GDN_REMOTE タグが含まれているため、現在のサブクラスターが書き込み権限を保持していないことを示しています。 SHOW CREATE TABLE t_A\G Create Table: CREATE TABLE `t_A` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) /* GDN_REMOTE */ ENGINE=InnoDB DEFAULT CHARSET=utf8