租户
1. 租户
1.1. 租户介绍
租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。多租户架构适用于资源整合(Resource Consolidation)、SaaS 服务等场景,同时也降低了运维复杂度。
集群偏向于部署层面的物理概念,是 Zone 和节点的集合,Zone 和节点具有部署地域(称为 Region)等属性;而租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括 CPU、内存、日志盘空间、IOPS 等。
租户类似于传统数据库的数据库实例,租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额。在租户下可以创建 Database、表、用户等数据库对象。
要描述清楚租户的概念,首先需要描述清楚资源规格、资源单元(Unit)、资源池等前置概念。资源规格对应的视图是 DBA_OB_Unit_CONFIGS,资源池对应的视图是 DBA_OB_RESOURCE_POOLS,资源单元对应的视图是 DBA_OB_UnitS,租户对应的视图是 DBA_OB_TENANTS。
-
资源规格
资源规格定义了常见物理资源项的大小,包括 CPU、内存、磁盘空间、IOPS 等。创建资源池时指定其资源规格,从而根据定义创建资源单元。 -
资源单元(Unit)
Unit 是租户管理中非常重要的概念。OceanBase 按照 Unit 来管理物理资源,是 CPU、内存、存储空间、IOPS 等物理资源的集合。Unit 也是资源调度的基本单位,其具有节点、Zone、Region 等位置属性,节点是服务器的抽象,Zone 是机房的抽象,Region 是地域的抽象,通过调整 Unit 的位置属性从而调整租户的部署方式。 -
资源池
每个 Unit 都归属于一个资源池,每个资源池由若干个 Unit 组成,资源池是资源分配的基本单位,同一个资源池内的各个 Unit 具有相同的资源规格,即该资源池内 Unit 的物理资源大小都相同。
![租户]()
如上图,展示了一个由 6 个 Unit 组成的资源池 a_pool,该资源池具有如下重要属性: -
ZONE_LIST:描述了该资源池中的 Unit 分布在哪些 Zone,本例为 ZONE_LIST='zone1,zone2,zone3'。
-
Unit_NUM:描述了 ZONE_LIST 中每个 Zone 中的 Unit 个数,本例为 Unit_NUM=2。
-
Unit_CONFIG_ID:描述了该资源池关联的资源规格,从而决定该资源池中每个 Unit 的物理资源大小,包括 CPU、内存、日志盘空间、IOPS 等。
通过 Unit 的概念,我们将 OceanBase 数据库的物理概念和逻辑概念进行了关联。每个租户有若干 Unit,分布于若干 Zone 的若干节点上。而每个节点上分布有若干个 Unit,这些 Unit 归属于不同租户。概括的讲:集群由节点组成,节点是 Unit 的容器。租户由 Unit 组成,Unit 是数据库对象的容器。
创建租户时通过设置 RESOURCE_POOL_LIST,可以指定该租户关联到的资源池,从而该租户拥有指定资源池的 Unit。例如:设置租户 a 的 RESOURCE_POOL_LIST=('a_pool'),其部署图如下:

