2. OceanBase 多租户架构基础:租户概念、资源池、Unit 规格、资源隔离机制

2.1 租户(Tenant)—— 逻辑数据库实例

在 OceanBase 中,租户是一个逻辑上的数据库实例,类似于传统数据库中的“实例”或“Schema 集合”。每个租户拥有独立的系统变量、用户权限、数据字典和会话管理。从应用视角看,连接到一个租户就像连接到一个独立的数据库服务。

  • 系统租户(sys):集群创建时自动生成,用于管理集群元数据和所有用户租户的生命周期。
  • 用户租户:由系统租户创建,承载业务数据。用户租户又分为 MySQL 兼容模式 和 Oracle 兼容模式。
  • 每个租户独占一个 16 位整数 ID,在集群内唯一标识。
关键理解:租户是资源分配和隔离的基本单位。Catalog 租户配额变更审批流的核心操作对象就是“用户租户”的资源上限。

2.2 资源池(Resource Pool)—— 资源分配容器

资源池是 OceanBase 实现多租户资源分配的核心抽象。一个资源池由一组 Unit 组成,这些 Unit 分布在集群的多个 OBServer 节点上。资源池与租户绑定,决定了该租户能使用的总计算和存储资源。

属性 说明 示例值
ZONE_LIST 资源池覆盖的 Zone 列表 'zone1','zone2','zone3'
UNIT_NUM 每个 Zone 内分配的 Unit 数量 1(三副本场景通常为 1)
UNIT_CONFIG 每个 Unit 的规格名称(引用 Unit Config) 'S1'
资源池与租户的关系:一个租户可以绑定多个资源池(例如按 Zone 拆分),但一个资源池只能绑定一个租户。资源池的扩容/缩容直接影响租户的可用资源上限。

2.3 Unit 规格(Unit Config)—— 资源量化模板

Unit Config 定义了单个 Unit 的资源配额,是资源池的最小组成单元。OceanBase 通过 Unit Config 将 CPU、内存、磁盘空间等资源量化。

参数 含义 单位
MAX_CPU Unit 可使用的最大 CPU 核数 核
MIN_CPU Unit 保证的最小 CPU 核数 核
MEMORY_SIZE Unit 可使用的最大内存 GB
LOG_DISK_SIZE Unit 可使用的日志盘空间 GB
DATA_DISK_SIZE Unit 可使用的数据盘空间 GB
-- 创建 Unit Config 示例
CREATE RESOURCE UNIT S1
MAX_CPU 4,
MIN_CPU 2,
MEMORY_SIZE '16G',
LOG_DISK_SIZE '10G',
DATA_DISK_SIZE '100G';
注意:MIN_CPU 用于保证租户在资源竞争时的最低 CPU 份额,MAX_CPU 是硬上限。在配额变更审批流中,通常调整的是 MAX_CPU 和 MEMORY_SIZE。

2.4 资源隔离机制

OceanBase 通过两级隔离实现租户间的资源安全:

  • CPU 隔离:基于 cgroup 实现。每个租户的线程被绑定到独立的 cgroup 子系统中,按 MIN_CPU 权重分配时间片,MAX_CPU 限制峰值使用。
  • 内存隔离:每个租户的内存池独立管理,包括 MemStore、KVCache、SQL 执行内存等。内存使用超过 MEMORY_SIZE 时会触发写入限速或 OOM Killer。
  • IO 隔离:通过 IOPS 权重和带宽限制,确保日志写入和数据合并不受其他租户干扰。
  • 存储隔离:每个租户的数据文件(SSTable)和日志文件(Clog)在物理上按目录分离,共享同一块数据盘但配额独立。
联动场景:当容量告警触发时,运维人员需要判断是哪个租户的资源使用率过高,然后通过审批流调整该租户绑定的 Unit Config 规格,实现动态扩容。

2.5 多租户资源架构总览

下图展示了 OceanBase 多租户资源架构的核心组件及其关系:

OceanBase 多租户资源架构图 OceanBase 多租户资源架构 OceanBase 集群 Zone 1 OBServer 1 Unit: U1 (租户 A) Unit: U2 (租户 B) OBServer 2 Unit: U3 (租户 A) Unit: U4 (租户 B) Zone 2 OBServer 3 Unit: U5 (租户 A) Unit: U6 (租户 B) OBServer 4 Unit: U7 (租户 A) Unit: U8 (租户 B) Zone 3 OBServer 5 Unit: U9 (租户 A) Unit: U10 (租户 B) OBServer 6 Unit: U11 (租户 A) Unit: U12 (租户 B) 资源池 RP_A → 租户 A(Unit Config: S1) | 资源池 RP_B → 租户 B(Unit Config: S2)

2.6 资源池与租户绑定关系

下图展示了资源池、Unit Config 和租户之间的绑定逻辑:

资源池与租户绑定关系图 资源池 → 租户绑定关系 资源池 RP_A ZONE_LIST: z1,z2,z3 资源池 RP_B ZONE_LIST: z1,z2,z3 Unit Config S1 4C/16G/100G Unit Config S2 8C/32G/200G 租户 A ID: 1001 租户 B ID: 1002 资源池引用 Unit Config 定义资源规格,资源池绑定到租户后,租户获得对应 Unit 的资源配额 配额变更审批流本质是:修改 Unit Config → 资源池自动生效 → 租户资源上限更新

2.7 资源隔离机制对比

隔离维度 实现技术 隔离粒度 超限行为
CPU cgroup cpu.shares + cpu.cfs_quota_us 租户级别 超过 MAX_CPU 时线程被限流
内存 独立内存池 + MemStore 限速 租户级别 写入降速或触发 OOM
IO IOPS 权重 + 带宽上限 租户级别 IO 排队延迟增加
存储 独立数据目录 + 磁盘配额 Unit 级别 写入失败(空间不足)
运维启示:在 Catalog 租户配额变更审批流中,容量告警通常来自“内存使用率 > 85%”或“磁盘使用率 > 80%”。审批通过后,通过修改 Unit Config 的 MEMORY_SIZE 或 DATA_DISK_SIZE 即可实现租户资源扩容,整个过程无需重启租户。