对比Mysql理解OceanBase中的租户设计

发布于:2025-09-03 ⋅ 阅读:(21) ⋅ 点赞:(0)

1. OceanBase 中的“租户”是什么?

MySQL 中,默认的资源管理颗粒度是 数据库(Database) ,同一个 MySQL 实例里所有用户共享 CPU、内存等实例级资源。

OceanBase分布式、多租户 架构的数据库,租户(tenant) 是它最顶层的逻辑隔离单元。

  • 每个租户就像一个独立的 MySQL 实例(或 Oracle 实例)
  • 租户之间数据、系统表、用户、资源(CPU、内存、存储空间、带宽)都是隔离的
  • 一个 OceanBase 集群可以同时运行多个租户,租户之间互不影响
  • 一个租户可以使用 MySQL 模式Oracle 模式

可以理解为:

“在 OceanBase 中,租户相当于 MySQL 的‘实例’,而不是单纯的数据库。”


2. 为什么要设计“租户”?

设计多租户主要有几个目的:

  1. 资源隔离

    • 在大规模业务场景下,有多个业务系统要用数据库,如果共用一个 MySQL 会互相抢资源。
    • OceanBase 把每个业务放到不同的租户中,每个租户分配固定 CPU、内存等,互不干扰。
  2. 安全隔离

    • 不同租户的数据完全独立,甚至元数据也不共享。
    • 一个租户的 DBA 无法访问另一个租户的数据。
  3. 多协议支持

    • 一个租户可以跑 MySQL 协议,另一个租户可以跑 Oracle 协议。
  4. 更易运维和弹性

    • 业务租户可以单独扩容/缩容,不影响其他业务。

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 租户 ID
  • tenant_name 租户名
  • compatibility_mode 租户兼容模式(MySQL / Oracle)
  • status 状态

(2)创建租户(MySQL 模式)

CREATE TENANT tenant_mysql
    CHARSET='utf8mb4'
    SET ob_tcp_invited_nodes='%'  -- 允许哪些IP访问
    REPLICA_NUM = 3               -- 副本数
    ZONE_LIST = ('zone1', 'zone2', 'zone3') -- 部署在哪些 Zone
    PRIMARY_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 节点   │
  └──────────────┘           └────────────────┘        └──────────────┘


图中概念对应说明:

  1. 集群(Cluster)

    • 整个 OceanBase 的部署单元,由多个节点组成,节点分布在不同的 Zone(机房 / 可用区)。
    • Zone 用于实现高可用(多副本)。
  2. sys 租户

    • 默认存在的超级管理员租户。
    • 负责集群和租户的整体管理,例如创建/删除租户,分配资源池。
  3. 业务租户

    • 每个业务一个租户,租户之间完全隔离。
    • 可选择运行 MySQL 模式Oracle 模式
    • 租户内可有多个数据库(Schema)和用户。
  4. 资源池(Resource Pool)

    • 租户必须绑定到一个或多个资源池,才能运行。
    • 资源池由 资源单元(Resource Unit) 构成,分配 CPU、内存、IO 等上限。
  5. 资源单元(Unit)

    • 资源分配的最小颗粒度。
    • Unit 会分布在不同 Zone 的节点上,保证高可用性。
  6. Zone

    • 地理/机房的逻辑分组,通常3个Zone做三副本,提升容灾能力。

MySQL 用户迁移到 OceanBase 思维转换

MySQL 概念 OceanBase 概念
实例 租户
用户 租户内的用户
多业务共用实例 多租户架构,不同业务不同租户
分配实例资源 分配租户的资源池(限制CPU/MEM等)


网站公告

今日签到

点亮在社区的每一天
去签到