作者:姚嵩,外星人,舍利小王子。
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文约 1200 字,预计阅读需要 5 分钟。
1. 背景
使用 OBD[1] 删除备租户时,实际会删除主租户保留备租户,和预期严重不符。
-
OBD 版本:3.6.0
约定
下述的所有集群名称,指的都是 obd 安装时,指定的 deploy_name。
{xxx} 表示 xxx 是需要填写的变量 。
2. 环境准备
准备一组主备租户。
-
功能:展示指定集群中指定租户的信息。 -
语法: obd cluster tenant show {集群名} -t {租户名} -g -
参数: -t指定租户名,-g表示展示主备拓扑图。
# obd cluster tenant show my_ob_master -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant basic 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 |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql | USER | MYSQL | RANDOM | 2.0 | 2.0 | 2G | 10000 | 10000 | 4G | 2 | PRIMARY |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
query primary-standby relation ok
primary-standby relation topology graph
my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql
-
主租户所在 OB 集群: my_ob_master:tnt_mysql -
备租户所在 OB 集群: my_ob1:tnt_mysql
3. 测试过程
3.1 查看主备租户状态(从备租户上查看)
# obd cluster tenant show my_ob1 -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant basic 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 |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql | USER | MYSQL | RANDOM | 2.0 | 2.0 | 2G | 10000 | 10000 | 4G | 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 |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
| tnt_mysql | NORMAL | NORMAL | 2025-11-16 22:30:14.391364 | 0 | | NORMAL | 0 | NOARCHIVELOG |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby tenant`s primary info |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby_tenant_name | primary_tenant_info |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| tnt_mysql | IP_LIST=10.186.65.16:2881,USER=standbyro@tnt_mysql,PASSWORD=SRN2nfroeZ,TENANT_ID=1002,CLUSTER_ID=1762844529,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
query primary-standby relation ok
primary-standby relation topology graph
my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql
如结果所述,在备租户的 standby tenant standby info 信息中:
-
tenant_status为 NORMAL 表示备租户状态正常; -
sync_status为 NORMAL 表示同步状态正常; -
sync_scn_timestamp显示的同步时间为当前时间,几乎无延迟;
3.2 查看主备租户状态(从主租户上查看)
# obd cluster tenant show my_ob_master -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant basic 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 |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql | USER | MYSQL | RANDOM | 2.0 | 2.0 | 2G | 10000 | 10000 | 4G | 2 | PRIMARY |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
query primary-standby relation ok
primary-standby relation topology graph
my_ob_master:tnt_mysql
└── my_ob1:tnt_mysql
3.3 删除备租户
-
功能:删除指定集群中的指定租户 -
语法: obd cluster tenant drop {集群名} -t {租户名} -
参数: -t指定待删除的租户名
# obd cluster tenant drop my_ob1 -t tnt_mysql
Get local repositories ok
Open ssh connection ok
Connect to observer 10.186.65.22:2881 ok
Get deployment connections ok
Get standbys info ok
Drop tenant tnt_mysql ok
Trace ID: cc90eeba-c2f8-11f0-9a4c-02000aba4116
If you want to view detailed obd logs, please run: obd display-trace cc90eeba-c2f8-11f0-9a4c-02000aba4116
3.4 查看主备租户状态(从备租户上看)
# obd cluster tenant show my_ob1 -t tnt_mysql -g
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant basic 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 |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+----------+----------+---------------+-------------+-------------+
| tnt_mysql | USER | MYSQL | RANDOM | 2.0 | 2.0 | 2G | 10000 | 10000 | 4G | 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 |
+---------------------+---------------+------------------+----------------------------+----------+---------------------------------------------------+-------------------+------------------+--------------+
| tnt_mysql | NORMAL | SOURCE HAS A GAP | 2025-11-16 22:30:32.923425 | -4233 | There is a gap between the log source and standby | NORMAL | 0 | NOARCHIVELOG |
+---------------------+---------------+------------------+----------------------------+----------+---------------------------------------------------+-------------------+------------------+--------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby tenant`s primary info |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby_tenant_name | primary_tenant_info |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| tnt_mysql | IP_LIST=10.186.65.16:2881,USER=standbyro@tnt_mysql,PASSWORD=SRN2nfroeZ,TENANT_ID=1002,CLUSTER_ID=1762844529,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
query primary-standby relation ok
如结果所述,tenant basic info 信息中,备租户 tnt_mysql 的信息依然存在,表示备租户依然存在,并未被删除。
在备租户的 standby tenant standby info 信息中:
-
tenant_status为 NORMAL 表示备租户状态正常; -
sync_status为SOURCE HAS A GAP表示主租户上缺失了备租户所需的日志;
3.5 查看主备租户状态(从主租户上看)
# obd cluster tenant show my_ob_master -t tnt_mysql -g
[ERROR] tnt_mysql not exists in my_ob_master
如结果所述,主租户被删除了。
4. 当前该如何安全的删除备租户?
4.1 为备租户解藕主备关系
主备关系解除后,备租户会成为一个独立的主租户
-
功能:为备租户解藕主备关系,让备租户成为一个独立的主租户 -
语法: obd cluster tenant decouple {备租户所在集群名称} {备租户名称} -p {备租户的 root 用户密码} -
参数: -p指定待提升的备租户的 root 用户密码
# obd cluster tenant decouple my_ob1 tnt_mysql -p aaAA11__
4.2 为备租户解藕主备关系后,再删除原备租户
# obd cluster tenant drop my_ob1 -t tnt_mysql
5. 补充情况
当主租户被意外删除,但还留存备租户的情况下,我们可以考虑 failover:
-
功能:将备租户通过 failover 提升为主 -
语法: obd cluster tenant failover {备租户所在集群名称} {备租户名称} -p {备租户的root用户密码} -
参数: -p指定待提升的备租户的root用户密码
# obd cluster tenant failover my_ob1 tnt_mysql -p aaAA11
总结
-
OBD 3.6.0 版本在指定删除备租户时,会删除主租户,保留备租户,不符合预期; -
如果想删除备租户,保留主租户,可以先在备租户上解藕主备关系,再删除原备租户; -
若意外删除了主租户,留存了备租户,可以先尝试找回主租户(例如回收站),若找不回主租户,可以尝试 failover,将原备租户提升为新的主租户,再按需补齐丢失的数据。
OceanBase 安装部署工具 OBD: https://www.oceanbase.com/docs/common-obd-cn-1000000003892223
本文关键字:#OceanBase #OBD
✨ Github:https://github.com/actiontech/sqle
📚 文档:https://actiontech.github.io/sqle-docs/
💻 官网:https://opensource.actionsky.com/sqle/
👥 微信群:请添加小助手加入 ActionOpenSource
🔗 商业支持:https://www.actionsky.com/sqle

