ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

每天10分钟学会OceanBase系列(Day 16):租户管理与资源隔离,给不同业务穿上”隔离衣”

2026/8/2 16:12:31 拓冰建站 浏览量
每天10分钟学会OceanBase系列(Day 16):租户管理与资源隔离,给不同业务穿上”隔离衣”
1. 引言

嗨,各位OceanBase探索者!昨天我们聊了高可用演练,有同学问:“要是同时宕两个节点会怎样?”好问题!不过今天我们先放一放极端场景,来聊聊生产环境中最让人头疼的日常:资源抢占。

想象一下,你和几个朋友合租一套公寓,如果水电表是共用的,遇到个天天在家开暖气、洗长澡的室友,你是不是得跟着遭殃?数据库也一样!如果报表查询和核心交易混在一起,一个写得不好的慢查询就能把整个集群的CPU吃满,导致核心业务直接“断网”。今天,我们就来学学OceanBase的多租户架构,看看怎么给不同业务穿上“隔离衣”!

2.核心概念:什么是租户?

在OceanBase里,租户(Tenant)就像是一台“虚拟数据库”。虽然底层的物理机器是大家共用的,但每个租户都拥有自己独立的内存、CPU配额和磁盘空间。

OceanBase支持两种模式的租户:MySQL模式Oracle模式。这意味着你可以用熟悉的MySQL客户端连进去,也可以用Oracle的语法,互不干扰。

它的资源隔离层级非常清晰,就像俄罗斯套娃:集群(Cluster)租户(Tenant)资源池(ResourcePool)资源单元(Unit)。 集群是物理底座,租户是逻辑隔离,资源池是资源的分配方案,而资源单元则是真正干活的“小房间”(包含具体的CPU和内存大小)。

3.10分钟实操:创建与管理租户

光说不练假把式,让我们打开终端,用SQL来实操一下!

-- 1. 查看当前集群中的所有租户
-- 看看你的集群里住了哪些“租客”
SELECTtenant_id, tenant_name, status, primary_zone
FROMoceanbase.DBA_OB_TENANTS;

-- 2. 创建一个MySQL模式的新租户
-- 指定租户名、副本数(3副本保平安)、字符集,以及绑定的资源池
CREATETENANT my_biz_tenant
CHARSET='utf8mb4'
PRIMARY_ZONE='zone1'
RESOURCE_POOL_LIST=('pool_my_biz')
SETob_tcp_invited_nodes='%';-- 允许所有IP连接,生产环境建议限制网段

-- 3. 查看租户的资源使用情况
-- 监控每个租户的CPU、内存和磁盘水位,防止“租客”偷偷搞破坏
SELECTtenant_name, cpu_assigned, memory_assigned, disk_assigned
FROMoceanbase.DBA_OB_TENANTS;

-- 4. 调整租户的资源规格(扩缩容)
-- 业务增长太快?没关系,给租户“升个舱”
ALTERTENANT my_biz_tenant RESOURCE_POOL_LIST=('pool_my_biz_larger');

-- 5. 删除租户
-- 业务下线了,记得清理“空房间”释放资源
DROPTENANT my_biz_tenantFORCE;-- FORCE表示强制删除,跳过回收站

4.资源隔离实战:让报表和交易各跑各的

场景痛点:公司的核心交易(OLTP)和数据分析报表(OLAP)跑在同一个集群里。一到月底,报表查询疯狂消耗CPU,导致用户下单卡顿。

解决方案:利用资源单元(Unit)和资源池(Resource Pool)进行物理级隔离。

-- 1. 为交易业务创建“VIP包厢”(高配资源单元)
CREATERESOURCEUNIT unit_transaction
MAX_CPU=4, MEMORY_SIZE='8G', MAX_IOPS=10000;

-- 2. 为报表业务创建“经济舱”(低配资源单元)
CREATERESOURCEUNIT unit_report
MAX_CPU=2, MEMORY_SIZE='4G', MAX_IOPS=5000;

-- 3. 创建资源池,将单元分配给对应的租户
CREATERESOURCEPOOL pool_transaction UNIT='unit_transaction', UNIT_NUM=3;
CREATERESOURCEPOOL pool_report UNIT='unit_report', UNIT_NUM=1;

-- 4. 将租户绑定到指定的资源池
-- 这样交易和报表就彻底分家了,报表再慢也拖不垮交易!
ALTERTENANT transaction_tenant RESOURCE_POOL_LIST=('pool_transaction');
ALTERTENANT report_tenant RESOURCE_POOL_LIST=('pool_report');

5.运维避坑指南⚠️

在生产环境玩多租户,这几条“保命法则”请牢记:

  1. 租户数量不宜过多:虽然OceanBase支持多租户,但并不是越多越好。过多的租户会增加元数据的管理复杂度,建议根据业务线合理划分,而不是每个小应用建一个租户。
  2. 资源规格要预留余量:给租户分配资源时,千万别把集群资源100%分完。一定要留点“缓冲垫”,应对突发的流量洪峰。
  3. 定期清理无用租户:测试完的租户、下线的业务,记得及时DROP掉,别让僵尸租户白白占用资源配额。
  4. 监控租户级别的资源使用率:不要只看集群整体监控,一定要配置租户级别的告警。哪个租户CPU飙高了,第一时间定位到它!

6.今日小结

今天我们从“合租公寓”的比喻出发,深入了解了OceanBase的多租户架构资源隔离机制。通过创建资源单元和资源池,我们成功地把交易和报表分家,让核心业务不再受慢查询的连累。

用一句话概括今天的核心:租户管理就是“分房间、配资源、定规矩”。掌握了这个,你就拿到了OceanBase生产环境运维的VIP门票!

7.课后思考

今天我们学会了给租户分配资源,但如果某个租户“太贪心”,把分配给它的磁盘空间用到了95%,OceanBase会自动做什么来保护整个集群和其他租户呢?