OB運維 | tenant--刪除租戶的流程設計

運維實踐派發表於2023-03-24

作者:姚嵩

不知道是地球人還是外星人,知道的可以留言告訴小編...

本文來源:原創投稿

*愛可生開源社群出品,原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。


背景:

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 ; -- 直接刪除租戶

本文關鍵字#刪除租戶# #tenant#

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027825/viewspace-2941361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章