シングルライター・マルチリーダーアーキテクチャにおける書き込みパフォーマンスボトルネックを解消するため、PolarDB for MySQL では マルチマスタークラスター (Limitless) を導入しました。この機能は複数のプライマリノードを使用し、アーキテクチャをマルチライター・マルチリーダーに対応させます。このソリューションは、マルチテナント型ソフトウェアとしてのサービス(SaaS)、オンラインゲーム、E コマースなど、高い同時実行性が求められる読み書きワークロードを持つアプリケーション向けに設計されています。
次の図は マルチマスタークラスター (Limitless) Edition のアーキテクチャを示しています。
クラスターのエンドポイント経由でアクセスすると、PolarProxy が SQL ステートメントを自動的に適切なプライマリノードにルーティングします。
主なメリット
-
秒単位での書き込みスケールアウト
最大 63 個のコンピュートノード上のデータベースへの同時書き込みがサポートされます。データベースのノードに対して秒単位で動的なフェールオーバーを実現し、クラスター全体の同時読み書き能力を向上させます。
-
マルチマスターバックアップ(読み取り専用ノード不要)。
プライマリノードが障害を起こした場合、秒単位でトラフィックの少ない別のプライマリノードへフェールオーバーできます。ホットスタンバイ用に追加のアイドルリソースをデプロイしないため、コストを半減できます。
利用シーン
マルチマスタークラスター (Limitless) Edition は、SaaS のマルチテナンシー、ゲーム、E コマースなどのシーンに適しています。これらのシーンでは、高い同時実行性を持つ読み書きリクエストが特徴です。
-
SaaS におけるマルチテナンシー:高同時実行性とテナント間の負荷分散
シーン:テナントのデータベース数が急激に変化し、負荷量も大きく変動します。ユーザーは異なるインスタンス間でデータベースリソースをスケジュールし、最適なエクスペリエンスを提供する必要があります。
ソリューション:マルチマスタークラスター (Limitless) Edition を使用することで、テナントのデータベースを異なるプライマリノード間に秒単位で切り替えたり、新しいプライマリノードを追加してバーストトラフィックを処理したりできます。これにより負荷分散を実現します。
-
グローバルゲームサーバーおよび E コマースシーン:ビジネスリクエストの急増に対応する分単位のスケーリング
シーン:ミドルウェアまたはビジネスロジックに基づくデータベースおよびテーブルシャーディングソリューションがよく使用されます。バージョンアップや大規模プロモーション時にはクラスター容量の急激なスケールアウトが必要となり、終了後には迅速なスケールインが求められます。しかし、従来のクラスターのスケーリングにはデータ移行を伴う複雑な手順が必要です。
ソリューション:マルチマスタークラスター (Limitless) Edition の秒単位スケールアウトおよび透明なルーティング機能をミドルウェアまたはビジネスロジックに基づくデータベースおよびテーブルシャーディングソリューションと組み合わせることで、スケールアウトプロセスを数日から数分に短縮できます。
-
複数サーバーにデプロイされたゲームアプリケーション:より優れたパフォーマンスとスケーラビリティ
シーン:ゲームの成長期にはデータベース負荷が重く、継続的に増加します。この期間中、データベース数も増え続け、結果としてプライマリノードの負荷も増大します。一方、衰退期にはデータベース負荷が大幅に減少し、データベースがマージされるため、プライマリノードの負荷も低下します。
ソリューション:成長期には一部のデータベースを新しいプライマリノードに切り替えて負荷分散を実現できます。衰退期にはデータベースを少数のプライマリノードに集約し、運用コストを削減できます。
制限事項
データベースエンジン は MySQL 8.0 である必要があります。
Cluster edition クラスターを直接 マルチマスタークラスター (Limitless) クラスターに変換することはできません。クラスターのプロダクトエディションをアップグレードするには、「メジャーバージョンアップグレード」をご参照ください。
パフォーマンス向上
テストの結果、クラスター内のデータベースをより多くのプライマリノードに切り替えることで、クラスター全体の同時読み書き能力が線形に向上することが確認されました。次のコードスニペットはストレステストの例を示しています。
-
テストバックグラウンド:クラスターには 8 個のデータベースと 8 個のプライマリノードが含まれています。
-
テストプロシージャ:テスト開始時、8 個のデータベースは 1 個のプライマリノードを共有しています。全データベースに同時に同じデータを同期し、同一のストレステストを実行します。ストレステスト中に、8 個のデータベースをそれぞれ 2 個、4 個、8 個のプライマリノードにスケジュールし、クラスター全体のパフォーマンス変化傾向を観測します。
-
次の図は QPS の変化傾向を示しています。

上記の図から、データベースをより多くのプライマリノードにスケジュールするにつれて、クラスター全体の同時読み書き能力が著しく向上し、線形に増加していることがわかります。
ノードスペックと課金
スペック:専有 および 汎用 スペックの両方がサポートされています。詳細については、「Enterprise Edition のコンピュートノードスペック」をご参照ください。
課金:詳細については、「課金対象項目」および「コンピュートノードの課金ルール」をご参照ください。
クイックスタート
クラスターの基本設定を構成します。たとえば、「データベースアカウントの作成」、「クラスターホワイトリストの設定」、「データベースへの接続」などが可能です。
「データベースの作成」を行います。
マルチマスタークラスター (Limitless) では、任意の単一データベースまたはデータオブジェクトに対する書き込みは、必ず 1 つのノードを経由する必要があります。データベース作成時に、プライマリノードを指定するか、
loose_innodb_mm_default_master_idパラメーターを 0 に設定して、システムがランダムにプライマリノードを選択するようにできます。SELECT文を使用してデータをクエリします。データをクエリする際、プライマリノードを指定する必要はありません。PolarProxy が自動的にクエリを適切なプライマリノードにルーティングします。
詳細については、「注意事項」をご参照ください。