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 多租户资源架构的核心组件及其关系:
2.6 资源池与租户绑定关系
下图展示了资源池、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 即可实现租户资源扩容,整个过程无需重启租户。