PolarDB for MySQLはマルチテナントモードを提供します。 マルチテナントモードでは、複数のテナントが同じクラスター内でコンピューティングリソースとストレージリソースを共有しながら、異なるテナント間でデータの分離とリソースの分離を保証できます。 各テナントは自分のデータにのみアクセスできます。 このモードは、リソースの競合を防ぎ、安定した業務運用を保証します。
仕組み
システムテナント、通常テナントA、および通常テナントBには、それぞれDB_1データベースとuser_1ユーザーがあります。 これらのデータベースとユーザーは同じ名前を共有しますが、それらは別個であり、互いに独立しています。
用語
テナント: テナントの概念は、データベースクラスター内のマルチテナントアーキテクチャをサポートするために導入され、クラスターとデータベースまたはユーザーレベルの間の階層層として機能します。 テナントは、システムテナントと通常テナントの2種類に分類されます。
システムテナント: 元のモードのユーザーに対応するように設計されています。 デフォルトでは、クラスター内の既存のデータベースとユーザーはシステムテナントに属します。 システムテナントのユーザーがクラスターに接続すると、ユーザーが必要なデータベース権限を持っていれば、すべてのテナントのデータベースにアクセスできます。
通常テナント: システムテナント配下に通常テナントを作成します。 通常テナント間のデータベースとユーザーは完全に分離されており、相互にアクセスできません。 正規テナントもシステムテナントのデータベースにアクセスできません。 CPUリソーススケジューリングのコンテキストでは、通常テナントはmin_cpuパラメーターの値に基づいて排他テナントと共有テナントに分類されます。
Exclusive tenant:
min_cpu
パラメーターの値が0より大きい。 システムは、排他的テナントが常にmin_cpuパラメータの値以上のCPUリソースを持つことを保証します。共有テナント:
min_cpu
パラメーターの値は0です。
min_cpu
パラメーターの値を変更して、テナントタイプを排他と共有の間で変更できます。
リソース設定: テナントが使用できるリソースを定義します。 この概念は、テナント間のリソースの分離と割り当てを管理するために導入されます。 分離とスケジューリングにはCPUリソースのみがサポートされています。
前提条件
マルチテナントモードを有効にするには、クラスターが次の要件を満たす必要があります。
データベースエンジンパラメーターはMySQL 8.0.2以降に設定されています。 Database EditionパラメーターはEnterprise Editionに設定されています。 EditionパラメーターはCluster Editionに設定されています。 クラスター内のノードの仕様は同じです。
マルチテナントモードはカナリアリリースです。 この機能を使用する場合は、DingTalkグループ59535005981に参加してテクニカルサポートを取得できます。 機能を有効にした後、機能を有効にするにはクラスターを再起動する必要があります。
注意事項
マルチテナントモードでbinlogを使用してデータを同期することはできません。
マルチテナントモードでは、ユーザー権限を部分的に取り消すことはできません。
クイックスタート
クラスターでスタンドアロンマルチテナントモードを有効にします。
説明マルチテナントモードはカナリアリリースです。 この機能を使用する場合は、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
パラメーターの値が、クラスターノード仕様のcpuコア数マイナス1を超えないようにします。 システムテナント用にCPUコアを1つ以上確保する必要があります。 そうしないと、テナントがリソース設定にバインドされない可能性があります。
テナント
tn1
およびtn2
を作成します。 テナントを作成するときは、上記のリソース設定のいずれかをテナントにバインドします。CREATE tenant tn1 resource_config r1; CREATE tenant tn2 resource_config r2;
説明すべてのテナントのリソース設定の
min_cpu
パラメーターの値の合計が、クラスターノード仕様のcpuコア数マイナス1を超えないようにします。ユーザー
u1
とu2
、およびデータベースdb1
とdb2
を作成します。-- Create user u1 in tenant tn1. CREATE USER 'u1@tn1' IDENTIFIED BY 'password'; -- Create database db1 in tenant tn1. CREATE DATABASE `db1@tn1`; -- Create user u2 in tenant tn2. CREATE USER 'u2@tn2' IDENTIFIED BY 'password'; -- Create database db2 in tenant tn2. CREATE DATABASE `db2@tn2`;
説明特権アカウントを使用してユーザーとデータベースを作成する場合は、ユーザー名またはデータベース名に
@ tenant name
サフィックスを追加する必要があります。ユーザー
u1
とu2
に権限を付与します。-- Grant permissions on tenant tn1 to user u1. GRANT ALL PRIVILEGES ON `%@tn1`.* TO 'u1@tn1'@'%' WITH GRANT OPTION; -- Grant permissions on tenant tn2 to user u2. GRANT ALL PRIVILEGES ON `%@tn2`.* TO 'u1@tn2'@'%' WITH GRANT OPTION;
ユーザー
u1 @ tn1
とu2 @ tn2
を使用して、テナントtn1とtn2間のデータとリソースの分離を確認できます。(オプション) 作成したテナント、ユーザー、およびデータベースを表示します。
テナント: 特権アカウントを使用してクラスターに接続し、
SELECT
ステートメントを実行してテナントに関する情報を表示します。 例:SELECT * FROM mysql.tenants;
ユーザー: PolarDBコンソールにログインします。 [クラスター] ページでクラスターを見つけます。 クラスターの ページに移動し、作成したユーザーに関する情報を表示します。
@
記号の後にテナント名が追加されていないアカウント名は、システムテナントのユーザーです。@
記号の後に追加されたテナント名を含むアカウント名は、対応するテナントのユーザーです。
データベース: PolarDBコンソールにログインします。 [クラスター] ページでクラスターを見つけます。 クラスターの ページに移動し、データベースに関する情報を表示します。
@
記号の後にテナント名が付加されていないデータベース名は、システムテナントのデータベースです。@
記号の後に追加されたテナント名を含むデータベース名は、対応するテナントのデータベースです。