对比Mysql理解OceanBase中的租户设计
1. OceanBase 中的“租户”是什么?
在 MySQL 中,默认的资源管理颗粒度是 数据库(Database) ,同一个 MySQL 实例里所有用户共享 CPU、内存等实例级资源。
而 OceanBase 是 分布式、多租户 架构的数据库,租户(tenant) 是它最顶层的逻辑隔离单元。
- 每个租户就像一个独立的 MySQL 实例(或 Oracle 实例)
- 租户之间数据、系统表、用户、资源(CPU、内存、存储空间、带宽)都是隔离的
- 一个 OceanBase 集群可以同时运行多个租户,租户之间互不影响
- 一个租户可以使用 MySQL 模式 或 Oracle 模式
可以理解为:
“在 OceanBase 中,租户相当于 MySQL 的‘实例’,而不是单纯的数据库。”
2. 为什么要设计“租户”?
设计多租户主要有几个目的:
-
资源隔离
- 在大规模业务场景下,有多个业务系统要用数据库,如果共用一个 MySQL 会互相抢资源。
- OceanBase 把每个业务放到不同的租户中,每个租户分配固定 CPU、内存等,互不干扰。
-
安全隔离
- 不同租户的数据完全独立,甚至元数据也不共享。
- 一个租户的 DBA 无法访问另一个租户的数据。
-
多协议支持
- 一个租户可以跑 MySQL 协议,另一个租户可以跑 Oracle 协议。
-
更易运维和弹性
- 业务租户可以单独扩容/缩容,不影响其他业务。
3. 从 MySQL 视角理解租户
MySQL | OceanBase |
---|---|
实例(Instance) | 集群(Cluster) |
数据库(Schema) | 数据库(Schema) |
用户(User) | 用户(User)- 属于某个租户 |
实例级资源共享 | 租户级资源独立控制 |
单进程/多线程 | 多节点分布式多租户 |
所以在 OB 里,租户是一级概念,数据库属于某个租户,不同租户的数据库不能直接访问。
4. OceanBase MySQL 模式租户管理常用命令
OceanBase 的租户是由 sys 租户(系统管理员)管理的。sys
租户是集群创建时自动生成的超级租户,有权创建/删除其他租户。
(1)查看租户
-- 登录 sys 租户(通常使用 root@sys 用户)
SELECT * FROM oceanbase.DBA_OB_TENANTS;
常见字段:
tenant_id
租户 IDtenant_name
租户名compatibility_mode
租户兼容模式(MySQL / Oracle)status
状态
(2)创建租户(MySQL 模式)
CREATE TENANT tenant_mysqlCHARSET='utf8mb4'SET ob_tcp_invited_nodes='%' -- 允许哪些IP访问REPLICA_NUM = 3 -- 副本数ZONE_LIST = ('zone1', 'zone2', 'zone3') -- 部署在哪些 ZonePRIMARY_ZONE = 'RANDOM' -- 主 Zone 策略RESOURCE_POOL_LIST = ('pool_mysql');
这里的 pool_mysql
是资源池名,资源池要先创建。
(3)创建资源池(分配 CPU/内存等)
CREATE RESOURCE UNIT unit_mysql MAX_CPU=2, MEMORY_SIZE='2G';
CREATE RESOURCE POOL pool_mysql UNIT='unit_mysql',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');
(4)切换到某个租户
OceanBase 是多租户架构,不同租户是独立的,所以需要在登录时指定:
obclient -h <ip> -P <port> -u root@tenant_mysql -p
root@tenant_mysql
表示登录租户 tenant_mysql 中的 root 用户。
(5)删除租户
DROP TENANT tenant_mysql FORCE;
FORCE
用于强制删除,包括租户内数据。
(6)修改租户资源
ALTER RESOURCE UNIT unit_mysql MAX_CPU=4, MEMORY_SIZE='4G';
或者直接调整租户的资源池绑定不同的 unit
。
5. 租户 vs MySQL 数据库的对比总结
特性 | MySQL 实例 | OceanBase 租户 |
---|---|---|
数据隔离 | 不同数据库共享实例 | 完全隔离 |
资源隔离 | 不支持 | 支持 CPU/内存 等静态/动态调整 |
网络隔离 | 不支持 | 通过 ob_tcp_invited_nodes 控制 |
模式协议 | MySQL | MySQL 或 Oracle |
多业务场景 | 容易互相影响 | 互不影响 |
✅ 一句话记忆:
在 OceanBase 里,租户是“逻辑独立的数据库实例”,拥有自己的数据库、用户、资源配额、协议模式。sys 租户像云平台的管理员,负责创建/删除其他租户。
帮你画了一张 OceanBase MySQL 模式多租户架构图,把 sys 租户、业务租户、资源池、unit、zone 的关系都直观展示出来。
这样你从 MySQL 转 OceanBase 会更容易理解。
OceanBase MySQL 模式多租户架构示意图
┌───────────────────────────┐│ OceanBase 集群 ││ (多个节点 + 多个 Zone) │└─────────────┬─────────────┘│┌────────────────────────┴───────────────────────────┐│ │
┌────────────┐ ┌─────────────┐
│ sys 租户 │ <--- 系统管理员租户 │ 业务租户1 │ (MySQL 模式)
│ (root@sys) │ - 创建/删除租户 │ tenant_mysql│
└─────┬──────┘ - 管理资源池 / Unit └─────┬───────┘│ ││ ││ │┌───▼───────────┐ ┌──────────────────┐ ┌────▼───────────┐│ 资源池 pool_1 │ │ 资源池 pool_mysql │ │ 资源池 pool_orc│└───┬───────────┘ └───────┬──────────┘ └────┬───────────┘│ │ │┌───▼───────┐ ┌───▼───────┐ ┌──▼─────────┐│ Unit unit1│ │Unit unit_mysql│ │Unit unit_orc││ MAX_CPU=2 │ │MAX_CPU=4 │ │... ││ MEM=4G │ │MEM=8G │ │ │└────┬──────┘ └────┬──────┘ └───────┬──────┘│ │ │┌────▼─────────┐ ┌─────▼───────────┐ ┌────▼─────────┐│ Zone1 节点 │ │ Zone1 节点 │ │ Zone1 节点 │├──────────────┤ ├────────────────┤ ├──────────────┤│ Zone2 节点 │ ... │ Zone2 节点 │ ... │ Zone2 节点 │├──────────────┤ ├────────────────┤ ├──────────────┤│ Zone3 节点 │ │ Zone3 节点 │ │ Zone3 节点 │└──────────────┘ └────────────────┘ └──────────────┘
图中概念对应说明:
-
集群(Cluster)
- 整个 OceanBase 的部署单元,由多个节点组成,节点分布在不同的 Zone(机房 / 可用区)。
- Zone 用于实现高可用(多副本)。
-
sys 租户
- 默认存在的超级管理员租户。
- 负责集群和租户的整体管理,例如创建/删除租户,分配资源池。
-
业务租户
- 每个业务一个租户,租户之间完全隔离。
- 可选择运行 MySQL 模式 或 Oracle 模式。
- 租户内可有多个数据库(Schema)和用户。
-
资源池(Resource Pool)
- 租户必须绑定到一个或多个资源池,才能运行。
- 资源池由 资源单元(Resource Unit) 构成,分配 CPU、内存、IO 等上限。
-
资源单元(Unit)
- 资源分配的最小颗粒度。
- Unit 会分布在不同 Zone 的节点上,保证高可用性。
-
Zone
- 地理/机房的逻辑分组,通常3个Zone做三副本,提升容灾能力。
MySQL 用户迁移到 OceanBase 思维转换
MySQL 概念 | OceanBase 概念 |
---|---|
实例 | 租户 |
用户 | 租户内的用户 |
多业务共用实例 | 多租户架构,不同业务不同租户 |
分配实例资源 | 分配租户的资源池(限制CPU/MEM等) |