乐趣区

关于oceanbase:OB运维-tenant删除租户的流程设计

作者:姚嵩

不晓得是地球人还是外星人,晓得的能够留言通知小编 …

本文起源:原创投稿

* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


背景:

ob 中的租户相当于咱们平时认知的数据库集群,对外提供数据库服务。

当须要删除 ob 中的租户时,会删除该租户下的所有对象,蕴含数据库、表等。

数据是⾮常重要的,为了防止意外状况,

此时,你可能须要设置多种策略,以便确认 & 解决⼀些异样场景:

1. 确认该租户删除后,业务是否会有异议;

2. 删除租户后,如果业务须要,也能够复原该租户;

环境阐明:

ob 版本:5.7.25-OceanBase-v3.2.3.2

租户类型:MySQL 租户

待删租户名:obcp_t1

删除租户的⼤概流程:

1. 确认租户以后是否正在被使⽤,如果租户以后正在被业务使⽤,则和业务沟通确认租户是否真的要删除;

2. 如果租户未被使⽤,锁定租户;

3. ⼲掉租户现有的闲暇连贯,防⽌现有连贯执⾏ SQL;

4. 租户锁定 N 天,期待业务反馈是否受影响,防止待删除的租户影响业务模块;

5. 业务反馈⽆影响后,删除租户。

操作步骤:

阐明:

下⾯的操作都是使⽤ sys 租户下的 root 账户操作;

倡议采⽤间接连贯 observer 的连贯⽅式,因为执⾏ kill 的操作须要直连 observer 执⾏
(kill 的 session_id 来源于 oceanbase.__all_virtual_processlist 表)。

— 设置⽤户变量存储租户名

set @tenant_name='obcp_t1';

— 确定租户以后是否正被使⽤

— 如果存在⾮ Sleep 状态的会话,须要确认是否正在执⾏ SQL,如果存在,须要和业务沟通租户是否正确

select user,tenant,host,db,command,svr_ip,user_client_ip,
  trans_id,thread_id,total_time,info
from oceanbase.__all_virtual_processlist
where tenant=@tenant_name and command!='Sleep'
order by total_time desc ;

— 如果租户以后⽆业务执⾏,锁定租户

— 锁定租户后,就不能在该租户上创立新的连贯,已有连贯放弃不变

alter tenant obcp_t1 lock ; -- 锁定是幂等操作,能够反复执⾏ 
select tenant_name,locked from __all_tenant ; -- 1 示意锁定,0 示意未锁定 

— ⽣成 kill 租户会话的语句

select concat('kill',id,';') from oceanbase.__all_virtual_processlist
where tenant=@tenant_name;

— (直连 observer) 执⾏上⼀个步骤⽣成的 kill 语句,杀掉租户已有的连贯

kill xxx;
.....

— N 天后,业务反馈⽆影响,再持续租户删除步骤

— (MySQL 租户可选) 删除租户时,将租户放⼊回收站,能够复原回收站中的租户

set recyclebin=1; DROP TENANT obcp_t1 ;
show parameters like 'recyclebin_object_expire_time'; -- 查看⾃动清理回收站的工夫 

— 间接删除租户

drop tenant ${object_name} force ; -- 删除回收站中的租户,object_name 可由 show recyclebin 获取
drop tenant obcp_t1 force ; -- 间接删除租户 
退出移动版