1 つのプライマリノードと複数の読み取り専用ノードを使用する従来のアーキテクチャにおける書き込みパフォーマンスのボトルネックに対処するため、Alibaba Cloud は マルチマスタークラスタ (Limitless) エディションを PolarDB for MySQL 向けに開発しました。マルチマスタークラスタ (Limitless) エディションは、複数のプライマリノードと複数の読み取り専用ノードを使用し、書き込み負荷をプライマリノード全体に分散します。これにより、書き込みパフォーマンスとスケーラビリティが大幅に向上すると同時に、読み取り負荷の高いワークロードに対する堅牢なサポートが維持されます。マルチマスタークラスタ (Limitless) エディションは、SaaS (Software as a Service) マルチテナントシステム、ゲームシステム、e コマースプラットフォームなどの高同時実行読み取りおよび書き込みシナリオ向けに設計されています。
次の図は、マルチマスタークラスタ (Limitless) エディション のアーキテクチャを示しています。
クラスタ内のすべてのデータファイルは PolarStore に保存されます。各プライマリノードは、PolarFileSystem を使用して PolarStore 内のデータにアクセスします。クラスタエンドポイントを使用してクラスタにアクセスすると、PolarProxy は SQL 文を正しいプライマリノードに自動的にルーティングします。
主な利点
数秒での書き込みスケールアウト
最大 63 の計算ノード上のデータベースへの同時データ書き込みがサポートされています。データベースのノードの動的フェールオーバーは数秒以内に実装でき、クラスタ全体の同時読み取りおよび書き込み機能が向上します。
マルチマスターバックアップ (読み取り専用ノードなし)
プライマリノードに障害が発生した場合、トラフィックの少ない別のプライマリノードへのフェールオーバーを数秒で実装できます。ホットスタンバイ用に追加のアイドルリソースがデプロイされないため、コストが半分になります。
シナリオ
マルチマスタークラスタ (Limitless) エディション は、SaaS、ゲーム、e コマースでのマルチテナンシーなどのシナリオに適しています。これらのシナリオは、高同時実行の読み取りおよび書き込みリクエストを特徴としています。
Saas でのマルチテナンシー: テナント間の高同時実行性と負荷分散
シナリオ: テナントのデータベース数が急速に変化し、負荷量も大幅に変化します。ユーザーは、最適なエクスペリエンスを提供するために、異なるインスタンス間でデータベースリソースをスケジュールする必要があります。
マルチマスタークラスタ (Limitless) エディション を使用すると、テナントのデータベースの異なるプライマリノード間を数秒で切り替えたり、新しいプライマリノードを追加してバーストトラフィックを処理したりできます。これにより、負荷分散が実現します。
グローバルゲームサーバーと E コマースのシナリオ: 急速に成長するビジネスリクエストに対応するための数分でのスケーリング
シナリオ: ミドルウェアベースまたはビジネスベースのデータベースとテーブルシャーディングソリューションがよく使用されます。バージョンアップデートや大規模なプロモーション中は、クラスタ容量の急激なスケールアウトが必要です。バージョンアップデートと大規模なプロモーションが終了したら、迅速なスケールインが必要です。ただし、従来のクラスタのスケーリングには、データ移行のための複雑な手順が含まれます。
マルチマスタークラスタ (Limitless) エディション の数秒でのスケールアウトと透過的なルーティング機能を、ミドルウェアベースまたはビジネスベースのデータベースとテーブルシャーディングソリューションと組み合わせて使用することで、スケールアウトプロセスを数日から数分に短縮できます。
異なるサーバーにデプロイされたゲームアプリケーション: パフォーマンスとスケーラビリティの向上
シナリオ: ゲームの成長期には、データベースの負荷が重く、継続的に増加します。この期間中、データベースの数は増え続けます。その結果、プライマリノードの負荷も増加します。ゲームの衰退期には、データベースの負荷が大幅に軽減され、データベースがマージされます。その結果、プライマリノードの負荷も減少します。
ソリューション: 成長期には、一部のデータベースを新しいプライマリノードに切り替えて負荷分散を実現できます。衰退期には、データベースを少数のプライマリノードに集約して運用コストを削減できます。
サポートされているバージョン
クラスタの データベースエンジン が MySQL 8.0 であることを確認してください。
PolarDB for MySQL クラスタのエディションを クラスタ エディションから マルチマスタークラスタ (Limitless) エディションに直接変更することはできません。 PolarDB for MySQL クラスタのメジャーバージョンまたはエディションをアップグレードする方法については、「メジャーバージョンのアップグレード」をご参照ください。
パフォーマンスの向上
テスト後、クラスタのデータベースがより多くのプライマリノードに切り替えられるため、クラスタ全体の同時読み取りおよび書き込み機能は線形的に増加します。次のコードスニペットは、ストレステストの例を示しています。
テストの背景: クラスタには 8 つのデータベースと 8 つのプライマリノードが含まれています。
テスト手順: テストの開始時に、8 つのデータベースが 1 つのプライマリノードを共有します。同じストレステストを実行するために、データはすべてのデータベースに同時に同期されます。ストレステスト期間中、8 つのデータベースはそれぞれ 2 つのプライマリノード、4 つのプライマリノード、8 つのプライマリノードにスケジュールされます。クラスタ全体のパフォーマンスの変化傾向を確認します。
次の図は、QPS の変化傾向を示しています。

前の図では、データベースがより多くのプライマリノードにスケジュールされるにつれて、クラスタ全体の同時読み取りおよび書き込み機能が大幅に向上し、線形的に増加しています。
計算ノードの仕様と料金
計算ノードには、汎用 または 専用 の仕様を指定できます。詳細については、「PolarDB for MySQL Enterprise Edition の計算ノードの仕様」をご参照ください。
マルチマスタークラスタ (Limitless) エディションのクラスタを使い始める
クラスタの基本設定を構成します。データベースアカウントを作成 し、クラスタのホワイトリストを構成 し、データベースに接続 できます。
マルチマスタークラスタ (Limitless) エディションの PolarDB for MySQL クラスタでは、各データベースまたはデータオブジェクトのデータを 1 つのノードのみに書き込むことができます。データベースを作成するときに、データベースのプライマリノードを指定できます。また、
loose_innodb_mm_default_master_idパラメータを 0 に設定して、システムがランダムにプライマリノードを選択してデータベースを作成できるようにすることもできます。SELECT文を使用してデータのクエリを実行します。データをクエリするときに、プライマリノードを指定する必要はありません。 PolarProxy は、クエリを実行する正しいプライマリノードを自動的に選択します。
詳細については、「マルチマスタークラスタエディションの使用方法」をご参照ください。