PolarDB MySQL版提供了多租户模式,允许多个租户在同一集群下共享计算资源和存储资源,同时保证各租户之间的数据隔离和资源隔离。各租户仅能访问其自身的数据,不会出现资源争抢现象,从而保证业务的稳定运行。
技术原理
DB_1与user_1虽然在系统租户、普通租户A及普通租户B中均存在,但它们是不同的数据库和用户,仅名称相同。
术语
租户:租户(tenant)为实现多租户模式所提出的概念,租户的层级结构在一个数据库集群之下,在数据库与用户之上。租户分为系统租户和普通租户:
系统租户:系统租户是为适应原有模式下的用户而设立的。在数据库集群中,原有的数据库和用户默认归属于系统租户。当通过系统租户下的用户连接数据库时,若该用户具备相应的数据库访问权限,则可以访问所有租户下的数据库。
普通租户:普通租户需在系统租户下进行创建。普通租户之间的数据库与用户完全隔离,无法相互访问,并且普通租户也无法访问系统租户下的数据库。在进行CPU资源调度时,普通租户根据min_cpu的值是否大于0,将其分为独占型租户和共享型租户。
独占型租户:
min_cpu
>0,需要保证任何时刻的CPU资源不小于min_cpu。共享型租户:
min_cpu
=0。
独占型租户和共享型租户可以通过调整
min_cpu
的值进行相互转换。
资源配置:资源配置(resource_config)是为了实现各租户之间资源隔离与资源调度所提出的概念,一个资源配置描述了一个租户下能够使用的资源。当前仅支持对CPU资源进行隔离以及调度。
使用前提
若要开启多租户模式,您的集群需满足如下条件:
数据库引擎为MySQL 8.0.2及以上,产品版本为企业版,系列为集群版,且集群的节点规格保持一致。
多租户模式目前处于灰度发布阶段。如有需求,请通过钉钉群联系相关工作人员来开启该功能。功能开启后,您需要重启目标集群才能生效。
钉钉群号为:59535005981。
注意事项
暂不支持租户下的Binlog信息同步。
暂不支持对用户部分撤销权限(Partial Revoke)。
快速体验
开启单机多租户模式。
说明多租户模式目前处于灰度发布阶段。如有需求,请通过钉钉群联系相关工作人员来开启该功能。功能开启后,您需要重启目标集群才能生效。
钉钉群号为: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个CPU。否则,在创建租户时,租户与资源配置会绑定失败。
创建租户
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`;
说明使用高权限账号创建用户与数据库时,需在用户名或数据库名后添加
@租户名称
后缀进行操作。对用户
u1
和u2
授权。-- 给用户 u1 授予租户 tn1 的权限。 GRANT ALL PRIVILEGES ON `%@tn1`.* TO 'u1@tn1'@'%' WITH GRANT OPTION; -- 给用户 u2 授予租户 tn2 的权限。 GRANT ALL PRIVILEGES ON `%@tn2`.* TO 'u1@tn2'@'%' WITH GRANT OPTION;
现在,您可以使用用户
u1@tn1
和u2@tn2
来验证不同租户之间的数据和资源隔离效果。如何进行负载测试,请参见步骤四:进行资源隔离测试。(可选)查看上述所创建的租户、用户及数据库。
租户:使用高权限账号连接数据库,并通过
SELECT
语句来查看租户。示例如下:SELECT * FROM mysql.tenants;
用户:您可以前往PolarDB控制台的 页面查看。
账户名不带
@租户名称
后缀的为系统租户下的用户。账户名带
@租户名称
后缀的为对应租户下的用户。
数据库:您可以前往PolarDB控制台的 页面查看。
数据库名不带
@租户名称
后缀的为系统租户下的数据库。数据库名带
@租户名称
后缀的为对应租户下的数据库。