创建租户分为以下三步:
创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用。
创建资源池:可以每个 Zone 一个资源池,使用独立的资源单元规格,也可以所有 Zone 使用同一个资源单元规格,都在一个资源池下。
创建租户:创建租户时需关联到第 2 步中创建的资源池。
创建资源单元规格后并不会立即分配资源。资源单元规格元数据在视图 __all_unit_config
里,建议创建之前先查看此视图,如果有合适的规格,可直接复用。
语法
资源单元规格创建语法如下:
CREATE RESOURCE UNIT unit_name
MAX_CPU [=] cpu_num,
MAX_MEMORY [=] mem_size,
MAX_IOPS [=] iops_num,
MAX_DISK_SIZE [=] disk_size,
MAX_SESSION_NUM [=] session_num,
[MIN_CPU [=] cpu_num,]
[MIN_MEMORY [=] mem_size,]
[MIN_IOPS [=] iops_num] ;
参数解释:
参数 | 描述 |
---|---|
MAX_CPU | 指定 CPU 的最多数量。 |
MAX_MEMORY | 指定最大内存容量,取值范围为 [1073741824, +∞) 。单位为字节 B,最小值为 1G。 |
MAX_IOPS | 指定 IOPS 的最多数量,取值范围为 [128,+∞)。 |
MAX_DISK_SIZE | 指定最大硬盘容量,取值范围为[536870912,+∞]。单位为字节,最小值为 512M。 |
MAX_SESSION_NUM | 指定 Session 的最多数量,取值范围为 [64,+∞)。 |
MIN_CPU | 指定 CPU 的最少数量。 |
MIN_MEMORY | 指定最小内存容量。 |
MIN_IOPS | 指定 IOPS 的最少数量。 |
示例:分别创建两个资源单元规格 S1、S2
CREATE resource unit S1 max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
CREATE resource unit S2 max_cpu=4, min_cpu=4, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
查看创建的资源单元规格:
MySQL [oceanbase]> 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-09-12 14:49:43.422194 | 2021-09-13 14:02:08.782027 | 1 | sys_unit_config | 5 | 5 | 1610612736 | 1610612736 | 10000 | 5000 | 53687091200 | 9223372036854775807 |
| 2021-09-14 11:10:51.296235 | 2021-09-14 11:10:51.296235 | 1002 | S1 | 3 | 3 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 |
| 2021-09-14 11:13:46.773639 | 2021-09-14 11:13:46.773639 | 1004 | S2 | 4 | 4 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 |
+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
3 rows in set (0.001 sec)
资源池中的资源是从节点资源中分配而来。资源池在每个节点里的部分被称为资源单元。每个资源单元的大小通过创建时指定的资源单元规格大小确定。
语法
创建资源池的语法如下:
CREATE RESOURCE POOL poolname
UNIT [=] unitname,
UNIT_NUM [=] unitnum,
ZONE_LIST [=] ('zone' [, 'zone' ...]);
参数解释:
参数 | 描述 |
---|---|
poolname | 指定要创建的资源池的名称。 |
UNIT = unitname | 指定资源规格的名称。 |
UNIT_NUM = unitnum | 指定要创建的单个 Zone 下的 Unit 个数。每个单元会根据当前集群负载,自动在每个 Zone 中选择一个 Server 负载,但同一个资源池的多个 Unit 不能分配到同一个 Server ,即一个资源池包含的 Unit 个数不能超过单 Zone 内 Server 的个数。 |
ZONE_LIST = ('zone' [, 'zone' ...]) | 指定要创建的资源池所属的 Zone 。 如果不指定,就默认在所有 Zone 创建这个资源单元。 |
示例
本次示例中创建 2 个资源池,分别使用不同的资源单元规格。且其中一个资源池横跨两个 Zone
。 这样操作主要是为了演示资源池创建时的灵活性。生产环境中,为了管理方便,可以一个资源池横跨三个 Zone
,并且使用同一种资源单元规格。
create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1' ,'zone2') ;
create resource pool pool_2 unit='S2' , unit_num=1, zone_list=('zone3');
查看资源池详情:
select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
;
资源池详情如下:
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 1 | zone1 | 172.20.249.52:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 2 | zone2 | 172.20.249.49:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 3 | zone3 | 172.20.249.51:2882 | 1 | sys |
| pool_1 | S1 | 3 | 3 | 3.000000000000 | 3.000000000000 | 1006 | zone1 | 172.20.249.52:2882 | NULL | NULL |
| pool_1 | S1 | 3 | 3 | 3.000000000000 | 3.000000000000 | 1007 | zone2 | 172.20.249.49:2882 | NULL | NULL |
| pool_2 | S2 | 4 | 4 | 3.000000000000 | 3.000000000000 | 1008 | zone3 | 172.20.249.51:2882 | NULL | NULL |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
6 rows in set (0.037 sec)
查看集群剩余可用资源:
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
order by a.zone, a.svr_ip
;
剩余可用资源如下:
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
| zone1 | 172.20.249.52:2882 | 14 | 8 | 6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
| zone2 | 172.20.249.49:2882 | 14 | 8 | 6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
| zone3 | 172.20.249.51:2882 | 14 | 9 | 5 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
+-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
3 rows in set (0.026 sec)
资源池创建出来后,集群的可用资源就减少了。但是这个资源池还没有关联到具体租户,所以无法被业务使用。
租户就是实例,创建租户需要关联到某个资源池。
语法
创建租户的语法如下:
CREATE TENANT [IF NOT EXISTS] tenant_name
[tenant_characteristic_list] [opt_set_sys_var];
tenant_characteristic_list:
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic:
COMMENT 'string'
| {CHARACTER SET | CHARSET} [=] charsetname
| COLLATE [=] collationname
| REPLICA_NUM [=] num
| ZONE_LIST [=] (zone [, zone...])
| PRIMARY_ZONE [=] zone
| DEFAULT TABLEGROUP [=] {NULL | tablegroup}
| RESOURCE_POOL_LIST [=](poolname [, poolname...])
| LOGONLY_REPLICA_NUM [=] num
| LOCALITY [=] 'locality description'
opt_set_sys_var:
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...
参数解释:
参数 | 描述 |
---|---|
tenant_name | 指定租户名。最长 64 个字节,只能由大小写英文字母、数字和下划线组成,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 |
IF NOT EXISTS | 如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会报错。 |
RESOURCE_POOL_LIST | 资源池列表,为创建租户时的必填项 。 |
DEFAULT TABLEGROUP | 设置租户默认表分组信息,NULL 表示取消默认表分组。如果不指定,默认为 NULL。 |
COMMENT | 修改注释。 |
CHARACTER SET | CHARSET |
COLLATE | 指定校对规则。 |
REPLICA_NUM | 指定副本数。 |
ZONE_LIST | 指定要修改的 Zone 列表。 |
PRIMARY_ZONE | 指定 Primary Zone。 |
LOGONLY_REPLICA_NUM | 指定日志副本数。 |
LOCALITY | 描述副本在 Zone 间的分布情况,如:F@z1,F@z2,F@z3,R@z4 表示 z1、z2、z3 为全功能副本,z4 为只读副本。 |
system_var_name | 指定租户系统变量值。其中 ob_compatibility_mode 用于指定租户的兼容模式(可选 mysql 与 oracle 。社区版只支持 mysql ),只能在创建时指定。如果不指定 ob_compatibility_mode ,默认兼容模式为 mysql 。 |
示例
创建租户时可以通过 set
命令指定租户变量(参数)值。
create tenant obmysql resource_pool_list=('pool_1','pool_2'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%' ;
查看创建结果:
MySQL [oceanbase]> select * from gv$tenant;
+-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
| tenant_id | tenant_name | zone_list | primary_zone | collation_type | info | read_only | locality |
+-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
| 1 | sys | zone1;zone2;zone3 | zone1;zone2,zone3 | 0 | system tenant | 0 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
| 1001 | obmysql | zone1;zone2;zone3 | RANDOM | 0 | mysql tenant/instance | 0 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
+-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
2 rows in set (0.005 sec)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。