14.租户克隆(4.3版本新特性)

克隆租户

通过克隆租户操作,您可以基于一个指定的租户克隆出一个新租户。克隆出来的新租户的 Unit 数量,以及 Unit 在各个 OBServer 节点上的分布,均与源租户保持一致。

使用限制

  • 不允许在 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 之前版本的租户执行克隆租户的操作。

注意事项

  • 克隆出来的新租户与源租户之间存在严格的数据隔离和资源隔离。新租户的任何数据改动,均不会影响到源租户,同时源租户的任何数据改动也不会影响到新租户;新租户与源租户之间不会相互抢占 CPU、内存等资源。

  • 对于源租户与克隆出来的新租户,在初始状态下使用的是共享物理宏块,后续随着源租户与新租户各自的数据写入,两个租户的共享宏块逐渐减少,独占宏块逐渐增多,存储空间的占用也会逐步增加,需要及时关注 OBServer 节点上存储空间的占用情况。

  • 租户克隆任务执行过程中,不能进行以下操作:

    • 对源租户执行 Switchover 操作
    • 通过修改源租户的 UNIT_NUM 个数或 Primary Zone 第一优先级进行租户扩缩容操作
    • 对源租户执行增加副本、减少副本、调整副本分布等操作
    • 对源租户手动执行 Transfer 操作
    • 对源租户手动执行 Unit 迁移操作
    • 对源租户执行升级操作

如果必须执行上述操作,您可以取消克隆任务后再执行,取消克隆任务的详细操作,参见 取消租户克隆。

前提条件

租户克隆功能依赖于租户的日志归档功能,在执行租户克隆操作前,需要确保源租户已开启日志归档模式,并且在租户克隆过程中,源租户不能关闭日志归档模式。为源租户设置归档目的端并开启日志归档模式的详细操作,参见 日志归档前准备 和 开启归档模式。

注意
为租户开启归档模式后,如果希望立即执行克隆租户的操作,则需要执行 ALTER SYSTEM MINOR FREEZE TENANT = tenant_name; 语句对该租户发起一轮转储。有关手动触发转储的详细操作,参见 手动触发转储。

背景信息

克隆租户功能适用于较多场景,部分场景如下:

  • 当需要对某个在线租户的数据进行数据分析,又担心数据分析语句会对在线数据的 TP 负载造成影响,您可以基于该租户克隆出一个新租户,在新租户上进行在线数据分析。
  • 当您需要发布自己的应用版本前,对于该应用所涉及到的业务租户,您可以将其克隆出一个当前时间点的小规格租户;如果新发布的应用版本存在问题,可以快速进行数据回滚。
  • 当您需要进行应用程序的版本测试验证时,可以基于在线租户快速克隆出一个测试租户,使用测试租户来进行应用的测试验证。
  • 当您需要对数据库执行 DDL 等相对高风险的操作时,您可以:
    -- 基于在线租户快速克隆出一个测试租户,在测试租户上运行一遍需要执行的 DDL 语句,验证运行结果。
    • 在执行 DDL 语句前,基于在线租户克隆出一个当前时间点的小规格租户,如果发现 DDL 语句的执行出现问题,可以快速进行数据回滚。

操作步骤

1.使用 root 用户登录到集群的 sys 租户。

obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A

2.执行以下语句,克隆租户。

CREATE TENANT new_tenant_name FROM source_tenant_name 
   WITH
   RESOURCE_POOL [=] resource_pool_name,
   UNIT [=] unit_config;

相关参数说明如下:

  • new_tenant_name:克隆出来的新租户名。每次仅支持克隆一个租户,如果需要克隆多个租户,需要待该克隆任务结束后再克隆新的租户。
  • source_tenant_name:源租户名。
  • resource_pool_name:指定克隆出来的新租户的资源池名称。在进行租户克隆时,系统将会根据源租户的资源分布,为新租户自动创建资源池。
  • unit_config:指定克隆出来的新租户的 Unit 规格。可以根据需要,填写系统中已存在的 Unit 规格,也可以创建新的 Unit 规格。有关查询系统中已存在的 Unit 的详细操作,参见 查看资源规格。

基于租户 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 节点上的分布,均与源租户保持一致。

3.克隆任务执行过程中,您可以通过视图查看克隆任务的状态。
查看正在执行的克隆任务

SELECT * FROM oceanbase.DBA_OB_CLONE_PROGRESS\G

查询结果如下:

*************************** 1. row ***************************
        CLONE_JOB_ID: 1702211800546509768
            TRACE_ID: YA4740B7C050F-00060C210F4A4848-0-0
    SOURCE_TENANT_ID: 1004
  SOURCE_TENANT_NAME: mysql
     CLONE_TENANT_ID: 1016
   CLONE_TENANT_NAME: clone_tnt
  TENANT_SNAPSHOT_ID: 1702211800802135214
TENANT_SNAPSHOT_NAME: _inner_snapshot$1702211800702058206
    RESOURCE_POOL_ID: 1008
  RESOURCE_POOL_NAME: clone_tnt_pool
    UNIT_CONFIG_NAME: S1_unit_config
         RESTORE_SCN: 1702211802014048020
              STATUS: CLONE_SYS_CREATE_TENANT
      CLONE_JOB_TYPE: FORK
    CLONE_START_TIME: 2023-12-10 20:36:40.551169
 CLONE_FINISHED_TIME: NULL
            RET_CODE: NULL
       ERROR_MESSAGE: NULL
1 row in set

查看克隆任务历史
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_CLONE_HISTORY\G

