暂无图片
暂无图片
10
暂无图片
暂无图片
暂无图片

OceanBase管理数据库通过修改unit_config(一)

2023-10-01
671

对租户内资源的扩容和缩容可以通过修改 unit_config 即租户的资源单元配置来实现。

前提条件

在进行租户的扩容和缩容操作前,需要进行以下操作:

  • 由于空闲的资源池会被计算为占用的资源,故在扩容前,如果有租户被删除,建议与租户对应的资源池也一并删除,以便释放资源。

    删除资源池的相关操作请参见 删除资源池

  • 进行租户缩容前,建议进行一轮转储以便释放租户正在使用的内存。

    手动触发转储的相关操作请参见 手动触发转储

  • 查看集群中资源的分配情况,了解集群中资源的使用情况。

    查看集群节点的资源总量和分配状态的相关操作请参见 查看集群的资源信息

通过 SQL 语句修改租户的资源单元配置

在通过调大和调小租户资源单元的配置进行扩容和缩容时,有以下两种场景:

  • 当前租户配置了独立的资源单元配置,可以直接修改租户的资源单元配置。

  • 多个租户使用了相同的资源单元配置,需要切换租户的资源单元配置。

确认租户是否使用了独立的资源单元配置的操作如下:

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 执行以下语句,获取待操作的租户所属的资源配置 ID。

    obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID  FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID;
    +-------------+----------------+
    | TENANT_NAME | UNIT_CONFIG_ID |
    +-------------+----------------+
    | sys         |              1 |
    | MySQL       |           1002 |
    | Oracle      |           1004 |
    +-------------+----------------+
    3 rows in set
    

根据查询结果,如果当前租户对应的 UNIT_CONFIG_ID 与其他租户相同,则表示有多个租户使用了相同的资源单元配置;如果当前租户中对应的 UNIT_CONFIG_ID 与其他租户均不相同,则表示该租户使用了独立的资源单元配置。

以下将通过这两种场景提供租户扩容和缩容的操作指导。

注意事项

在调大资源规格时,无论是通过修改资源配置还是切换资源配置,调整后的资源总量都必须满足以下要求:

Sum(min_cpu) <= CPU_CAPACITY;
Sum(max_cpu) <= CPU_CAPACITY * resource_hard_limit;
Sum(memory_size) <= MEM_CAPACITY;
Sum(log_disk_size) <= LOG_DISK_CAPACITY;

否则,系统会报错,提示扩容失败。

其中:

  • CPU_CAPACITY:表示 CPU 总的容量。

  • MEM_CAPACITY:表示内存总的容量。

  • LOG_DISK_CAPACITY:表示日志盘总的容量。

  • resource_hard_limit:是一个配置项的值。

    在分配 Unit 时,系统会根据配置项 resource_hard_limit 的值来分配 CPU 资源。该配置项的默认值为 100,表示不允许超卖,取值范围为 [0, 10000]。

    更多配置项 resource_hard_limit 的说明信息请参见 resource_hard_limit

背景信息

假设当前集群中共包含 3 个可用区 z1z2z3,每个 Zone 内包含 3 台 OBServer。集群中有一个普通租户 tenant1,其资源分配情况如下:

obclient> CREATE RESOURCE UNIT unit1 MAX_CPU 6, MIN_CPU 6, MEMORY_SIZE '36G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT=0, LOG_DISK_SIZE = '2G';

obclient> CREATE RESOURCE POOL pool1 UNIT 'unit1', UNIT_NUM 2, ZONE_LIST ('z1','z2','z3');

obclient>CREATE TENANT tenant1 resource_pool_list=('pool1');

租户配置了独立的资源单元配置的场景

如果待操作的租户配置了独立的资源单元配置,您可以直接通过修改租户的 unit_config 来完成租户的扩容和缩容。

方法如下:

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 进入 oceanbase 数据库。

    obclient>USE oceanbase;
    
  3. 执行以下语句,获取待操作的租户所使用的资源配置 ID。

    obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID  FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID;
    +-------------+----------------+
    | TENANT_NAME | UNIT_CONFIG_ID |
    +-------------+----------------+
    | sys         |              1 |
    | MySQL       |           1001 |
    | Oracle      |           1002 |
    +-------------+----------------+
    3 rows in set
    
  4. 执行以下语句,获取待操作租户的资源配置详细信息。

    obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1001';
    +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
    | UNIT_CONFIG_ID | NAME  | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
    +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
    |           1001 | unit1 |       6 |       6 | 38654705664 |    2147483648 |     1024 |     1024 |           0 |
    +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
    1 row in set
    
  5. 根据获取的资源单元配置信息,修改 unit1 的配置。

    • 调大 unit1 的配置

      obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '40G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
      
    • 调小 unit1 的配置

      obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
      

多个租户使用了相同的资源单元配置的场景

如果多个租户共用了同一个资源单元配置模版,则不能通过简单的调大资源单元配置来实现租户的扩容和缩容。因为一旦修改,将导致使用相同资源单元配置模版的所有租户同时进行了扩容或缩容。

此场景下,需要先创建独立的资源单元配置后,再为租户切换资源单元配置。

例如,待扩容或缩容的租户为 tenant1,但由于 tenant1tenant2 均使用了 unit1 作为资源单元配置,因此需要创建一个新的资源单元。

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 进入 oceanbase 数据库。

  3. 创建一个独立的资源单元配置。

    其中,unit2为新建的资源单元的名称,名称需要保证全局唯一。

    • 创建比当前资源单元配置高的 unit2

      obclient> CREATE RESOURCE UNIT unit2 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '20G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
      
    • 创建比当前资源单元配置低的 unit3

      obclient> CREATE RESOURCE UNIT unit3 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';
      
  4. 修改租户的资源池,将资源池的资源单元配置替换为刚刚新创建的 Unit。

    其中,unit2 和 unit3 为刚刚新创建的 Unit。

    obclient> ALTER RESOURCE POOL pool1 unit='unit2';
    
    obclient> ALTER RESOURCE POOL pool1 unit='unit3';
    

后续处理

操作结束后,您可以通过 oceanbase.DBA_OB_UNIT_CONFIGS 视图,确认当前租户的 unit_config 是否修改成功。

obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;

更多 DBA_OB_UNIT_CONFIGS 视图的字段及说明信息请参见 DBA_OB_UNIT_CONFIGS

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论