查看资源单元
通过查询内部表可以获知当前集群中已经存在的资源单元信息。资源单元可以理解为界定服务器资源使用模版。
下述为资源单元的查看语句:
obclient> SELECT * FROM __all_unit_config;
创建资源单元
租户使用的资源被限制在资源单元的范围内,如果当前存在的资源单元配置无法满足新租户的需要,可以新建资源单元。
下述为创建资源单元语句的语法:
CREATE RESOURCE UNIT unitname
MAX_CPU [=] cpunum,
MAX_MEMORY [=] memsize,
MAX_IOPS [=] iopsnum,
MAX_DISK_SIZE [=] disksize,
MAX_SESSION_NUM [=] sessionnum,
[MIN_CPU [=] cpunum,]
[MIN_MEMORY [=] memsize,]
[MIN_IOPS [=] iopsnum] ;
参数说明和取值范围:
语法中提及的参数不能省略,必须指定 CPU、Memory、IOPS、Disk Size 和 Session Num 的大小。
为参数指定值时,可以采用纯数字不带引号的方式,也可以使用带单位加引号的方式(如’1T’、’1G’、’1M’、’1K’)。
例如: max_memory=’10G’ 等效于 max_memory=10737418240
说明
为参数指定值时,不建议使用纯数字带引号的方式。
MAX_MEMORY
的取值范围:[1073741824,+∞) 单位为字节,即最小值为 1 G。MAX_IOPS
的取值范围:[128,+∞)。MAX_DISK_SIZE
的取值范围:[536870912,+∞]单位为字节,即最小值为 512 M。MAX_SESSION_NUM
的取值范围:[64,+∞)。
示例:
obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory '1G', max_iops 128,max_disk_size '10G', max_session_num 64, MIN_CPU=1, MIN_MEMORY='1G', MIN_IOPS=128;
obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory 1073741824, max_iops 128, max_disk_size 10737418240, max_session_num 64, MIN_CPU=1, MIN_MEMORY=1073741824, MIN_IOPS=128;
创建的资源单元实际上是资源单元的模版。可以被其他多个不同的资源池使用。比如,资源单元 unit1 创建后,可以创建资源池 pool1 和 pool2 并且 pool1 和 pool2 均使用 unit1 资源单元的配置。
修改资源单元
修改资源单元的配置可以动态调整租户的资源单元大小,实现租户的节点内动态扩容/缩容功能。
在增加资源的过程中必须保证 OBServer 有足够的剩余资源可以用于分配。可以通过内部表 _all_virtual_server_stat
查询节点总资源和已经分配的资源,然后通过计算可知是否可以修改资源单元。
下述为修改资源单元语句的语法:
ALTER RESOURCE UNIT unitname
MAX_CPU [=] cpunum,
MAX_MEMORY [=] memsize,
MAX_IOPS [=] iopsnum,
MAX_DISK_SIZE [=] disksize,
MAX_SESSION_NUM [=] sessionnum,
[MIN_CPU [=] cpunum,]
[MIN_MEMORY [=] memsize,]
[MIN_IOPS [=] iopsnum] ;
示例:
obclient> ALTER RESOURCE UNIT unit1 max_cpu 15, max_memory '20G', max_iops 128,max_disk_size '100G', max_session_num 64, MIN_CPU=10, MIN_MEMORY='10G', MIN_IOPS=128;
删除资源单元
下述为删除资源单元的语句:
obclient> DROP RESOURCE UNIT unitname;
资源单元必须满足资源单元没有被使用的情况下才可以进行删除。因此,需要将资源单元从资源池移除。
查看资源池
资源单元规定了 CPU 和内存在资源单元中的限制。资源池则是资源单元的容器。一个资源池仅支持存放一种规格的资源单元。租户运行的资源在资源池内分配。不同的资源池可以使用相同的资源单元配置。
下述为查看资源池的语句:
obclient> SELECT * FROM __all_resource_pool;
参数 | 说明 |
---|---|
gmt_create | 资源池的创建时间。 |
gmt_modified | 修改时间。 |
resource_pool_id | 资源池的 ID。 |
name | 资源池的名字。 |
unit_count | 资源池配置中在每个 Zone 的 Unit 数量。 |
unit_config_id | 资源吃配置的 ID, 可以结合 |
zone_list | 资源池分配到的 Zone List。 |
tenant_id | 使用资源池的租户 ID。 |
replica_type | 副本类型 0 代表全能型,5 代表日志型,16 代表只读型。 |
创建资源池
在创建新租户时,如果当前的资源池均被使用(被其他租户使用),需要创建新的资源池。
下述为创建资源池语句的语法:
CREATE RESOURCE POOL poolname
UNIT [=] unitname,
UNIT_NUM [=] unitnum,
ZONE_LIST [=] (‘zone’ [, ‘zone’ …]);
参数
unit_num
表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。参数
zone_list
表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。
示例:
obclient> CREATE RESOURCE POOL pool1 unit='unit1', unit_num=1, zone_list=('zone1','zone2','zone3');
修改资源池
修改资源池可以实现租户的另一种扩容/缩容的方式。比如在每个 Zone 中增加/减少节点数量,可以通过修改参数 unit_num
来实现。
下述为修改资源池语句的语法:
ALTER RESOURCE POOL poolname
UNIT [=] unitname,
UNIT_NUM [=] unitnum,
ZONE_LIST [=] (‘zone’ [, ‘zone’ …]);
修改资源池的命令,每次仅支持修改一个参数值。被修改的资源池必须是没有被使用的或者不包含任何资源单元的空的资源池。新建立的资源池不能更改 zone_list
。
示例 1:
展示了修改资源池 pool1 的资源单元。修改后 unit2 替代 unit1 属于资源池 pool1:
obclient> ALTER RESOURCE POOL pool1 unit='unit2'
示例 2:
展示了资源池 pool1 被使用中,尝试修改会报错:
obclient> ALTER RESOURCE POOL pool1 zone_list=('HANGZHOU_1');
ERROR 4179 (HY000): alter resource pool zone list with non-empty unit not allowed
示例 3:
展示了同时修改资源池的两个参数时,会报错:
obclient> ALTER RESOURCE POOL pool1 unit='unit1', zone_list=('HANGZHOU_1');
ERROR 1235 (0A000): alter unit_num, resource_unit, zone_list in one cmd not supported
删除资源池
下述为删除资源池的语句:
obclient> DROP RESOURCE POOL poolname;
查看资源配置
下述为查看资源配置的语句:
obclient> SELECT * FROM oceanbase.gv$unit;
查看具体的资源单元配置
下述为查看具体资源单元配置的语句:
obclient> SELECT * FROM __all_unit_config;