文档

多租户资源隔离使用示例

更新时间:

本文介绍了多租户资源隔离示例,您可以按照本文的内容自行测试,以快速了解和使用多租户资源隔离功能。

测试环境

  • 使用的ECS实例和PolarDB MySQL版集群均位于同一地域和同一可用区。

  • 网络类型均为VPC网络。

    说明

    ECS实例和PolarDB MySQL版集群需保证在同一个VPC中。

  • 使用的PolarDB MySQL版集群信息如下:

    • 版本为PolarDB MySQL版8.0.2版本。

    • 产品系列为集群版。

    • 节点规格为polar.mysql.x4.xlarge(8核32 GB独享规格)

    • 节点数量为2(一个主节点和一个只读节点)。

    • 使用的连接串为集群地址。查看PolarDB MySQL版集群地址的具体步骤请参见查看连接地址和端口

    • 关键信息配置如下:

      thread_pool_enable = ON
      thread_pool_size = 8 // 与PolarDB MySQL版集群规格中的核数保持一致
      thread_pool_multi_tenant_enabled = ON
      enable_multi_tenant = ON
  • 使用的ECS实例信息如下:

    • 实例规格为ecs.g7.2xlarge。

    • 实例使用的镜像为Ubuntu 22.04 64位。

测试流程

步骤一:创建资源配置信息

使用高权限账号连接数据库,并创建多种资源配置信息,用于对租户资源进行限制。

CREATE resource_config r1 min_cpu 0 max_cpu 1;
CREATE resource_config r2 min_cpu 0 max_cpu 2;
CREATE resource_config r3 min_cpu 0 max_cpu 4;
CREATE resource_config r4 min_cpu 0 max_cpu 8;
CREATE resource_config r5 min_cpu 1 max_cpu 2;
CREATE resource_config r6 min_cpu 2 max_cpu 4;
CREATE resource_config r7 min_cpu 4 max_cpu 8;
CREATE resource_config r8 min_cpu 6 max_cpu 8;
CREATE resource_config r9 min_cpu 7 max_cpu 8;

资源配置信息创建完成后,您可以通过查询mysql.tenant_resource_config表来查看当前所有的配置资源。

SELECT * FROM mysql.tenant_resource_config;

步骤二:创建租户

使用高权限账号连接数据库,分别创建tenant_1tenant_2两个租户,且在创建租户时与指定的资源配置信息绑定。

# 创建租户 tenant_1
CREATE tenant tenant_1 resource_config r1;
# 创建租户 tenant_2
CREATE tenant tenant_2 resource_config r5;
  • 创建租户tenant_1时,将此租户与资源配置r1绑定。此租户CPU资源限制min_cpu为0,在后台资源调度时,将不保证此租户下使用CPU的最小限额。限制此租户使用CPU的最大额度为1 CPU。min_cpu=0的租户称之为共享租户

  • 创建租户tenant_2时,将此租户与资源配置r5绑定,此租户CPU资源限制min_cpu为1,在后台资源调度时,将保证此租户下使用CPU的最小限额为1 CPU,min_cpu >0的租户为独享租户

租户创建完成后,您可以通过查询mysql.tenants表来查看当前的所有租户。

SELECT * FROM mysql.tenants;

在调度CPU资源时,通过调度分配给租户的线程组进行实现,您可以通过查询information_schema.thread_pool_status表来查看租户使用的线程组情况。

SELECT * FROM information_schema.thread_pool_status;

执行结果如下:

image

从上图可以看出,ID为2的线程组被分配给tenant_2tenant_2为独享租户,将会独占ID为2的线程组。而tenant_1为共享租户,故不会独占任何一个线程组。

步骤三:创建用户和数据库

租户创建成功后,分别在两个租户下创建用户和数据库。

在租户tenant_1下创建用户user_1,并授予user_1tenant_1租户下的所有执行权限。此处可以将user_1@tenant_1当做租户tenant_1下的一个高权限账号。

