首批通过分布式安全可靠测评,为关键业务系统打造
创建备租户前准备
更新时间:2026-04-10 11:58:00
创建租户前,需要选择备租户的源端,明确待创建的备租户个数,选择备租户的创建方式并进行备租户的资源准备。
选择备租户的源端
备租户既可以从主租户同步日志,也可以从另外一个备租户同步日志,从另一个备租户同步日志的部署架构,称为级联备库或级联备租户。
您可以根据业务实际情况来选择备租户的源端。
注意
- 选择好备租户的源端后,在创建备租户前,建议为该备租户对应的源端租户(主租户或另一个备租户)开启日志归档。这是因为,如果源端租户未开启日志归档,当备租户落后于源端租户而源端租户的日志又已经回收时,就会导致备租户的日志同步卡住。如果源端租户在创建备租户前已开启日志归档,则出现该情况时,备租户可以自动从源端租户的归档日志中补齐这部分数据。
- 为源端租户开启日志归档的详细操作,请参见 开启归档模式。
- 如果因未开启源端租户的日志归档,出现了备租户日志同步卡住的现象,请参考 物理备库同步过程中卡住 中的 问题三:备库日志同步状态异常 进行排查。
选择待创建的备租户个数
OceanBase 数据库当前版本对一个主租户(或备租户)可以同步的备租户的个数无限制。
对于基于日志归档的物理备库场景,由于日志的同步依赖存储介质,需要根据实际的业务需求情况,来确定创建多少个租户。
对于基于网络的物理备库场景,由于备租户在同步日志时,需要读取源端租户的日志,会消耗源端租户的 CPU、内存和 IO 资源,同时还会消耗备租户与源端租户之间的网络带宽资源。因此,在创建备租户时,需要结合源端租户的资源使用情况及实际的业务需求情况,来确定创建多少个备租户。
选择创建备租户的方式
OceanBase 数据库提供了三种方式创建备租户,您可以根据实际的业务场景,选择合适的方式创建备租户。
创建空备租户
若主租户为刚刚新创建的主租户,或者用户可以确认主租户所在集群或日志归档介质上保存有该主租户自创建后完整的日志,则其备租户在创建时不需要依赖除日志外的其他基线或转储数据。此时,可以通过
CREATE STANDBY TENANT语句创建备租户。检查主租户是否拥有完整日志的方法如下:
管理员用户登录主租户或主租户所在集群的
sys租户。执行以下命令,查看主租户上的日志流对比信息。
主租户所在集群的
sys租户查询主租户的日志流对比信息(SELECT LS_ID FROM oceanbase.CDB_OB_LS_HISTORY WHERE TENANT_ID = xxxx) EXCEPT (SELECT LS_ID FROM oceanbase.CDB_OB_LS WHERE TENANT_ID = xxxx);或者
(SELECT LS_ID FROM oceanbase.CDB_OB_LS_HISTORY WHERE TENANT_ID = xxxx) MINUS (SELECT LS_ID FROM oceanbase.CDB_OB_LS WHERE TENANT_ID = xxxx);其中,主租户的
TENANT_ID可通过DBA_OB_TENANTS视图获取。主租户查询本租户
MySQL 模式Oracle 模式(SELECT LS_ID FROM oceanbase.DBA_OB_LS_HISTORY) EXCEPT (SELECT LS_ID FROM oceanbase.DBA_OB_LS);或者
(SELECT LS_ID FROM oceanbase.DBA_OB_LS_HISTORY) MINUS (SELECT LS_ID FROM oceanbase.DBA_OB_LS);(SELECT LS_ID FROM SYS.DBA_OB_LS_HISTORY) MINUS (SELECT LS_ID FROM SYS.DBA_OB_LS);
其中,
DBA_OB_LS_HISTORY或CDB_OB_LS_HISTORY视图用于展示租户上曾经创建过的所有日志流;DBA_OB_LS或CDB_OB_LS视图用于展示租户上当前提供服务的日志流。两个SELECT查询语句的差值用于表示主租户上曾经创建过,但后续由于负载均衡或扩缩容等原因被删掉的日志流。若上述语句的返回结果不为空,则表明主租户上曾经有日志流创建后被删除,此时主租户上的日志不完整,不能使用
CREATE STANDBY TENANT语句创建备租户。若查询结果为空,则继续执行下一步的检查。执行以下命令,查看主租户上的日志流信息。
主租户所在集群的
sys租户查询主租户的日志流信息SELECT LS_ID, BEGIN_LSN FROM oceanbase.GV$OB_LOG_STAT WHERE TENANT_ID = xxxx AND ROLE = 'LEADER' ;其中,主租户的
TENANT_ID可通过DBA_OB_TENANTS视图获取。主租户查询本租户
MySQL 模式Oracle 模式SELECT LS_ID, BEGIN_LSN FROM oceanbase.GV$OB_LOG_STAT WHERE ROLE = 'LEADER' ;SELECT LS_ID, BEGIN_LSN FROM SYS.GV$OB_LOG_STAT WHERE ROLE = 'LEADER' ;
查询结果的示例如下:
+-------+-----------+ | LS_ID | BEGIN_LSN | +-------+-----------+ | 1 | 0 | | 1001 | 0 | +-------+-----------+ 2 rows in set其中,
BEGIN_LSN表示当前日志流副本保存的最早的日志 LSN(Log Sequence Number),如果BEGIN_LSN的值为0,则表示当前日志流副本拥有自创建以来完整的日志。根据查询结果,日志流副本所对应的
BEGIN_LSN的值为0,表示当前日志流副本拥有自创建以来完整的日志;如果该租户的所有日志流副本对应的BEGIN_LSN的值均为0,则表示该租户的所有日志流均拥有完整日志,可以通过CREATE STANDBY TENANT语句创建空备租户。
使用物理备份恢复(带日志)功能创建备租户
该方式为创建备租户的通用方式,任何场景下均适用。有关物理备份恢复的详细介绍及操作,请参见 物理备份恢复概述。
使用 BACKUP DATABASE PLUS ARCHIVELOG 功能创建备租户
由于使用常规的物理备份恢复(带日志)功能创建备租户时,要求使用共享存储(例如,OSS、NFS 等)来保存数据备份和日志归档,同时要求主租户和备租户所在的集群可以同时访问共享存储。这对于社区版用户或单机版用户很不友好,有较高的使用门槛。
基于上述原因,您可以使用 BACKUP DATABASE PLUS ARCHIVELOG 功能,将主租户的所有数据和归档日志在本机(对应主租户为单机的使用场景)或共享存储(对应社区版且主租户为集群的使用场景)上生成一份数据库的快照,该快照中包含了基线数据和数据库运行必需的归档日志,再将该快照上传到待创建的备租户所在集群可以访问的介质上,最后使用数据库快照恢复出一个备租户。
备租户的资源准备
创建备租户前,需要为备租户分配资源池,规划备租户所使用的 CPU、Memory、日志盘空间及 IOPS 等资源,并确定备租户的副本数、Primary Zone 以及 Locality 等信息。
备租户所使用的租户资源不要求和主租户完全一致。在使用上,建议结合业务的实际情况和主备租户所承载的业务压力,为备租户选择合适的资源规格。可以根据主租户以及待创建的备租户的 Unit 个数,通过以下命令,计算出备租户每个 Unit 所需的物理资源量。
假设主租户的 TENANT_ID 为 1002,备租户待创建的 Unit 个数为 2,使用主租户所在集群的 sys 租户登录集群后,计算备租户上每个 Unit 所需的物理资源量的语句如下:
obclient [oceanbase]> CALL DBMS_OB_LIMIT_CALCULATOR.CALCULATE_MIN_PHY_RES_NEEDED_BY_STANDBY_TENANT(PRIMARY_TENANT_ID => 1002, STANDBY_TENANT_UNIT_NUM => 2);
结果如下:
+------------------------+------------+
| PHYSICAL_RESOURCE_NAME | MIN_VALUE |
+------------------------+------------+
| memstore | 0 |
| memory | 4294967296 |
| data_disk | 0 |
| clog_disk | 2147483648 |
| cpu | 0 |
+------------------------+------------+
5 rows in set