首批通过分布式安全可靠测评,为关键业务系统打造
使用 obd 部署主备租户
更新时间:2026-04-14 17:55:42
本文分为三种场景介绍如何使用 obd 快速部署主备租户。
说明
obd 目前仅支持基于网络的主备租户部署,且仅支持为 MySQL 模式租户创建备租户。
概念介绍
物理备库是 OceanBase 数据库高可用解决方案的重要组成部分,可以为用户的关键应用提供高可用、数据保护、灾难恢复等重要特性。
物理备库作为 OceanBase 生产数据库的准实时热备份,当主库出现计划内或计划外(多数派副本故障)的不可用情况时,备库可以接管服务,并且提供无损切换(RPO = 0)和有损切换(RPO > 0)两种容灾能力,最大限度降低服务停机时间,减少可能带来的数据损失。详细介绍可参见官网《OceanBase 数据库》文档 管理数据库/高可用/物理备库容灾 章节内容。
前提条件
主租户和备租户所在集群均已创建,OceanBase 数据库所用版本相同且为 V4.2.0 及以上版本。
主租户需是用户租户,且具备全量的日志。
执行
SELECT LS_ID, BEGIN_LSN FROM oceanbase.GV$OB_LOG_STAT WHERE ROLE = 'LEADER' ;命令查看,BEGIN_LSN值为 0 表示当前日志流副本拥有自创建以来的完整日志。主租户所在集群需保证在运行状态。
可执行
obd cluster display命令查看集群状态。简单体验时主租户资源最少为 1C2GB 内存、4GB 日志磁盘,长期使用建议主租户资源为 1C4GB 内存及以上。
场景一:一主一备
一主一备的部署模式简单概括即为:存在 clusterA、clusterB 两个集群,并且 clusterA 集群中创建了用户租户 A_a(主租户),在 clusterB 集群中创建 A_a 租户的备租户(B_a),操作步骤如下。
执行如下命令为 A_a 租户创建备租户 B_a
obd cluster tenant create-standby clusterB clusterA A_a -t B_a --tenant-root-password=*****执行如下命令查看备租户的主备关系
obd cluster tenant show clusterB -g-g参数可以展示与集群相关的主备图形信息,输出如下所示:+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tenant base info | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY | | B_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | STANDBY | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant standby info | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp | err_code | error_comment | switchover_status | switchover_epoch | log_mode | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | B_a | NORMAL | NORMAL | 2023-09-14 08:58:44.173462 | 0 | | NORMAL | 0 | NOARCHIVELOG | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant`s primary info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby_tenant_name | primary_tenant_info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | B_a | IP_LIST=10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ query primary-standby relation ok primary-standby relation topology graph clusterA:A_a └── clusterB:B_a输出中
tenant_status和sync_status值均为NORMAL时即表示备租户创建成功,且日志传输正常。输出中各个模块内容介绍如下。tenant base info:该表展示集群中的租户信息。您需关注的有如下几项。
列名 说明 tenant_name 租户名称。 tenant_type 租户类型,分为 sys 租户(SYS)和用户租户(USER)。 compatibility_mode 租户的兼容模式,分为 MySQL 模式兼容和 Oracle 模式兼容,社区版仅支持 MySQL 模式兼容。 primary_zone 租户的主 Zone。 tenant_role 租户角色,有主租户(PRIMARY)和备租户(STANDBY)两种角色。 standby tenant standby info:该表展示集群中备租户的具体信息,您需关注如下几项。
列名 说明 standby_tenant_name 备租户的租户名称。 tenant_status 备租户的租户状态,该值为 NORMAL时表示备租户状态正常。sync_status 备租户的日志同步状态,该值为 NORMAL时表示日志同步状态正常。sync_scn_timestamp 日志同步位点。 err_code 日志同步错误代码。 error_comment 日志同步错误信息。 switchover_status 主备租户切换状态,该值为 NORMAL时表示主备租户切换状态正常。switchover_epoch 主备租户切换时间。 log_mode 日志类型,基于网络的主备租户日志类型均为 NOARCHIVELOG。standby tenant`s primary info:该表展示集群中备租户的主租户信息,您需关注如下几项。
列名 说明 standby_tenant_name 备租户的租户名,方便展示主租户信息归属于哪一个备租户。 primary_tenant_info 备租户所属的主租户信息,包括主租户所在集群的节点 IP、主租户的租户名、standburo 用户的密码、主租户 ID 和主租户所在集群 ID 等。
分别连接主备租户,修改主租户(A_a)中信息,查看备租户(B_a)中是否同步更新。
场景二:一主两备
一主两备的部署模式简单概括即为:存在 clusterA、clusterB、clusterC 三个集群,并且 clusterA 集群中创建了用户租户 A_a(主租户),需在 clusterB 和 clusterC 集群中创建 A_a 租户的备租户(B_a 和 C_a),操作步骤如下所示。
执行如下命令为 A_a 租户创建备租户 B_a
obd cluster tenant create-standby clusterB clusterA A_a -t B_a --tenant-root-password=*****重复执行创建命令为 A_a 租户创建备租户 C_a
obd cluster tenant create-standby clusterC clusterA A_a -t C_a --tenant-root-password=*****执行如下命令查看备租户的主备关系,此处以查看 clusterB 集群为例
obd cluster tenant show clusterB -g-g参数可以展示与集群相关的主备图形信息,输出如下所示:+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tenant base info | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY | | B_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | STANDBY | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant standby info | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp | err_code | error_comment | switchover_status | switchover_epoch | log_mode | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | B_a | NORMAL | NORMAL | 2023-09-14 09:12:13.819821 | 0 | | NORMAL | 0 | NOARCHIVELOG | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant`s primary info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby_tenant_name | primary_tenant_info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | B_a | IP_LIST=10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ query primary-standby relation ok primary-standby relation topology graph clusterA:A_a ├── clusterB:B_a └── clusterC:C_a输出中
tenant_status和sync_status值均为NORMAL时即表示备租户创建成功,且日志传输正常。输出中各个模块内容介绍可参见上文 场景一:一主一备。分别连接主备租户,修改主租户(A_a)中信息,查看备租户(B_a、C_a)中是否同步更新。
场景三:级联主备
级联备租户的部署模式简单概况即为:存在 clusterA、clusterB、clusterC 三个集群,并且 clusterA 集群中创建了用户租户 A_a(主租户),先在 clusterB 集群中创建 A_a 租户的备租户(B_a),之后在 clusterC 集群中创建 B_a 租户的备租户(C_a),操作步骤如下所示。
执行如下命令为 A_a 租户创建备租户 B_a
obd cluster tenant create-standby clusterB clusterA A_a -t B_a --tenant-root-password=*****执行如下命令查看 B_a 租户是否创建完成
obd cluster tenant show clusterB -g输出中 tenant_status 和 sync_status 值均为 NORMAL 时即表示备租户创建成功,且日志传输正常。输出中各个模块内容介绍可参见上文 场景一:一主一备。
-g参数可以展示与集群相关的主备图形信息,输出如下所示:+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tenant base info | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY | | B_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | STANDBY | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant standby info | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp | err_code | error_comment | switchover_status | switchover_epoch | log_mode | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | B_a | NORMAL | NORMAL | 2023-09-14 08:58:44.173462 | 0 | | NORMAL | 0 | NOARCHIVELOG | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant`s primary info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby_tenant_name | primary_tenant_info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | B_a | IP_LIST=10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ query primary-standby relation ok primary-standby relation topology graph clusterA:A_a └── clusterB:B_a重复执行创建命令为 B_a 租户创建备租户 C_a
说明
建议等 B_a 租户完成同步后再创建 C_a 租户。
obd cluster tenant create-standby clusterC clusterB B_a -t C_a --tenant-root-password=*****执行如下命令查看备租户的主备关系,此处以查看 clusterB 集群为例
obd cluster tenant show clusterB -g-g参数可以展示与集群相关的主备图形信息,输出如下所示:+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tenant base info | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ | sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY | | B_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | STANDBY | +-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+ +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant standby info | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp | err_code | error_comment | switchover_status | switchover_epoch | log_mode | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ | B_a | NORMAL | NORMAL | 2023-09-14 09:24:48.737141 | 0 | | NORMAL | 0 | NOARCHIVELOG | +---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+ +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby tenant`s primary info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | standby_tenant_name | primary_tenant_info | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | B_a | IP_LIST=10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881,USER=standbyro@A_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694680744,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false | +---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ query primary-standby relation ok primary-standby relation topology graph clusterA:A_a └── clusterB:B_a └── clusterC:C_a分别连接主备租户,修改主租户(A_a)中信息,查看备租户(B_a)以及备租户的备租户(C_a)中是否同步更新。
常见问题
创建备租户时报错 primary cluster have not full log xxx
可能原因:主租户不具备全量的日志。
基于网络的主备同步依赖主租户具备全量的日志,所以执行备租户创建命令时,obd 会先检查主租户日志流的 BEGIN_LSN 值是否为 0,BEGIN_LSN 值为 0 表示当前日志流副本拥有自创建以来完整的日志;当 BEGIN_LSN 值不为 0 时,obd 无法创建基于网络同步的备租户。
解决办法:您可登录主租户执行如下命令查询主租户的日志流 BEGIN_LSN 值是否为 0。
SELECT LS_ID, BEGIN_LSN FROM oceanbase.GV$OB_LOG_STAT WHERE ROLE = 'LEADER' ;
若主租户的日志流 BEGIN_LSN 值不为 0,表明主租户不具备全量的日志,您无法使用 obd 为该主租户创建备租户,您可参见 OceanBase 数据库文档 创建备租户 一章通过 SQL 命令为该主租户创建备租户。