本节主要介绍主备库配置场景下,租户管理相关的一些注意事项。

在 OceanBase 数据库中,系统租户可以对普通租户进行管理。主备集群之间的系统租户是相互独立的,不会物理同步数据,但是备集群会感知主集群普通租户的变化,保证同步所有普通租户的数据。备集群从主集群的系统租户逻辑同步的租户管理操作包括创建租户、删除租户和重命名租户。

备集群也支持独立进行部分的租户管理操作,当前支持在主备集群上独立运维的租户管理操作如下:

  • 管理租户的资源配置

  • 管理租户的资源池

  • 管理租户的 Locality 配置

  • 管理租户的 Primary Zone 配置

此外,主备库配置下,主备集群均不支持物理恢复租户。

备集群自动创建租户流程

在配置了备集群的情况下,在主集群上创建租户的流程不变,主要分为以下三个阶段:

  1. 准备租户资源配置(CREATE RESOURCE UNIT

  2. 创建租户资源池(CREATE RESOURCE POOL

  3. 执行创建租户的 DDL(CREATE TENANT

默认情况下,当主集群上创建一个租户后,备集群会感知到创建租户的 DDL,并自动执行创建租户的流程。备集群上创建租户的流程与主集群一致,但由于主备集群的硬件配置可能不一样,备集群会根据自身的配置来动态创建租户资源池。

下面结合具体示例来介绍备集群自动创建租户的流程。

假设备集群有 4 个 Zone,分别为 z1z2z3z4z1 有一台 OBServer,z2 有两台 OBServer,z3 有两台 OBServer,z4 为空。主集群创建了租户 tenant_test,租户 ID 为 1001

备集群上创建租户的流程如下:

  1. 准备租户资源配置,创建 Unit 配置。

    Unit 配置描述了每个 Unit 的资源规格,默认备集群与主集群一致。如果主集群使用了多个资源池,以主集群 Primary Zone 使用的资源池作为创建标准。

    您也可以定制备集群的 Unit 资源规格,当备集群上存在名为 standby_unit_config_template 的 Unit 配置时,系统会采用该模板定义的配置来创建 Unit 配置。

    备集群自动创建的 Unit 配置名称的格式为:前缀 __unit_config_,加上租户 ID。本示例中,主集群创建的租户 ID 为 1001,则备集群上会自动创建一个名为 __unit_config_1001 的 Unit 配置。

  2. 创建租户的资源池。

    资源池的创建需要三个参数:Unit 配置、Zone 列表以及每个 Zone 的 Unit 个数。

    其中:

    • Zone 列表决定了副本数的上限,备集群会选取有效的 Zone 放在 Zone 列表。

      有效的 Zone 指的是部署了 OBServer 的 Zone。本示例中,有效的 Zone 列表为 z1z2z3,由于 z4 没有部署 OBServer,故不属于有效的 Zone。

    • 备集群上每个 Zone 的 Unit 数默认与主集群保持一致,当备集群中每个 Zone 的机器数不足时,会以备集群实际的配置为准。

      本示例中,z1 的机器数最少,只有 1 台,因此每个 Zone 最多分配一个 Unit。如果主集群配置的 Unit 数为 2,超过了备集群可以承受的容量,则系统会以备集群实际的配置为准,仅为每个 Zone 配置一个 Unit;如果 z1 有两台可用的机器,则可以与主集群保持一致,为每个 Zone 配置两个 Unit。

    备集群自动创建的租户资源池名称的格式为:前缀 __resource_pool_,加上租户 ID。本示例中,备集群自动创建的租户资源池名称为 __resource_pool_1001

  3. 执行创建租户操作。

    备集群会定制 Locality 参数和 Primary Zone 参数,其他参数与主集群一致。

    其中:

    • Locality 决定了租户下所有分区的副本类型以及副本分布,备集群默认会创建 F 副本(全功能副本)和 E 副本(加密投票型副本),并且分布在资源池的所有 Zone下。

      本示例中,资源池的 Zone 列表为 z1,z2,z3,主集群的 Locality 为 FULL{1}@z1,FULL{1}@z2,FULL{1}@z3。假设 z3 是加密 Zone,则备集群的 Locality 为 FULL{1}@z1,FULL{1}@z2,ENCRYPTION_LOGONLY{1}@z3

    • Primary Zone 决定了 Leader 副本的分布,默认备集群与主集群一致。

      系统会校验备集群 Primary Zone 的合法性:

      • 当主集群的 Primary Zone 为 RANDOM 时,要求 Zone 列表中的所有 Zone 不能跨 Region;如果 Zone 列表中有 Zone 跨 Region,则备集群会自动选择其他合适的 Primary Zone。

      • 当主集群的 Primary Zone 为非 RANDOM 时,要求所有的 Zone 合法并且在 Zone 列表中。当可用的 Zone 的个数大于 1 时,要求备集群的 Primary Zone 所在的 Region 存在至少两个非加密类型的 Zone。

创建租户的注意事项

为了保证备集群上租户的正常创建,在主集群上创建租户前,需要注意以下事项:

  • 在主集群上创建租户 Unit 配置时,需要参考备集群的资源水位。

    默认备集群的 Unit 配置与主集群一致,如果备集群的可用资源不足,可能会导致后续在备集群上自动创建租户失败。建议主集群和备集群采用相同的租户资源配置,在主集群上创建 Unit 配置时应参考备集群的资源水位,保证备集群后续能成功创建资源池。

  • 如果主备需要采用不同的租户资源配置,可以在备集群上设置 Unit 配置模板。

    如果备集群的硬件资源配置确实比主集群低,并且希望主集群和备集群采用不同的租户资源配置,可以在备集群上提前创建 Unit 配置模板 standby_unit_config_template,或者修改模板定义,用于定制备集群上的租户资源配置。

    您可以在备集群上创建、删除和修改 Unit 配置模板 standby_unit_config_template

    创建、查看和删除 Unit 配置模板的示例如下:

    • 创建备集群的资源规格模板

      1. obclient> CREATE RESOURCE UNIT standby_unit_config_template
      2. MAX_CPU 1, MIN_CPU=1, MAX_MEMORY 1073741824, MIN_MEMORY=1073741824,
      3. MAX_IOPS 128, MAX_DISK_SIZE 536870912, MAX_SESSION_NUM 64, MIN_IOPS=128;
      4. Query OK, 0 rows affected
    • 查看资源规格模板配置

      1. obclient> SELECT NAME, MAX_CPU, MAX_MEMORY, MAX_DISK_SIZE
      2. FROM __ALL_UNIT_CONFIG
      3. WHERE NAME LIKE 'standby_unit_config_template';
      4. +------------------------------+---------+------------+---------------+
      5. | NAME | MAX_CPU | MAX_MEMORY | MAX_DISK_SIZE |
      6. +------------------------------+---------+------------+---------------+
      7. | standby_unit_config_template | 1 | 1073741824 | 536870912 |
      8. +------------------------------+---------+------------+---------------+
      9. 1 row in set
    • 修改资源规格模板

      1. obclient> ALTER RESOURCE UNIT standby_unit_config_template max_cpu = 2;
      2. Query OK, 0 rows affected (0.01 sec)
    • 删除资源规格模板

      1. obclient> DROP RESOURCE UNIT standby_unit_config_template;
      2. Query OK, 0 rows affected
  • 需要检查备集群的 Zone 配置。

    当备集群有多个 Zone 时,要求至少有两个非加密类型的 Zone 属于同一个 Region,确保备集群可以生成合理的 Primary Zone 配置,否则备集群自动创建租户会失败。

  • 主集群的租户创建成功后,需要监控备集群上的租户是否创建成功。

    备集群创建租户的过程中可能会卡住,最常见的原因是备集群资源不足,创建租户资源池失败,需要持续监控备集群的租户是否创建成功。

    具体操作操作如下:

    1. 在主集群上,查询 V$OB_STANDBY_STATUS 视图的 SYNCHRONIZATION_STATUS 列。

      如果显示 SYS SCHEMA NOT SYNC,则表示系统租户的 Schema 不同步,可能出现了备集群创建租户卡住的情况。

    2. 在备集群上,查看 V$OB_CLUSTER_STATS 视图,观察各个租户的 Schema 和用户数据的同步进度。

      其中,tenant_id1 表示系统租户,对比主集群和备集群的 REFRESHED_SCHEMA_VERSION,确认备集群系统租户的 DDL 的同步进度,如果落后于主集群,则说明可能出现了备集群同步创建租户的 DDL 卡住的情况。

    关于备集群创建租户时卡住问题的排查,请参见 备集群创建租户时卡住的问题

租户日常维护注意事项

  • 在主集群上调整租户的资源配置时,建议也手动调整备集群的租户资源配置。

    建议尽量保证主集群和备集群的资源配置相同。由于备集群不会自动同步租户资源配置修改操作,调整主集群的租户资源配置后,建议也手动调整备集群的租户资源配置。

  • 在主集群上调整数据的多版本保留时间,保证备集群在一段时间内能成功执行 Failover。

    例如,可以通过设置租户级系统变量 undo_retention 来调整多版本数据的保留时间,单位为秒,取值范围为 [0, 232)。更多系统变量 undo_retention 的信息,请参见 undo_retention

    示例如下:

    1. obclient> SET GLOBAL undo_retention = 1800;

    该示例表示,设置了多版本数据的保留时间为半小时后,备集群在落后主集群半小时内均可以成功执行 Failover。

  • 在主集群上调整租户级配置项时,需要手动修改备集群的配置项。

    由于租户级配置项不会自动同步到备集群,当主集群设置了租户级配置项后,建议也手动设置备集群的配置项。