首批通过分布式安全可靠测评,为关键业务系统打造
通过修改 UNIT_NUM 实现租户扩缩容
更新时间:2023-07-26 14:15:56
对租户内资源的扩容和缩容还可以通过修改资源池中的 UNIT_NUM 来实现。
前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
由于空闲的资源池会被计算为占用的资源,故在扩容前,如果有租户被删除,建议与租户对应的资源池也一并删除,以便释放资源。
删除资源池的相关操作请参见 删除资源池。
进行租户缩容前,建议进行一轮转储以便释放租户正在使用的内存。
手动触发转储的相关操作请参见 手动触发转储。
查看集群中资源的分配情况,了解集群中资源的使用情况。
查看集群节点的资源总量和分配状态的相关操作请参见 查看集群的资源信息。
修改资源池的 UNIT_NUM 可以通过 SQL 语句和 OCP 平台两种方式来完成。
注意
修改资源池的 UNIT_NUM 时,修改后的 UNIT_NUM 数量要小于或等于 Zone 内可用的 OBServer 数量。
通过 SQL 语句修改租户的 UNIT_NUM
您可以通过调大或调小租户的 UNIT_NUM 来进行租户的扩容或缩容。
背景信息
假设当前集群中共包含 3 个可用区 z1、z2、z3,每个 Zone 内包含 3 台 OBServer。集群中有一个普通租户 tenant1,其资源分配情况如下:
obclient> CREATE RESOURCE UNIT unit1 MAX_CPU 6,MIN_CPU 6, MAX_MEMORY '36G', MIN_MEMORY '36G', MAX_IOPS 128, MIN_IOPS 128, MAX_DISK_SIZE '2T', MAX_SESSION_NUM 64;
obclient> CREATE RESOURCE POOL pool1 UNIT 'unit1', UNIT_NUM 2, ZONE_LIST ('z1','z2','z3');
obclient>CREATE TENANT tenant1 resource_pool_list=('pool1');
调大 UNIT_NUM
随着业务量的不断变大,每个 Zone 上 2 个资源单元已经无法承载当前的业务量,因此需要考虑调大 UNIT_NUM 来提高租户的服务能力,以满足新的业务需求。
使用
root用户登录到数据库的sys租户。进入
oceanbase数据库。obclient>USE oceanbase;查询
oceanbase.gv$unit视图,获取当前租户中的资源配置信息。obclient> SELECT * FROM oceanbase.gv$unit;更多
gv$unit视图的字段及说明信息请参见 gv$unit。执行以下语句,调大
UNIT_NUM的数量。说明
不支持通过指定
unit_id的方式调大UNIT_NUM的数量。obclient>ALTER RESOURCE POOL pool1 UNIT_NUM = 3;语句执行后,系统会直接在每个 Zone 内添加一个 Unit。
调小 UNIT_NUM
调小 UNIT_NUM 实际就是删除资源单元,由于被删除的资源单元上可能存在对应租户的数据,因此,在执行删除资源单元的语句成功返回后,系统还需要将租户数据从被删除的资源单元上迁移出去。具体表现为,OceanBase 数据库会将本次删除资源单元的操作记录到 __all_rootservice_job 内部表中,查询该表可以观察本次资源单元的删除进度。
UNIT_NUM 被调小后,即将被删除的资源单元会被标记为 DELETING 状态,可以通过查询 __all_unit 表的 status 列来获取资源单元的状态。当租户数据从被删除资源单元全部迁移后,OceanBase 数据库会更新 __all_rootservice_job 表,标记本次删除资源单元的任务完成,同时清理 __all_unit 表,将处于 DELETING 状态的资源单元删除。
具体操作如下:
使用
root用户登录到数据库的sys租户。进入
oceanbase数据库。obclient>USE oceanbase;查询
oceanbase.gv$unit视图,获取当前租户中的资源配置信息。obclient> SELECT * FROM oceanbase.gv$unit;执行以下语句,调小
UNIT_NUM的数量。通过不指定
unit_id的方式调小UNIT_NUM的数量obclient>ALTER RESOURCE POOL pool1 UNIT_NUM = 1;语句执行后,系统会自动在每个 Zone 内选取 1 个资源单元进行删除。
通过指定
unit_id调小UNIT_NUM的数量其中,
1001、1003、1005表示待调小的 Unit 的unit_id。obclient> ALTER RESOURCE POOL pool1 UNIT_NUM 1 DELETE UNIT = (1001, 1003,1005);语句执行后,系统会直接删除指定的资源单元。
通过 OCP 修改租户资源池中的 Unit 数量
您也可以在 OCP 上修改租户所使用的资源池中的 UNIT_NUM 即 Unit 数量来完成租户资源的扩容和缩容。
登录 OCP。
在左侧导航栏上,单击 租户 。
在 租户列表 中,找到待查看的租户,单击租户名。
在 总览 页面的 副本详情 区域,找到待修改资源配置的 Zone,在对应的 操作 列中,单击 编辑 。
在 Unit 数量 对应的列中,调大或调小 Unit 的个数。
完成后,单击 确定 。
更多信息
在租户的扩容和缩容操作中,您可以借助以下内部表或视图来获取租户资源相关的信息:
内部表
oceanbase.__all_unit_config内部表
oceanbase.__all_unit_config记录了当前集群中的所有 unit_config 信息。示例:
obclient> SELECT * FROM __all_unit_config; +----------------------------+----------------------------+----------------+-----------------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+ | gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num | +----------------------------+----------------------------+----------------+-----------------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+ | 2021-11-11 14:29:24.847092 | 2021-11-11 14:29:24.847092 | 1 | sys_unit_config | 5 | 2.5 | 16106127360 | 12884901888 | 10000 | 5000 | 179593805824 | 9223372036854775807 | | 2021-11-11 14:43:01.449090 | 2021-11-11 14:43:01.449090 | 1002 | config_Oracle_zone1_S1_rhf | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 2021-11-15 11:25:48.371781 | 2021-11-15 11:25:48.371781 | 1003 | config_MySQL_zone1_S1_zlz | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 2021-11-15 11:26:38.979746 | 2021-11-15 11:26:38.979746 | 1004 | config_MySQL1_zone1_S1_cey | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 2021-11-15 11:27:09.347510 | 2021-11-15 11:27:09.347510 | 1005 | config_MySQL2_zone1_S1_ydf | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 2021-11-15 11:27:42.442706 | 2021-11-15 11:27:42.442706 | 1006 | config_Oracle1_zone1_S1_dfl | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 2021-11-17 14:29:09.458317 | 2021-11-17 14:29:09.458317 | 1022 | unit1 | 5 | 5 | 38654705664 | 34359738368 | 128 | 128 | 2199023255552 | 64 | +----------------------------+----------------------------+----------------+-----------------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+ 7 rows in set视图
gv$unitgv$unit视图中记录了集群中所有租户的资源分配情况。查询示例如下:
obclient> SELECT * FROM gv$unit; +---------+----------------+-----------------------------+------------------+------------------------+-------+-----------+-------------+----------------+----------+---------------------+-----------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+ | unit_id | unit_config_id | unit_config_name | resource_pool_id | resource_pool_name | zone | tenant_id | tenant_name | svr_ip | svr_port | migrate_from_svr_ip | migrate_from_svr_port | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num | +---------+----------------+-----------------------------+------------------+------------------------+-------+-----------+-------------+----------------+----------+---------------------+-----------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+ | 1 | 1 | sys_unit_config | 1 | sys_pool | zone1 | 1 | sys | xx.xx.xx.xx | 2882 | | 0 | 5 | 2.5 | 16106127360 | 12884901888 | 10000 | 5000 | 179593805824 | 9223372036854775807 | | 1002 | 1002 | config_Oracle_zone1_S1_rhf | 1002 | pool_Oracle_zone1_rhf | zone1 | 1002 | Oracle | xx.xx.xx.xx | 2882 | | 0 | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 1003 | 1003 | config_MySQL_zone1_S1_zlz | 1003 | pool_MySQL_zone1_zlz | zone1 | 1003 | MySQL | xx.xx.xx.xx | 2882 | | 0 | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 1004 | 1004 | config_MySQL1_zone1_S1_cey | 1004 | pool_MySQL1_zone1_cey | zone1 | 1004 | MySQL1 | xx.xx.xx.xx | 2882 | | 0 | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 1005 | 1005 | config_MySQL2_zone1_S1_ydf | 1005 | pool_MySQL2_zone1_ydf | zone1 | 1005 | MySQL2 | xx.xx.xx.xx | 2882 | | 0 | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | | 1006 | 1006 | config_Oracle1_zone1_S1_dfl | 1006 | pool_Oracle1_zone1_dfl | zone1 | 1006 | Oracle1 | xx.xx.xx.xx | 2882 | | 0 | 1.5 | 1.5 | 6442450944 | 6442450944 | 1250 | 1250 | 536870912000 | 375 | +---------+----------------+-----------------------------+------------------+------------------------+-------+-----------+-------------+----------------+----------+---------------------+-----------------------+---------+---------+-------------+-------------+----------+----------+---------------+---------------------+内部表
oceanbase.__all_resource_pool内部表
oceanbase.__all_resource_pool中记录了当前集群中所有资源池的资源配置情况。其中,unit_count表示资源池中某个资源单元的个数。查询示例如下:
obclient> SELECT * FROM oceanbase.__all_resource_pool; +----------------------------+----------------------------+------------------+------------------------+------------+----------------+-------------+-----------+--------------+--------------------+ | gmt_create | gmt_modified | resource_pool_id | name | unit_count | unit_config_id | zone_list | tenant_id | replica_type | is_tenant_sys_pool | +----------------------------+----------------------------+------------------+------------------------+------------+----------------+-------------+-----------+--------------+--------------------+ | 2021-11-11 14:29:24.849909 | 2021-11-11 14:29:24.854242 | 1 | sys_pool | 1 | 1 | zone1 | 1 | 0 | 0 | | 2021-11-11 14:43:01.455415 | 2021-11-11 14:43:01.466884 | 1002 | pool_Oracle_zone1_rhf | 1 | 1002 | zone1 | 1002 | 0 | 0 | | 2021-11-15 11:25:48.384105 | 2021-11-15 11:25:48.406186 | 1003 | pool_MySQL_zone1_zlz | 1 | 1003 | zone1 | 1003 | 0 | 0 | | 2021-11-15 11:26:38.986014 | 2021-11-15 11:26:38.997594 | 1004 | pool_MySQL1_zone1_cey | 1 | 1004 | zone1 | 1004 | 0 | 0 | | 2021-11-15 11:27:42.454288 | 2021-11-15 11:27:42.467915 | 1006 | pool_Oracle1_zone1_dfl | 1 | 1006 | zone1 | 1006 | 0 | 0 | | 2021-11-17 14:38:03.945051 | 2021-11-17 14:38:03.945051 | 1022 | zyc_1117 | 1 | 1023 | zone1;zone2 | -1 | 0 | 0 | +----------------------------+----------------------------+------------------+------------------------+------------+----------------+-------------+-----------+--------------+--------------------+ 6 rows in set