#在系统租户下创建'user_1@tenant_1'
CREATE user 'user_1@tenant_1' IDENTIFIED WITH mysql_native_password BY {pwssword};

#在高权限账户下,为user1@tenant_1授予租户tenant_1下的所有执行权限
#(需注意不要超出当前租户权限,不要授予其他租户的权限)
GRANT all privileges ON `%@tenant_1`.* to 'user_1@tenant_1'@'%' with grant option;

#在高权限账户下,为user1@tenant_1授予CREATE USER权限
GRANT CREATE user ON *.* to 'user_1@tenant_1'@'%';

用户创建成功后,通过该用户连接数据库的SQL语句如下:

mysql --host=xxxxxx -u user1@tenant_1 -p pwssword

使用该账号登录数据库成功后,您仅可查看当前租户下的数据库。对于系统租户下的数据库以及其他租户下的数据库该账号均不可见。

继续在当前连接中创建用户user_2以及数据库sbtest

# 创建user_2
CREATE user 'user_2' IDENTIFIED WITH mysql_native_password BY {pwssword};

# 授予user_2权限
GRANT CREATE,INSERT,SELECT,UPDATE,DELETE,DROP,index ON *.* to user_2;

# 创建sbtest
CREATE database sbtest;

在租户tenant_1下创建用户以及数据库后,您可以通过相同的方式在tenant_2下创建用户和数据库。

步骤四:进行资源隔离测试

Sysbench数据准备

sysbench oltp_read_only  --threads=512 --mysql-host=xxxx  --mysql-user=user_2@tenant_1 --mysql-password={password} --mysql-db=sbtest --tables=10 --table-size=50000   --report-interval=1 --time=7200  prepare

执行Sysbench测试

sysbench oltp_read_only  --threads=512 --mysql-host=xxxx  --mysql-user=user_2@tenant_1 --mysql-password={password} --mysql-db=sbtest --tables=10 --table-size=50000   --report-interval=1 --time=7200  run

在执行Sysbench测试期间,您需要使用高权限账号user_1按照资源配置顺序切换tenant_1所对应的资源配置信息。调整资源配置信息的ALTER语法如下:

ALTER tenant tenant_1 resource_config r7;

资源配置切换测试一

该测试将使用租户tenant_1下的user_2来进行Sysbench测试,通过切换tenant_1绑定的资源配置信息来观察集群使用的CPU资源变化情况。此时tenant_2的资源配置信息为r5tenant_1绑定的资源配置信息切换顺序为r1->r4->r5->r6->r7->r3->r2->r1。

测试结果

  • 读写(RW)节点的测试数据如下:

    • CPU/内存利用率

      image

    • TPS/QPS

      image

  • 只读(RO)节点的测试数据如下:

    • CPU/内存利用率

      image

    • TPS/QPS

      image

在该测试中,因为tenant_2的资源配置信息为r5,在对tenant_1执行测试时,所能达到的最高CPU为7,CPU占比约为CPU总量的87%。根据tenant_1所绑定资源配置的变化,读写节点和只读节点的CPU使用率与QPS均发生相应的变化。

资源配置切换测试二

该测试将tenant_2resource_config修改为r7,后续的测试过程中不再修改tenant_2的资源信息。仅调整tenant_1绑定的资源配置信息,资源配置信息的切换顺序为r1->r4->r5->r6->r3->r2->r1。

测试结果

  • 读写(RW)节点的测试数据如下:

    • CPU/内存利用率

      image

    • TPS/QPS

      image

  • 只读(RO)节点的测试数据如下:

    • CPU/内存利用率

      image

    • TPS/QPS

      image

在该测试中,由于租户tenant_2resource_config配置为r7,在对租户tenant_1执行测试时,所能达到的最高CPU为4,CPU占比约为CPU总量的50%。根据tenant_1绑定的资源配置信息变化,读写节点和只读节点的CPU使用率与QPS均发生相应的变化。

  • 本页导读 (0)
文档反馈