草庐IT

OB运维 | tenant--删除租户的流程设计

ActionTech 2023-04-15 原文

作者:姚嵩

不知道是地球人还是外星人,知道的可以留言告诉小编…

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景:

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 ; -- 直接删除租户

有关OB运维 | tenant--删除租户的流程设计的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  4. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  7. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  8. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  9. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  10. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

随机推荐