该租户部署于 3 个 Zone,每个 Zone 有 2 个 Unit,可以通过调整 a_pool 的 Unit_CONFIG_ID 参数来动态调整租户的物理资源。
还可以通过调整 Unit 在同一个 Zone 内不同节点的分布(称为 Unit 迁移),从而达到 Zone 内不同节点间的负载均衡。节点故障时通过将其上的 Unit 迁移到同 Zone 内其他节点上,从而达到自动容灾恢复的目的。通过调整 Unit 在不同 Zone 的分布(变更租户的 Locality 属性),从而调整租户的部署模式,例如 “同城三中心”、“两地三中心”、“三地五中心” 等,从而具备不同的容灾等级。
1.2. 租户容量
租户容量本质上是指租户的服务能力,包括计算能力和存储能力。
OceanBase 数据库支持动态调整租户容量,可以调整单节点的服务能力,也可以调整服务节点个数。前者对应垂直扩缩容,后者对应水平扩缩容。这也是 OceanBase 数据库相比于传统数据库的架构优势之一,易用的水平扩展性,可以轻松突破单机容量上限。
通过上一小节的介绍,我们了解到租户资源有若干个 Unit 组成,每个 Unit 占据节点上一定的物理资源。通过调整 Unit 的资源规格大小和 Unit 个数,及业务流量在 Unit 上的分布,从而达到调整租户容量的目的。
本文介绍如何通过调大或者调小租户的资源规格(Unit Config)来达到单节点的服务能力的提升或降低,实现租户的扩容或缩容。
1.2.1. 分类
根据扩缩容的实现的不同方式,可以分为以下两种:
垂直扩缩容
1.2.1.1. 调整 Unit 的资源规格对应着传统数据库的垂直扩缩容。(垂直扩缩容)
资源规格定义了常见物理资源项的大小,包括 CPU、内存、磁盘空间、IOPS 等。通过调整资源规格,从而调整租户在单节点上占据的物理资源,达到调整租户容量的目的。调整资源规格是最高效最便捷的容量瓶颈的应急手段,无需数据腾挪,秒级生效。每个节点需要预留一定的物理资源,备用于租户紧急扩容,如果预留资源不够,可以临时下调同节点上其他租户的资源规格以释放物理资源。调整资源规格的扩缩容方式受限于单机容量的上限,OceanBase 数据库的水平扩展能力适用于该场景,可以轻松突破单机容量上限。
1.2.1.1.1. 前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
由于空闲的资源池会被计算为占用的资源,故在扩容前,如果有租户被删除,建议与租户对应的资源池也一并删除,以便释放资源。
删除资源池的相关操作,参见 删除资源池。
进行租户缩容前,建议进行一轮转储以便释放租户正在使用的内存。
手动触发转储的相关操作,参见 手动触发转储。
注意事项
在调大资源规格时,无论是通过修改资源配置还是切换资源配置,调整后的资源总量都必须满足以下要求:
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:表示日志盘总的容量。
日志盘总容量由集群级别的配置项 log_disk_size 和 log_disk_percentage 共同控制。其中,log_disk_size 用于设置 Redo 日志磁盘的大小,默认值为 0; log_disk_percentage 用于设置 Redo 日志占用其所在磁盘总空间的百分比,默认值为 0。两个配置项的使用规则如下:
如果 log_disk_size 的值为 0,log_disk_percentage 的值不为 0,则系统以 log_disk_percentage 配置项设置的值分配日志盘空间。
如果 log_disk_size 的值不为 0,则无论 log_disk_percentage 的值是否为 0,系统均以 log_disk_size 配置项设置的值分配日志盘空间。
如果 log_disk_size 和 log_disk_percentage 的值均为 0,则系统会根据日志和数据是否共用同一磁盘来自动计算 Redo 日志占用其所在磁盘总空间的百分比:
共用时,Redo 日志占用其所在磁盘总空间的百分比为 30%。
独占时,Redo 日志占用其所在磁盘总空间的百分比为 90%。
有关配置项 log_disk_size 的更多说明信息,请参见 log_disk_size。
有关配置项 log_disk_percentage 的更多说明信息,请参见 log_disk_percentage。
resource_hard_limit:是一个配置项的值。
在分配 Unit 时,系统会根据配置项 resource_hard_limit 的值来分配 CPU 资源。该配置项的默认值为 100,表示不允许超卖,取值范围为 [0, 10000]。
更多配置项 resource_hard_limit 的说明信息,参见 resource_hard_limit。
1.2.1.1.2. 调整资源规格
在通过调大和调小租户资源规格进行扩容和缩容时,有以下两种场景:
- 当前租户配置了独立的资源规格,可以直接修改租户的资源规格。
- 多个租户使用了相同的资源规格,需要切换租户的资源规格。
1.2.1.1.3. 获取租户所使用的资源规格 ID
确认租户是否使用了独立的资源规格,可以执行以下语句,获取待操作的租户所使用的资源规格 ID:
1.使用 root 用户登录集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
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 |
| midas0_3790 | 1008 |
| midas0_3790 | 1008 |
| midas0_3790 | 1007 |
| mq_t1 | 1006 |
| oracle_tenant1 | 1003 |
+----------------+----------------+
6 rows in set
根据查询结果,如果当前租户对应的 UNIT_CONFIG_ID 与其他租户相同,则表示有多个租户使用了相同的资源规格。
如果当前租户中对应的 UNIT_CONFIG_ID 与其他租户均不相同,则表示该租户使用了独立的资源规格,例如租户 mq_t1 所对应的 UNIT_CONFIG_ID 与其他租户的都不一样,所以租户 mq_t1 使用了独立的资源规格。
1.2.1.1.4. 租户配置了独立的资源规格的场景
如果待操作的租户配置了独立的资源规格,可以直接通过修改租户的 unit_config 来完成租户的扩容和缩容。
示例:
下面以调整租户 mq_t1 的资源规格,调大 CPU 资源为例进行说明。
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
2.进入 oceanbase 数据库。
obclient>USE oceanbase;
3.查询待操作租户所使用的 UNIT_CONFIG_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 |
| midas0_3790 | 1008 |
| midas0_3790 | 1008 |
| midas0_3790 | 1007 |
| mq_t1 | 1006 |
| oracle_tenant1 | 1003 |
+----------------+----------------+
6 rows in set
4.查询待操作租户的资源规格详情。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2022-11-03 17:13:29.021410 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set
5.调整资源规格。
调大 S2_unit_config 配置。
obclient> ALTER RESOURCE UNIT S2_unit_config MAX_CPU 5, MIN_CPU 5;
6.查询租户当前的资源规格,确认是否修改成功。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2023-01-12 10:28:57.606507 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set
根据查询结果,查看 MAX_CPU 与 MIN_CPU 已改成对应值,则表示执行成功。
1.2.1.1.5. 多个租户使用了相同的资源规格的场景
如果多个租户共用了同一个资源规格,则不能通过简单的调大和调小资源规格来实现租户的扩容和缩容。因为一旦修改,将导致使用相同资源规格的所有租户同时进行了扩容或缩容。
此场景下,需要先创建独立的资源规格后,再为租户切换资源规格。
同样以租户 mq_t1 为例,示例如何调整 CPU 资源。
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
2.进入oceanbase 数据库。
obclient>use oceanbase;
3.查询待操作租户所使用的 UNIT_CONFIG_ID 和 RESOURCE_POOL_NAME。
obclient> SELECT a.TENANT_NAME, b.NAME RESOURCE_POOL_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 | RESOURCE_POOL_NAME | UNIT_CONFIG_ID |
+----------------+---------------------+----------------+
| sys | sys_pool | 1 |
| midas0_3790 | midas0_3790_pool_z3 | 1008 |
| midas0_3790 | midas0_3790_pool_z2 | 1008 |
| midas0_3790 | midas0_3790_pool_z1 | 1007 |
| mq_t1 | mq_pool_01 | 1006 |
| oracle_tenant1 | oracle_pool_01 | 1003 |
+----------------+---------------------+----------------+
6 rows in set
4.查询待操作租户的资源规格详情。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2023-01-12 10:28:57.606507 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set
5.创建一个独立的新资源规格,新资源规格各项资源值为待修改的目标值。
创建比当前资源规格高的 new_S2_unit_config。
obclient> CREATE RESOURCE UNIT new_S2_unit_config MAX_CPU = 5, MIN_CPU = 5, MEMORY_SIZE = '12884901888',LOG_DISK_SIZE = '38654705664',MAX_IOPS = 30000, MIN_IOPS = 30000, IOPS_WEIGHT=3;
6.调整待操作租户的资源池使用新资源规格。
obclient> ALTER RESOURCE POOL mq_pool_01 unit='new_S2_unit_config';
7.查询租户当前的资源规格,确认是否修改成功。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | new_S2_unit_config | 2022-12-03 17:13:29.021410 | 2022-12-03 17:13:29.021410 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set
1.2.1.2. 查询资源上限值(水平扩缩容)
租户扩容和缩容本质上是提高和降低租户的服务能力,包括计算能力和存储容量。可以通过提高单节点的服务能力达成,也可以通过增加服务节点达成。本文介绍如何通过修改 Unit Number,从而增加或减少服务节点,达到租户总服务能力的提升或降低,实现租户的扩容或缩容。
调整租户的 Unit 个数及业务流量在 Unit 上的分布对应着 OceanBase 独特的水平扩缩容方式。具体来说,通过增加 Unit Number 和增加 Primary Zone,从而增加服务节点,达到租户总服务能力的提升。
Unit Number 个数增加:表示该租户在所分布 Zone 的 Unit 个数增加,从而可以使用更多的存储资源和计算资源。
修改 Unit Number 包括调大或调小 Unit Number。从 V4.0.0 版本开始,OceanBase 数据库要求租户内每个 Zone 的 Unit 个数必须保持一致。为了方便统一管理各个 Zone 的 Unit,系统引入了 Unit Group 机制,即不同 Zone 之间相同编号(UNIT_GROUP_ID)的 Unit 属于同一个 Unit Group。调大或调小 Unit Number 本质上是以 Unit Group 为单位创建和删除 Unit
详细的操作步骤,参见 通过调整 Unit Number 实现租户扩缩容。
Primary Zone 个数增加:表示该租户的 Leader 的 Zone 分布增加,而 Leader 承担了强一致读写流量,从而可以使用更多的计算资源。相比于垂直扩容,水平扩容增加了服务节点个数,需要认真设计业务数据在 Unit 间的分布,以避免分布式事务对性能的损耗。如果预计业务量会突破单机容量上限,需要提前做好数据分片的设计,数据分片需要尽量避免分布式事务。
详细的操作步骤,参见 通过调整 Primary Zone 实现租户扩缩容。
1.2.1.2.1. 前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
- 设置租户内的负载均衡策略
租户内的负载均衡策略由租户级配置项 enable_rebalance 和 enable_transfer 共同控制。
配置项 enable_rebalance 在系统租户下用于控制是否进行租户间的负载均衡;在用户租户下用于控制是否进行租户内均衡。默认值为 true,设置后不需要重启 OBServer 节点,立即生效。
配置项 enable_transfer 用于控制是否开启租户下的 Transfer 功能,默认值为 true,设置后不需要重启 OBServer 节点,立即生效。其中: - 当配置项 enable_rebalance 的值为 false 时,无论配置项 enable_transfer 的值为 true 还是 false,系统均不会进行自动负载均衡。
- 当配置项 enable_rebalance 的值为 true 且 enable_transfer 的值为 true 时,表示在进行租户扩缩容操作时,系统会自动调整分区分布,实现负载均衡。
- 当配置项 enable_rebalance 的值为 true 且 enable_transfer 的值为 false 时,表示在进行租户扩缩容操作时,系统不能发起 Transfer 操作,只能通过日志流迁移实现有限的均衡。
具体设置方法如下:
系统租户设置指定租户的负载均衡策略
- 系统租户开启指定租户的租户内负载均衡和租户下的 Transfer 功能
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';
ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';
以上语句表示仅指定租户下的配置项 enable_rebalance 和 enable_transfer 的值为 true。
- 系统租户开启所有用户租户(不含 sys 租户和 Meta 租户)的租户内负载均衡和租户下的 Transfer 功能
ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;
ALTER SYSTEM SET enable_transfer = true TENANT = all_user;
或者
ALTER SYSTEM SET enable_rebalance = true TENANT = all;
ALTER SYSTEM SET enable_transfer = true TENANT = all;
以上语句表示所有用户租户下配置项 enable_rebalance 和 enable_transfer 的值为 true。
说明:
OceanBase 数据库从 V4.2.1 版本开始,TENANT = all_user 与 TENANT = all语义相同,在需要生效范围为所有用户租户时,推荐使用 TENANT = all_user,后续 TENANT = all 将废弃不再使用。
1.2.1.2.2. 调大 Unit Number
下面以调大租户 mysql001 的 Unit Number 为例来介绍操作方法。
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
2.进入 oceanbase 数据库。
use oceanbase;
3.查看租户 mysql001 信息,获取其 TENANT_ID。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:41:44.412137 | zone1;zone2,zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695637653853887075 | 1695637653853887075 | 1695637653853887075 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 1 | 4.2.1.0 | 1005 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+---------------------------- +----------+------------+-----------+
1 row in set
查询结果中,UNIT_NUM 的值为 1 表示租户的 Unit Number 数为 1。
4.查看租户 mysql001 所拥有的 Unit。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
查询结果如下:
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
3 rows in set
查询结果中,根据以下字段,找到对应的任务记录:
- START_TIME:任务的发起时间。
- SQL_TEXT:任务对应的 SQL 语句。
- EXTRA_INFO:变更前后的 Unit Number 数。
当对应变更记录中 JOB_STATUS 的值为 SUCCESS 时,表示调大 Unit Number 的任务执行成功。
有关视图 DBA_OB_TENANT_JOBS 的详细字段说明,请参见 DBA_OB_TENANT_JOBS。
7.查看租户 mysql001 修改后的 Unit。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
1.2.1.2.3. 调小 Unit Number
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.xxx.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
2.进入 oceanbase 数据库。
use oceanbase;
3.查看租户 mysql001 信息,获取其 TENANT_ID。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:41:44.412137 | zone1;zone2,zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695636323100528993 | 1695636323100528993 | 1695636323100528993 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1005 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
查询结果中,UNIT_NUM 的值为 2 表示租户的 Unit Number 数为 2。
4.查看租户 mysql001 所拥有的 Unit。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
查询结果如下:
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1016 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.569419 | 2023-09-25 18:01:30.069547 | zone1 | xxx.xx.xxx.194 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1018 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.573614 | 2023-09-25 18:01:30.070603 | zone2 | xxx.xx.xxx.192 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1020 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.579946 | 2023-09-25 18:01:30.070603 | zone3 | xxx.xx.xxx.204 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
6 rows in set
根据查询结果可知,租户 mysql001 的每个 Zone 均有 2 个 Unit。其中,UNIT_ID 为 1016、1018、1020 的 Unit 属于同一个 Unit Group,且其 UNIT_GROUP_ID 为 1006;UNIT_ID 为 1017、1019、1021 的 Unit 属于另一个 Unit Group,且其 UNIT_GROUP_ID 为 1007。
5.把租户 mysql001 的 UNIT_NUM 修改为 1。
通过随机删除 UNIT_GROUP 的方式来调小 UNIT_NUM 的数量。
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1;
该语句执行后,对于每个 Zone 上 2 个 Unit 的场景,系统会随机指定一个 Unit Group,并将该 Unit Group 上的数据重新分布到其他 Unit Group 上后,再删除该 Unit Group。
6.通过删除指定 UNIT_GROUP 的方式来调小 UNIT_NUM 的数量
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1 DELETE UNIT_GROUP =(1006);
该语句执行后,对于每个 Zone 上 2 个 Unit 的场景,系统会将指定 Unit Group 上的数据重新分布到其他 Unit Group 上后,再删除该 Unit Group。
7.查看调小 Unit Number 任务的执行状态。
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;
查询结果如下:
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
| JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT |
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
| 6 | ALTER_RESOURCE_TENANT_UNIT_NUM | SUCCESS | 0 | 100 | 2023-09-25 18:01:30.069506 | 2023-09-25 18:01:45.068740 | 1006 | ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2 | FROM: '1', TO: '2' | xxx.xx.xxx.196 | 2882 |
| 7 | ALTER_RESOURCE_TENANT_UNIT_NUM | SUCCESS | 0 | 100 | 2023-09-26 09:37:32.367076 | 2023-09-26 09:39:05.651200 | 1006 | ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1 | FROM: '2', TO: '1' | xxx.xx.xxx.196 | 2882 |
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
2 rows in set
查询结果中,根据以下字段,找到对应的任务记录:
START_TIME:任务的发起时间。
SQL_TEXT:任务对应的 SQL 语句。
EXTRA_INFO:变更前后的 Unit Number 数。
当对应任务记录中 JOB_STATUS 的值为 SUCCESS 时,表示调小 Unit Number 的任务执行成功。
有关视图 DBA_OB_TENANT_JOBS 的详细字段说明,请参见 DBA_OB_TENANT_JOBS。
查看租户 mysql001 修改后的 Unit。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
查询结果如下:
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-26 09:39:59.321198 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+----------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
3 rows in set
通过上述示例,将租户 mysql001 的 Unit Number 从 2 变更为 1。变更前租户在每个 Zone 的 Unit 个数为 2;变更后租户在每个 Zone 的 Unit 个数为 1,从而实现了租户缩容。
通过上述示例,将租户 mysql001 的 Unit Number 从 1 变更为 2。变更前租户在每个 Zone 的 Unit 个数为 1;变更后租户在每个 Zone 的 Unit 个数为 2,从而实现了租户扩容。
根据查询结果可知,租户 mysql001 的每个 Zone 均有 1 个 Unit,且这 3 个 Unit 属于同一个 Unit Group。
把租户 mysql001 的 UNIT_NUM 修改为 2。
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2;
查看调大 Unit Number 任务的执行状态。
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;
查询结果如下:
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
| JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT |
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
| 6 | ALTER_RESOURCE_TENANT_UNIT_NUM | SUCCESS | 0 | 100 | 2023-09-25 18:38:05.889876 | 2023-09-25 18:38:25.531461 | 1006 | ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2 | FROM: '1', TO: '2' | xxx.xx.xxx.196 | 2882 |
| 7 | ALTER_RESOURCE_TENANT_UNIT_NUM | SUCCESS | 0 | 100 | 2023-09-26 09:37:32.367076 | 2023-09-26 09:39:05.651200 | 1006 | ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1 | FROM: '2', TO: '1' | xxx.xx.xxx.196 | 2882 |
| 8 | ALTER_RESOURCE_TENANT_UNIT_NUM | SUCCESS | 0 | 100 | 2023-09-26 09:57:45.028091 | 2023-09-26 09:58:00.412204 | 1006 | ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2 | FROM: '1', TO: '2' | xxx.xx.xxx.196 | 2882 |
+--------+--------------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------------------------------------------+--------------------+----------------+-------------+
6 rows in set
1.2.1.3. 通过调整 Primary Zone 实现租户扩缩容(水平扩容)
本文介绍如何通过修改 Primary Zone,达到租户扩容的功能。
前提条件
调整 Primary Zone 前,需要设置租户内的负载均衡策略。租户内的负载均衡策略由租户级配置项 enable_rebalance 和 enable_transfer 共同控制。
配置项 enable_rebalance 在系统租户下用于控制是否进行租户间的负载均衡;在用户租户下用于控制是否进行租户内均衡。默认值为 true,设置后不需要重启 OBServer 节点,立即生效。
配置项 enable_transfer 用于控制是否开启租户下的 Transfer 功能,默认值为 true,设置后不需要重启 OBServer 节点,立即生效。配置项 enable_transfer 值的含义依赖配置项 enable_rebalance 的取值:
-
当配置项 enable_rebalance 的值为 false 时,无论配置项 enable_transfer 的值为 true 还是 false,系统均不会进行自动负载均衡。
-
当配置项 enable_rebalance 的值为 true 且 enable_transfer 的值为 true 时,表示在进行租户扩缩容操作时,系统会自动调整分区分布,实现负载均衡。
-
当配置项 enable_rebalance 的值为 true 且 enable_transfer 的值为 false 时,表示在进行租户扩缩容操作时,系统不能发起 Transfer 操作,只能通过日志流迁移实现有限的均衡。
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';
1.2.1.3.1. 增加 Primary Zone
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
进入 oceanbase 数据库。
use oceanbase;
查询租户 mysql001 的基本信息,例如 locality、primary zone 等属性。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_id = 1006;
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:07:31.606415 | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695633705492686782 | 1695633705492686782 | 1695633705492686782 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1002 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
查询租户 mysql001 的 Unit 信息,在单个 Zone 的 unit num 为 2。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE tenant_id = 1006;
查询结果如下:
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1016 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.569419 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.194 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1018 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.573614 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.192 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1020 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.579946 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.204 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
6 rows in set
修改租户 mysql001 的 PRIMARY_ZONE 属性,从 1 调整为 2。
ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2;zone3';
查看增加 Primary Zone 任务的执行状态。
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND tenant_id = 1006;
查询结果如下:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
| JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT |
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
| 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2023-09-25 17:26:00.069089 | 2023-09-25 17:26:20.919021 | 1006 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2;zone3' | zone1;zone2;zone3 | xxx.xx.xxx.196 | 2882 |
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
1 row in set
查询结果中,根据以下字段,找到对应的任务记录:
START_TIME:任务的发起时间。
SQL_TEXT:任务对应的 SQL 语句。
EXTRA_INFO:变更前后的 Primary Zone 信息。
当对应任务记录中 JOB_STATUS 的值为 SUCCESS 时,表示增加 Primary Zone 的任务执行成功。
有关视图 DBA_OB_TENANT_JOBS 的详细字段说明,请参见 DBA_OB_TENANT_JOBS。
查询租户 mysql001 的基本信息,确认 PRIMARY_ZONE 属性修改成功,第一优先级由 zone1 变更为 zone1,zone2。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_id = 1006;
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:26:00.072130 | zone1,zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695634420875364980 | 1695634420875364980 | 1695634420875364980 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1004 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
查询租户 mysql001 的 Unit 信息,变更前后 unit num 保持不变。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE tenant_id = 1006;
查询结果如下:
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1016 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.569419 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.194 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1018 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.573614 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.192 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1020 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.579946 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.204 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
6 rows in set
1.2.1.3.2. 减少 Primary Zone
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
进入 oceanbase 数据库。
use oceanbase;
查询租户 mysql001 的基本信息,例如 locality、primary zone 等属性。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_id = 1006;
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:26:00.072130 | zone1,zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695634420875364980 | 1695634420875364980 | 1695634420875364980 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1004 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
查询租户 mysql001 的 Unit 信息,在单个 Zone 的 unit num 为 2。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE tenant_id = 1006;
查询结果如下:
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1016 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.569419 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.194 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1018 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.573614 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.192 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1020 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.579946 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.204 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
6 rows in set
修改租户 mysql001 的 PRIMARY_ZONE 属性,第一优先级 Zone 的个数从 2 调整为 1。
ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2,zone3';
查看减少 Primary Zone 任务的执行状态。
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND tenant_id = 1006;
查询结果如下:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
| JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT |
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
| 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2023-09-25 17:26:00.069089 | 2023-09-25 17:26:20.919021 | 1006 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2;zone3' | zone1;zone2;zone3 | xxx.xx.xxx.196 | 2882 |
| 5 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2023-09-25 17:41:44.412459 | 2023-09-25 17:41:54.965873 | 1006 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2,zone3' | zone1,zone2;zone3 | xxx.xx.xxx.196 | 2882 |
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------------+-------------------+----------------+-------------+
2 rows in set
查询结果中,根据以下字段,找到对应的任务记录:
START_TIME:任务的发起时间。
SQL_TEXT:任务对应的 SQL 语句。
EXTRA_INFO:变更前后的 Primary Zone 信息。
当对应任务记录中 JOB_STATUS 的值为 SUCCESS 时,表示减少 Primary Zone 的任务执行成功。
有关视图 DBA_OB_TENANT_JOBS 的详细字段说明,请参见 DBA_OB_TENANT_JOBS。
查询租户 mysql001 的基本信息,确认 PRIMARY_ZONE 属性修改成功,由 zone1,zone2 变更为 zone1。
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_id = 1006;
查询结果如下:
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:41:44.412137 | zone1;zone2,zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695634988660461888 | 1695634988660461888 | 1695634988660461888 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1004 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
再次查询租户 mysql001 的 Unit 信息,变更前后 unit num 保持不变。
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE tenant_id = 1006;
查询结果如下:
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| UNIT_ID | TENANT_ID | STATUS | RESOURCE_POOL_ID | UNIT_GROUP_ID | CREATE_TIME | MODIFY_TIME | ZONE | SVR_IP | SVR_PORT | MIGRATE_FROM_SVR_IP | MIGRATE_FROM_SVR_PORT | MANUAL_MIGRATE | UNIT_CONFIG_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
| 1016 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.569419 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.194 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1017 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.571540 | 2023-09-25 17:06:51.030929 | zone1 | xxx.xx.xxx.198 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1018 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.573614 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.192 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1019 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.575723 | 2023-09-25 17:06:51.030929 | zone2 | xxx.xx.xxx.196 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1020 | 1006 | ACTIVE | 1003 | 1006 | 2023-09-25 17:06:38.579946 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.204 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
| 1021 | 1006 | ACTIVE | 1003 | 1007 | 2023-09-25 17:06:38.581002 | 2023-09-25 17:06:51.031986 | zone3 | xxx.xx.xxx.197 | 2882 | NULL | NULL | NULL | 1002 | 1 | 1 | 5368709120 | 16106127360 | 9223372036854775807 | 9223372036854775807 | 1 |
+---------+-----------+--------+------------------+---------------+----------------------------+----------------------------+-------+----------------+----------+---------------------+-----------------------+----------------+----------------+---------+---------+-------------+---------------+---------------------+---------------------+-------------+
6 rows in set
通过上述示例,将租户 mysql001 的 Primary Zone 的 Zone 个数从 2 变更为 1。变更前租户在每个 Zone 的 Unit 个数为 2;变更后租户在每个 Zone 的 Unit 个数保持不变,但 Primary Zone 个数从 2 变更为 1,从而实现了租户缩容。```
1.3. 创建租户
1.3.1. 创建说明
OceanBase 数据库仅支持创建用户租户,系统租户由集群创建时自动创建。
创建用户租户是一系列操作的组合,首先创建资源规格,然后基于该资源规格创建资源池,最后创建租户并指定其资源池。
所以创建租户的顺序为:资源规格 -> 资源池 -> 租户。
1.创建资源规格:创建资源规格仅仅是规格定义,不实际分配资源,可以通过 DBA_OB_UNIT_CONFIGS 视图查看所有资源规格。资源规格可以复用,可以建议根据业务场景抽象若干不同规格,例如小规格、中规格、大规格等,从而降低运维复杂度。但在租户资源不足需要应急扩容时,不能直接调整原规格,需要新建资源规格,或者直接更换更大一级的资源规格。
select * from DBA_OB_UNIT_CONFIGS;
2.创建资源池:创建资源池时会实际创建 Unit,按照规格定义分配资源,如对应节点预留资源不够将会创建失败,通过 GV$OB_SERVERS 视图可以查看所有节点资源分配信息。如果创建成功可以通过 DBA_OB_RESOURCE_POOLS 视图和 DBA_OB_UNITS 视图查看资源池及其对应 Unit。资源池不能复用,成功创建租户后指定资源池将会分配给租户。
查看所有节点资源分配信息:
select * from GV$OB_SERVERS;
查看资源池及其对应 Unit:
select * from DBA_OB_RESOURCE_POOLS
select * from DBA_OB_UNITS
3.创建租户:创建租户时通过指定 RESOURCE_POOL_LIST 将资源池分配给租户,可以通过 DBA_OB_TENANTS 视图查看所有租户。可以每个 Zone 一个资源池,使用独立的资源规格。也可以所有 Zone 使用同一个资源池,从而所有 Zone 使用同一个资源规格。除了资源池列表,还有兼容模式、Primary Zone、Locality、连接白名单等其他重要属性和系统变量,其中资源池列表为创建租户时的必填项。新建租户 Root 用户密码为空,使用前请先设置密码。`
查看所有租户:
select * from DBA_OB_TENANTS
1.3.2. 创建步骤
1.3.2.1. 步骤一:创建资源规格
资源规格是对 CPU、内存、磁盘空间、IOPS 等资源项进行的定义。
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A
- 进入 oceanbase 数据库。
USE oceanbase;
- 通过 DBA_OB_UNIT_CONFIGS 视图,获取已有的资源规格信息。
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;
+----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1 | sys_unit_config | 2022-12-20 17:50:17.035504 | 2022-12-20 17:50:17.035504 | 1 | 1 | 14495514624 | 14495514624 | 10000 | 10000 | 1 |
| 1001 | config_mysql001_zone1_S1_okz | 2022-12-20 18:04:31.547715 | 2022-12-20 18:04:31.547715 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
| 1002 | config_mysql001_zone2_S1_pme | 2022-12-20 18:04:31.561335 | 2022-12-20 18:04:31.561335 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
| 1003 | config_mysql001_zone3_S1_jsu | 2022-12-20 18:04:31.564510 | 2022-12-20 18:04:31.564510 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
| 1013 | config_oracle001_zone3_S1_exu | 2022-12-26 18:28:37.969047 | 2022-12-26 18:28:37.969047 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
| 1014 | config_oracle001_zone2_S1_hli | 2022-12-26 18:28:37.972194 | 2022-12-26 18:28:37.972194 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
| 1015 | config_oracle001_zone1_S1_owy | 2022-12-26 18:28:37.976446 | 2022-12-26 18:28:37.976446 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 |
+----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
7 rows in set
- 通过 CREATE RESOURCE UNIT 语句,创建资源规格。
CREATE RESOURCE UNIT unit_name
MEMORY_SIZE [=] 'size_value',
MAX_CPU [=] cpu_num,
[LOG_DISK_SIZE [=] 'size_value',]
[MAX_IOPS [=] iops_num,]
[MIN_CPU [=] cpu_num,]
[MIN_IOPS [=] iops_num];
5.创建一个名称为 S1_unit_config 的资源规格,其资源配置为 CPU 为 1 核,内存 5G,日志盘空间 6G。
CREATE RESOURCE UNIT S1_unit_config
MEMORY_SIZE = '5G',
MAX_CPU = 1, MIN_CPU = 1,
LOG_DISK_SIZE = '6G',
MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;
- 查询 DBA_OB_UNIT_CONFIGS 视图,确认资源规格创建成功。
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config';
7.删除资源规格:
drop RESOURCE UNIT S1_unit_config
1.3.2.2. 步骤二:创建资源池
创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。
1.3.2.2.1. 前提条件
- 确认集群是否有足够的可用资源来创建资源池。详细操作,参见 查看租户和资源信息。
- 创建资源池时需要指定其资源规格。在执行创建资源池操作前,请确认是否有可用的资源规格。有关创建资源规格的详细操作,参见 创建资源规格。
操作步骤
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A
2.进入 oceanbase 数据库。
obclient [(none)]> USE oceanbase;
3.通过 DBA_OB_RESOURCE_POOLS 视图,获取资源池的配置信息。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;
+------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
| RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE |
+------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
| 1 | sys_pool | 1 | 2022-12-20 17:50:17.038641 | 2022-12-20 17:50:17.045453 | 1 | 1 | zone1;zone2;zone3 | FULL |
| 1001 | pool_mysql001_zone3_jsu | 1002 | 2022-12-20 18:04:31.607227 | 2022-12-20 18:04:31.692836 | 1 | 1003 | zone3 | FULL |
| 1002 | pool_mysql001_zone1_okz | 1002 | 2022-12-20 18:04:31.617087 | 2022-12-20 18:04:31.691827 | 1 | 1001 | zone1 | FULL |
| 1003 | pool_mysql001_zone2_pme | 1002 | 2022-12-20 18:04:31.621327 | 2022-12-20 18:04:31.692836 | 1 | 1002 | zone2 | FULL |
| 1013 | pool_oracle001_zone3_exu | 1010 | 2022-12-26 18:28:37.979539 | 2022-12-26 18:28:38.059505 | 1 | 1013 | zone3 | FULL |
| 1014 | pool_oracle001_zone1_owy | 1010 | 2022-12-26 18:28:37.988964 | 2022-12-26 18:28:38.058440 | 1 | 1015 | zone1 | FULL |
| 1015 | pool_oracle001_zone2_hli | 1010 | 2022-12-26 18:28:37.994241 | 2022-12-26 18:28:38.059505 | 1 | 1014 | zone2 | FULL |
+------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+
7 rows in set
DBA_OB_RESOURCE_POOLS 视图的详细说明,参见 DBA_OB_RESOURCE_POOLS。
4.通过 CREATE RESOURCE POOL 语句,创建资源池。
语法如下:
CREATE RESOURCE POOL poolname
UNIT [=] unitname,
UNIT_NUM [=] unitnum,
ZONE_LIST [=] ('zone' [, 'zone' ...]);
5.创建一个名为 mq_pool_01 的资源池,在 zone1、zone2 里各创建 1 个 Unit,每个 Unit 的资源规格为 S1_unit_config。
CREATE RESOURCE POOL mq_pool_01
UNIT='S1_unit_config',
UNIT_NUM=1,
ZONE_LIST=('zone1','zone2');
6.查询 DBA_OB_RESOURCE_POOLS 视图,确认资源池创建成功。
SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+
| RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+
| 1024 | mq_pool_01 | NULL | 2023-01-10 22:37:08.212366 | 2023-01-10 22:37:08.212366 | 1 | 1020 | zone1;zone2 | FULL |
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+
1 row in set
1.3.2.2.2. 修改资源池属性
修改资源池属性,即是调整资源池配置的 UNIT、UNIT_NUM、ZONE_LIST 等参数信息。本文介绍如何修改资源池属性。
资源池属性可以通过 ALTER RESOURCE POOL 语句进行修改。
修改租户资源池属性是实现租户扩容或缩容的另一种方式。例如,调大 UNIT_NUM 可以增加每个 Zone 中节点数量达到扩容的目的。
ALTER RESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone' [, 'zone' ...]);
pool_name:资源池名称。
UNIT:该资源池的资源规格。
UNIT_NUM:资源单元个数。增加 Unit 数量时,UNIT_NUM 的值不能大于每个 Zone 内 OBServer 的个数。
如果该资源池已经被租户使用,无法通过修改资源池属性的方式修改,需要通过 ALTER RESOURCE TENANT 语句进行修改。
ZONE_LIST:资源池的 Zone 分布。
ALTER RESOURCE POOL 语句的详细说明,参见 ALTER RESOURCE POOL。
ALTER RESOURCE TENANT 语句的详细说明,参见 ALTER RESOURCE TENANT。
资源池未被分配给租户
修改资源池 mq_pool_02 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。
ALTER RESOURCE POOL mq_pool_02 UNIT='S2_unit_config';
Query OK, 0 rows affected
ALTER RESOURCE POOL mq_pool_02 UNIT_NUM=3;
Query OK, 0 rows affected
ALTER RESOURCE POOL mq_pool_02 ZONE_LIST=('zone1','zone2','zone3');
Query OK, 0 rows affected
资源池已被分配给租户
租户资源池修改配置时,UNIT_NUM 需要通过 ALTER RESOURCE TENANT 语句进行修改。
修改资源池 mq_pool_02 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。
ALTER RESOURCE POOL mq_pool_02 UNIT='S2_unit_config';
Query OK, 0 rows affected
ALTER RESOURCE TENANT mq_t2 UNIT_NUM=3;
Query OK, 0 rows affected
ALTER RESOURCE POOL mq_pool_02 ZONE_LIST=('zone1','zone2','zone3');
Query OK, 0 rows affected
1.3.2.3. 步骤三:创建租户
资源池创建后,您可以根据业务需要,将资源池分配给租户。
1.3.2.3.1. 前提条件
确保已有可用的资源池。有关创建资源池和资源单元的详细操作,参见 创建资源池。
1.3.2.3.2. 注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,您需要指定租户的类型。租户创建后,租户类型无法修改,因此创建租户前请规划好您的租户类型。
1.3.2.3.3. 操作步骤
1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A
2.进入 oceanbase 数据库。
USE oceanbase;
3.通过 DBA_OB_TENANTS 视图,查看所有的租户信息。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS;
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| 1 | sys | SYS | 2023-05-17 18:10:19.940353 | 2023-05-17 18:10:19.940353 | RANDOM | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED |
| 1001 | META$1002 | META | 2023-05-17 18:15:21.455549 | 2023-05-17 18:15:36.639479 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED |
| 1002 | mysql001 | USER | 2023-05-17 18:15:21.461276 | 2023-05-17 18:15:36.669988 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684395321137516636 | 1684395321137516636 | 1684395321052204807 | 4611686018427387903 | NOARCHIVELOG | DISABLED |
| 1003 | META$1004 | META | 2023-05-17 18:18:19.927859 | 2023-05-17 18:18:36.443233 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED |
| 1004 | oracle001 | USER | 2023-05-17 18:18:19.928914 | 2023-05-17 18:18:36.471606 | zone1 | FULL{1}@zone1 | NULL | ORACLE | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684395321137558760 | 1684395321137558760 | 1684395320951813345 | 4611686018427387903 | NOARCHIVELOG | DISABLED |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
5 rows in set
4.DBA_OB_TENANTS 视图的详细说明,请参见 DBA_OB_TENANTS。
通过 CREATE TENANT 语句,创建租户。
语法如下:
CREATE TENANT [IF NOT EXISTS] tenant_name
PRIMARY_ZONE [=] zone,
RESOURCE_POOL_LIST [=](poolname [, poolname...])
[ENABLE_ARBITRATION_SERVICE = {true | false}]
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...
注意:
在指定 `PRIMARY_ZONE` 时,其值可以设置为 RANDOM(必须大写),表示随机选择最高优先级内的任意一个 Zone 作为 `Primary Zone`。
创建一个名为 mq_t1 的租户(默认为 MySQL 模式租户),副本数为 3,资源池指定为 mq_pool_01,Primary Zone 为 zone1,允许所有 IP 连接数据库。
租户的副本分布的 Zone List 继承于 resource_pool_list 的 zone_list 属性,租户的副本个数继承于 resource_pool_list 的 zone_list 属性的个数,租户在每个 Zone 的 Unit 个数继承于 resource_pool_list 的 unit_num 属性、租户的 Unit 的资源规格继承于 resource_pool_list 的 unit 属性。
CREATE TENANT IF NOT EXISTS mq_t1
PRIMARY_ZONE='zone1',
RESOURCE_POOL_LIST=('mq_pool_01')
set OB_TCP_INVITED_NODES='%';
创建一个名为 oracle_tenant1 的 Oracle 兼容模式租户,需要显式指定 ob_compatibility_mode='oracle'。
CREATE TENANT IF NOT EXISTS oracle_tenant1
PRIMARY_ZONE='zone1',
RESOURCE_POOL_LIST=('mq_pool_01')
SET OB_TCP_INVITED_NODES='%',
ob_compatibility_mode='oracle';
5.查询 DBA_OB_TENANTS 视图,确认租户创建成功。
SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| 1006 | mq_t1 | USER | 2023-05-18 15:48:57.447657 | 2023-05-18 15:49:12.857944 | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684396167132057328 | 1684396167132057328 | 1684396167051160964 | 4611686018427387903 | NOARCHIVELOG | DISABLED |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
1 row in set
- 租户创建成功后,可以尝试登录租户进行使用。
默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,您需要及时修改管理员用户的密码。
MySQL 兼容模式
登录 mq_t1 租户的 root 用户。
obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -A
执行以下语句修改 root 用户的密码。
obclient [(none)]> ALTER USER root IDENTIFIED BY '****';
Query OK, 0 rows affected
Oracle 兼容模式
登录 moracle_tenant1 租户的 sys 用户。
obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -A
执行以下语句修改 sys 用户的密码。
obclient [SYS]> ALTER USER sys IDENTIFIED BY ****;
Query OK, 0 rows affected
管理员用户密码修改成功后,重新登录租户。
MySQL 兼容模式
obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -A
Oracle 兼容模式
obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -p**** -A
1.3.2.3.4. 修改租户属性
OceanBase 数据库支持修改用户租户的属性,包括修改租户的副本数、Zone 列表、主 Zone 以及系统变量值等。本文介绍如何修改租户属性。
背景信息
租户属性修改的常见场景:
修改租户的 Primary Zone:Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量,即 Primary Zone 决定了 OceanBase 数据库的流量分布。通过修改 Primary Zone 属性可以切换业务流量,或者是从一个机房切换到另一个机房,或者是从一个城市切换到另一个城市,适用于容灾场景、扩缩容等场景。
修改租户的 Locality:Locality 描述了数据的多个副本的类型及分布策略。通过修改 Locality 属性可以调整租户的部署架构,适用于机房搬迁、调整容灾级别等场景。
通过 ALTER TENANT 语句,修改租户属性。
查看
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
ALTER TENANT {tenant_name | all }
[SET] [tenant_option_list] [opt_global_sys_vars_set]
tenant_option_list:
tenant_option [, tenant_option ...]
tenant_option:
COMMENT [=]'string'
|PRIMARY_ZONE [=] zone
|RESOURCE_POOL_LIST [=](poolname [, poolname...])
|DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
|LOCALITY [=] 'locality description';
opt_global_sys_vars_set:
VARIABLES system_var_name = expr [,system_var_name = expr] ...
修改租户 mq_t1 的 Primary Zone 为 "zone1,zone2",Locality 为 "F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3"。
obclient [oceanbase]> ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2';
Query OK, 0 rows affected
obclient [oceanbase]> ALTER TENANT mq_t1 LOCALITY="F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3";
Query OK, 0 rows affected
租户的资源池每次仅支持添加或删除一个资源池。不支持直接替换租户的资源池。租户原来使用的资源池为 mq_pool_01,通过以下命令直接将租户的资源池替换为 mq_pool_02 时,系统会报错。
obclient [oceanbase]> ALTER TENANT mq_t1 RESOURCE_POOL_LIST=('mq_pool_02');
ERROR 1210 (HY000): Incorrect arguments to resource pool list
1.3.2.3.5. 租户锁定和解锁
OceanBase 数据库支持对租户进行锁定。租户锁定后,不能在该租户上创建新的连接,已有连接保持不变。本文介绍如何进行租户锁定和解锁。
背景信息
通过 ALTER TENANT 语句对租户锁定和解锁。适用于故障应急场景和运维变更场景:
- 故障应急:租户出现异常正在修复中,为了避免业务流量对修复进程产生影响,可以锁定租户。需要在征得业务方同意的情况下进行操作。应急场景下锁定租户,锁定后需要主动 kill session。
- 运维变更:例如租户需要下线,下线流程需要保证可灰度、可回滚等原则,可以把锁定租户作为流程之一以观察对业务系
注意:
锁定和解锁务必配对使用,忘记解锁会导致无法建立新连接。
1.3.2.3.5.1. 租户锁定
1.以查看租户 mq_t1 的锁定状态为例:
SELECT TENANT_ID,TENANT_NAME,LOCKED FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
2.通过 ALTER TENANT 语句,锁定租户。
ALTER TENANT mq_t1 LOCK;
Query OK, 0 rows affected
1.3.2.3.5.2. 租户解锁
查看锁定状态
SELECT TENANT_ID,TENANT_NAME,LOCKED FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
通过 ALTER TENANT 语句,解锁租户
ALTER TENANT mq_t1 UNLOCK;
Query OK, 0 rows affected
1.3.2.3.6. 克隆租户
通过克隆租户操作,您可以基于一个指定的租户克隆出一个新租户。克隆出来的新租户的 Unit 数量,以及 Unit 在各个 OBServer 节点上的分布,均与源租户保持一致。
1.3.2.3.6.1. 使用限制
不允许对备租户执行克隆租户的操作。
不允许在 Switchover 过程中执行克隆租户的操作。
有关 Switchover 的相关操作,请参见 Switchover。
不允许在增加 LS、删除 LS 或 LS 属性变化的过程中执行克隆租户的操作。
不允许在 Transfer 过程中执行克隆租户的操作。
不允许在 Unit 迁移过程中执行克隆租户的操作。
在通过减少资源池中的 UNIT_NUM 个数来对租户进行缩容时,不允许执行克隆租户的操作。
当源租户中有 Unit 所在的 OBServer 节点不可用时,不支持执行租户克隆的操作。
不允许在日志流副本有容灾任务时执行克隆租户的操作。
确认当前租户的日志流副本是否有容灾任务的方法如下:
系统租户通过指定当前租户的 tenant_id 查询 CDB_OB_LS_REPLICA_TASKS 视图,如果查询结果为非空,则表示该租户有容灾任务正在执行。
用户租户通过查询 DBA_OB_LS_REPLICA_TASKS,如果查询结果为非空,则表示该租户有容灾任务正在执行。
不允许在升级过程中执行克隆租户的操作。
不允许对 OceanBase 数据库 V4.3.0 之前版本的租户执行克隆租户的操作。
1.3.2.3.6.2. 注意事项
克隆出来的新租户与源租户之间存在严格的数据隔离和资源隔离。新租户的任何数据改动,均不会影响到源租户,同时源租户的任何数据改动也不会影响到新租户;新租户与源租户之间不会相互抢占 CPU、内存等资源。
对于源租户与克隆出来的新租户,在初始状态下使用的是共享物理宏块,后续随着源租户与新租户各自的数据写入,两个租户的共享宏块逐渐减少,独占宏块逐渐增多,存储空间的占用也会逐步增加,需要及时关注 OBServer 节点上存储空间的占用情况。
租户克隆任务执行过程中,不能进行以下操作:
对源租户执行 Switchover 操作
通过修改源租户的 UNIT_NUM 个数或 Primary Zone 第一优先级进行租户扩缩容操作
对源租户执行增加副本、减少副本、调整副本分布等操作
对源租户手动执行 Transfer 操作
对源租户手动执行 Unit 迁移操作
对源租户执行升级操作
如果必须执行上述操作,您可以取消克隆任务后再执行,取消克隆任务的详细操作,请参见 取消租户克隆。
1.3.2.3.6.3. 前提条件
租户克隆功能依赖于租户的日志归档功能,在执行租户克隆操作前,请确保源租户已开启日志归档模式,并且在租户克隆过程中,源租户不能关闭日志归档模式。为源租户设置归档目的端并开启日志归档模式的详细操作,请参见 日志归档前准备 和 开启归档模式。
注意:
为租户开启归档模式后,如果希望立即执行克隆租户的操作,则需要执行 ALTER SYSTEM MINOR FREEZE TENANT = tenant_name; 语句对该租户发起一轮转储。有关手动触发转储的详细操作,请参见 手动触发转储。
CREATE TENANT new_tenant_name FROM source_tenant_name
WITH
RESOURCE_POOL [=] resource_pool_name,
UNIT [=] unit_config;
eg:
基于租户 mysql 克隆出一个新租户 clone_tnt 的示例如下:
CREATE TENANT clone_tnt FROM mysql
WITH
RESOURCE_POOL = clone_tnt_pool,
UNIT= S1_unit_config;
本示例中,克隆出来的新租户的资源池为 clone_tnt_pool,Unit 规格为 S1_unit_config。克隆出来的租户的 Unit 数量及 Unit 在各个 OBServer 节点上的分布,均与源租户保持一致。
克隆任务执行过程中,您可以通过视图查看克隆任务的状态。
查看正在执行的克隆任务
SELECT * FROM oceanbase.DBA_OB_CLONE_PROGRESS\G
查看克隆任务历史
SELECT * FROM oceanbase.DBA_OB_CLONE_HISTORY\G
执行以下语句,取消正在进行的租户克隆任务。
ALTER SYSTEM CANCEL CLONE new_tenant_name;
后续处理
租户克隆任务执行完成后,克隆出来的新租户为备租户。您可以将该新租户继续作为备租户提供相关服务,也可以将新租户转为主租户提供服务。将备租户转为主租户的详细操作,请参见 备租户转为主租户。
使用 root 用户登录集群的 sys 租户。
执行以下语句,进行备切主操作。
ALTER SYSTEM ACTIVATE STANDBY TENANT tenant_name;
该命令每次只能切换一个租户,如果需要切换多个租户,需要重复执行该命令。
MySQL 模式的管理员用户为 root 用户,Oracle 模式的管理员用户为 SYS 用户。
用户租户将备租户转为主租户
执行以下语句,进行备切主操作。
ALTER SYSTEM ACTIVATE STANDBY;
对于部署了仲裁服务的场景,默认情况下,克隆出来的租户未开启仲裁服务。如果需要开启仲裁服务,您可以在克隆完成后,为克隆出来的新租户开启仲裁服务,详细操作请参见 为租户开启仲裁服务。
克隆任务执行过程中,您可以通过视图查看克隆任务的状态。
1.3.2.3.7. 删除租户
OceanBase 数据库支持通过 DROP TENANT 语句删除租户。
删除租户后,租户下的数据库和表也同时被删除。但是租户使用的资源池不会被删除。资源池可以继续给其他租户使用。
-
当系统租户开启回收站功能时,DROP TENANT 操作表示删除的租户会进入回收站。对于回收站中的租户,后续系统租户可以通过租户级回收站功能进一步删除或恢复该租户,回收站相关操作参见 回收站概述。
-
当系统租户关闭回收站功能时,DROP TENANT 操作会直接删除租户,租户下的数据库和表也同时被删除。
通过 DBA_OB_TENANTS 视图,查看租户信息。根据租户的 ID、创建时间、资源分配等基本信息,确认是需要执行删除的租户。
以查询租户 mq_t1 的信息为例:
SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
| 1036 | mq_t1 | USER | 2023-05-18 15:48:57.447657 | 2023-05-18 15:49:12.857944 | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684396167132057328 | 1684396167132057328 | 1684396167051160964 | 4611686018427387903 | NOARCHIVELOG | DISABLED |
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+
1 row in set
(可选)为防止恶意或误操作导致的数据不可恢复性丢失,OceanBase 数据库提供了租户级的回收站功能,从而支持租户级的数据的快速恢复功能。回收站默认开启,在系统租户下使用 SHOW RECYCLEBIN 语句,可以查看当前系统租户 RECYCLEBIN 中的回收站对象。示例如下:
SHOW RECYCLEBIN;
通过 DROP TENANT 语句,删除租户。
obclient> DROP TENANT mq_t1;
1.3.2.3.8. 恢复租户
为防止恶意或误操作导致的数据不可恢复性丢失,OceanBase 数据库提供了回收站功能,从而支持租户级的数据的快速恢复功能。本文介绍如何恢复回收站中的租户。
OceanBase 数据库可以通过 FLASHBACK TENANT 语句恢复回收站中的租户。
1.3.2.3.8.1. 使用限制
由于当前仅 sys 租户可以删除租户,故 MySQL 模式和 Oracle 模式的租户被删除后,只能进入 sys 租户的回收站中。也只有 sys 租户可以执行恢复租户的操作。
1.3.2.3.8.2. 操作步骤
查看和删除租户
SHOW RECYCLEBIN;
FLASHBACK TENANT mq_t1 TO BEFORE DROP;
1.3.2.3.9. 重命名租户
创建租户后,sys 租户可以更改普通租户的名称。
当前,OceanBase 数据库仅支持修改普通租户的名称。
1.3.2.3.9.1. 操作步骤
重命名普通租户。
语句如下:
ALTER TENANT old_tenant_name RENAME GLOBAL_NAME TO new_tenant_name;
eg:
obclient> ALTER TENANT tenant1 RENAME GLOBAL_NAME TO tenant2;
1.4. 常用查询:
1.4.1. 通过 GV$OB_SERVERS 视图查询资源上限值。
select * from GV$OB_SERVERS
查询集群中所有租户的资源分配情况。
1.4.2. 通过 GV$OB_UNITS 视图查询集群中所有租户的资源分配情况。
select * from GV$OB_UNITS
1.4.3. 调整资源规格。
1.4.3.1. 租户配置了独立的资源规格的场景
如果待操作的租户配置了独立的资源规格,可以直接通过修改租户的 unit_config 来完成租户的扩容和缩容。
##查询待操作租户所使用的 UNIT_CONFIG_ID。
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;
##查询待操作租户的资源规格详情。
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
##调整资源规格。
ALTER RESOURCE UNIT S2_unit_config MAX_CPU 5, MIN_CPU 5;
##查询租户当前的资源规格,确认是否修改成功。
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
1.4.3.2. 多个租户使用了相同的资源规格的场景
如果多个租户共用了同一个资源规格,则不能通过简单的调大和调小资源规格来实现租户的扩容和缩容。因为一旦修改,将导致使用相同资源规格的所有租户同时进行了扩容或缩容。
此场景下,需要先创建独立的资源规格后,再为租户切换资源规格。
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A
进入oceanbase 数据库。
obclient>use oceanbase;
查询待操作租户所使用的 UNIT_CONFIG_ID 和 RESOURCE_POOL_NAME。
obclient> SELECT a.TENANT_NAME, b.NAME RESOURCE_POOL_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 | RESOURCE_POOL_NAME | UNIT_CONFIG_ID |
+----------------+---------------------+----------------+
| sys | sys_pool | 1 |
| midas0_3790 | midas0_3790_pool_z3 | 1008 |
| midas0_3790 | midas0_3790_pool_z2 | 1008 |
| midas0_3790 | midas0_3790_pool_z1 | 1007 |
| mq_t1 | mq_pool_01 | 1006 |
| oracle_tenant1 | oracle_pool_01 | 1003 |
+----------------+---------------------+----------------+
6 rows in set
查询待操作租户的资源规格详情。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2023-01-12 10:28:57.606507 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set
创建一个独立的新资源规格,新资源规格各项资源值为待修改的目标值。
创建比当前资源规格高的 new_S2_unit_config。
obclient> CREATE RESOURCE UNIT new_S2_unit_config MAX_CPU = 5, MIN_CPU = 5, MEMORY_SIZE = '12884901888',LOG_DISK_SIZE = '38654705664',MAX_IOPS = 30000, MIN_IOPS = 30000, IOPS_WEIGHT=3;
调整待操作租户的资源池使用新资源规格。
obclient> ALTER RESOURCE POOL mq_pool_01 unit='new_S2_unit_config';
查询租户当前的资源规格,确认是否修改成功。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006';
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
| 1006 | new_S2_unit_config | 2022-12-03 17:13:29.021410 | 2022-12-03 17:13:29.021410 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 |
+----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+
1 row in set


浙公网安备 33010602011771号