查询结果如下:

*************************** 1. row ***************************
        CLONE_JOB_ID: 1702211800546509768
            TRACE_ID: YA4740B7C050F-00060C210F4A4848-0-0
    SOURCE_TENANT_ID: 1004
  SOURCE_TENANT_NAME: mysql
     CLONE_TENANT_ID: 1016
   CLONE_TENANT_NAME: clone_tnt
  TENANT_SNAPSHOT_ID: 1702211800802135214
TENANT_SNAPSHOT_NAME: _inner_snapshot$1702211800702058206
    RESOURCE_POOL_ID: 1008
  RESOURCE_POOL_NAME: clone_tnt_pool
    UNIT_CONFIG_NAME: S1_unit_config
         RESTORE_SCN: 1702211802014048020
              STATUS: CLONE_SYS_SUCCESS
      CLONE_JOB_TYPE: FORK
    CLONE_START_TIME: 2023-12-10 20:36:40.551169
 CLONE_FINISHED_TIME: 2023-12-10 20:37:53.919247
            RET_CODE: 0
       ERROR_MESSAGE: NULL
1 row in set

后续处理

租户克隆任务执行完成后,克隆出来的新租户为备租户。用户可以将该新租户继续作为备租户提供相关服务,也可以将新租户转为主租户提供服务。将备租户转为主租户的详细操作,参见 备租户转为主租户。

对于部署了仲裁服务的场景,默认情况下,克隆出来的租户未开启仲裁服务。如果需要开启仲裁服务,可以在克隆完成后,为克隆出来的新租户开启仲裁服务,详细操作参见 为租户开启仲裁服务。

取消租户克隆

租户克隆任务执行过程中,您可以取消正在执行的租户克隆任务。取消后,对应的租户克隆任务的状态会切换为 CANCELED 状态,同时该克隆任务所申请的各类资源也会被系统自动释放。

注意事项

在取消租户克隆任务前,如果克隆出来的新租户已经完成了克隆操作并切换到了正常服务状态,则执行取消租户克隆语句时会报错。

操作步骤

1.使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A

2.执行以下语句,取消正在进行的租户克隆任务。
ALTER SYSTEM CANCEL CLONE new_tenant_name;

其中,new_tenant_name 为克隆出来的新租户名。

3.语句执行成功后,您可以通过视图查看克隆任务的历史。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_CLONE_HISTORY\G
查询结果的示例如下:

*************************** 1. row ***************************
        CLONE_JOB_ID: 1702212525544202404
            TRACE_ID: YA4740B7C050F-00060C210F4A4859-0-0
    SOURCE_TENANT_ID: 1004
  SOURCE_TENANT_NAME: mysql
     CLONE_TENANT_ID: 0
   CLONE_TENANT_NAME: clone_tnt
  TENANT_SNAPSHOT_ID: 1702212525756306747
TENANT_SNAPSHOT_NAME: _inner_snapshot$1702212525656187169
    RESOURCE_POOL_ID: 1009
  RESOURCE_POOL_NAME: clone_tnt_pool
    UNIT_CONFIG_NAME: S1_unit_config
         RESTORE_SCN: 18446744073709551615
              STATUS: CLONE_SYS_CANCELED
      CLONE_JOB_TYPE: FORK
    CLONE_START_TIME: 2023-12-10 20:48:45.544031
 CLONE_FINISHED_TIME: 2023-12-10 20:48:51.070501
            RET_CODE: -4072
       ERROR_MESSAGE: clone job has been canceled
1 row in set
根据查询结果可知,该克隆任务对应的任务状态已切换为 CLONE_SYS_CANCELED 状态。

备租户转为主租户

恢复成功后, 恢复后的租户均为备租户,您可以通过 ACTIVATE STANDBY 命令将备租户转换为主租户。

背景信息

物理恢复流程与物理备库统一,物理恢复后的租户为备租户,后续该租户可作为备租户提供相关服务,也可转为主租户提供服务。

前提条件

请确认恢复操作已成功,查看恢复结果的相关操作请参见 查看恢复结果。

使用限制

快速恢复不支持此功能。

系统租户将备租户转为主租户

系统租户可以将系统内的备租户转为主租户。

  1. 使用 root 用户登录集群的 sys 租户。
  2. 执行以下语句,进行备切主操作。
    语句如下:
ALTER SYSTEM ACTIVATE STANDBY TENANT tenant_name;

说明
该命令每次只能切换一个租户,如果需要切换多个租户,需要重复执行该命令。

示例如下:

obclient [(none)]> ALTER SYSTEM ACTIVATE STANDBY TENANT mysql;
命令中各参数的说明请参见 物理恢复相关参数介绍。

用户租户将备租户转为主租户

用户租户可以将本租户从备租户转为主租户。
用户租户的租户管理员登录数据库。
说明
MySQL 模式的管理员用户为 root 用户,Oracle 模式的管理员用户为 SYS 用户。
执行以下语句,进行备切主操作。
语句如下:

obclient [(none)]> ALTER SYSTEM ACTIVATE STANDBY;

为租户开启仲裁服务

功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持仲裁服务功能。

您可以在创建租户时即为租户开启仲裁服务,创建租户并开启仲裁服务的相关操作请参见 创建租户。如果未开启仲裁服务,也可以待租户创建成功后,为租户开启仲裁服务。本节主要介绍如何为已有租户开启仲裁服务。

posted @ 2026-05-11 14:44  数据库小白(专注)  阅读(16)  评论(0)    收藏  举报