PolarDB for MySQL は、単一のクラスター内で複数のテナントがコンピューティングリソースとストレージリソースを共有できるマルチテナントモードを提供します。このモードは、テナント間のデータとリソースの分離を保証します。この分離は、リソースの競合を防ぎ、運用の安定性を確保します。
仕組み
システムテナント、通常テナント A、通常テナント B にはそれぞれ DB_1 という名前のデータベースと user_1 という名前のユーザーが含まれていますが、これらは同じ名前を共有しているだけで、それぞれ異なるエンティティです。
主要な概念
テナント:テナントは、データベースクラスターレベルの下、データベースとユーザーレベルの上に位置します。 テナントは、システムテナントまたは通常テナントに分類されます。
-
システムテナント:下位互換性のために、既存のユーザーとデータベースをサポートするように設計されています。 クラスター内の既存のデータベースとユーザーは、デフォルトでシステムテナントに属します。 システムテナントのユーザーは、必要な権限があれば、すべてのテナントのデータベースにアクセスできます。
-
通常テナント:通常テナントは、システムテナントの下に作成する必要があります。 通常テナント間では、データベースとユーザーは完全に分離されます。 また、通常テナントは、システムテナントに属するデータベースにアクセスすることもできません。 CPU リソーススケジューリングでは、通常テナントは、
min_cpuの値が 0 より大きいかどうかに基づいて、専用テナントまたは共有テナントに分類されます。-
専用テナント:
min_cpu> 0。 システムは、このテナントの CPU リソースが、いかなる時点でもmin_cpuの値を下回らないことを保証します。 -
共有テナント:
min_cpu<= 0。
min_cpuパラメーターの値を調整することで、専用テナントと共有テナントを相互に変換できます。 -
リソース構成:リソース構成は、テナントが使用できるリソースを定義し、テナント間のリソース分離とスケジューリングを実現します。 現在、分離とスケジューリングが可能なのは CPU リソースのみです。
前提条件
マルチテナントモードを有効にするには、クラスターが次の要件を満たしている必要があります。
データベースエンジンは MySQL 8.0.2 以降、データベースエディションは エンタープライズ版、エディションは クラスター版であり、すべてのクラスターノードの仕様が同一である必要があります。
マルチテナントモードは現在カナリアリリース中です。この機能を有効にするには、指定の DingTalk グループからテクニカルサポートにお問い合わせください。機能を有効にした後、変更を反映させるために、対象のクラスターを再起動する必要があります。
DingTalk グループ番号: 59535005981。
制限事項
-
テナントのバイナリログ同期はサポートされていません。
-
部分的な権限の取り消しはサポートされていません。
クイックスタート
-
スタンドアロンマルチテナントモードを有効にします。
説明マルチテナントモードは現在カナリアリリース中です。この機能を有効にするには、指定の DingTalk グループからテクニカルサポートにお問い合わせください。機能を有効にした後、変更を反映させるために、対象のクラスターを再起動する必要があります。
DingTalk グループ番号: 59535005981。
-
特権アカウントを使用してデータベースに接続します。
-
リソース設定
r1とr2を作成します。CREATE resource_config r1 min_cpu 1 max_cpu 2; CREATE resource_config r2 min_cpu 1 max_cpu 4;説明-
クラスターのノード仕様に基づいて、
min_cpuとmax_cpuの値を設定してください。 -
いずれのテナントの
min_cpu値も、クラスターノードのコア数から 1 を引いた値 を超えることはできません。システムテナント用に少なくとも 1 つのコアを確保する必要があります。そうしないと、テナント作成時にテナントのリソース設定へのバインドが失敗します。
-
-
テナント
tn1とtn2を作成します。テナントを作成する際は、作成したリソース設定にバインドする必要があります。CREATE tenant tn1 resource_config r1; CREATE tenant tn2 resource_config r2;説明すべてのテナントのリソース設定における
min_cpu値の合計が、クラスターノードのコア数から 1 を引いた値 を超えないようにしてください。 -
ユーザー
u1とu2、およびデータベースdb1とdb2を作成します。-- テナント tn1 にユーザー u1 を作成します。 CREATE USER 'u1@tn1' IDENTIFIED BY 'password'; -- テナント tn1 にデータベース db1 を作成します。 CREATE DATABASE `db1@tn1`; -- テナント tn2 にユーザー u2 を作成します。 CREATE USER 'u2@tn2' IDENTIFIED BY 'password'; -- テナント tn2 にデータベース db2 を作成します。 CREATE DATABASE `db2@tn2`;説明特権アカウントを使用してユーザーまたはデータベースを作成する場合は、ユーザー名またはデータベース名に
@<tenant_name>サフィックスを付加する必要があります。 -
ユーザー
u1とu2に権限を付与します。-- テナント tn1 のユーザー u1 に権限を付与します。 GRANT ALL PRIVILEGES ON `%@tn1`.* TO 'u1@tn1'@'%' WITH GRANT OPTION; -- テナント tn2 のユーザー u2 に権限を付与します。 GRANT ALL PRIVILEGES ON `%@tn2`.* TO 'u2@tn2'@'%' WITH GRANT OPTION; -
ユーザー
u1@tn1とu2@tn2を使用して、テナント間のデータとリソースの分離を検証できます。 -
(オプション) 作成したテナント、ユーザー、データベースを表示します。
-
テナント:特権アカウントを使用してデータベースに接続し、
SELECTステートメントを実行してテナントを表示します。例:SELECT * FROM mysql.tenants; -
ユーザー:PolarDB コンソールにアクセスし、を開きます。
-
[ユーザー名] に
@サフィックスが含まれないユーザーは、システムテナントに属します。 -
[ユーザー名] に
@サフィックスが含まれるユーザーは、対応する通常テナントに属します。
-
-
データベース:PolarDB コンソールにアクセスし、を開きます。
-
[データベース名] に
@サフィックスが含まれないデータベースは、システムテナントに属します。 -
[データベース名] に
@サフィックスが含まれるデータベースは、対応する通常テナントに属します。
-
-