租户是一个逻辑概念。在OceanBase数据库中,租户是资源分配的单位,是数据库对象管理和资源管理的基础,对于系统运维,尤其是对于云数据库的运维有着重要的影响。租户在一定程度上相当于传统数据库的"实例"概念。租户之间是完全隔离的。在数据安全方面,OceanBase数据库不允许跨租户的数据访问,以确保用户的数据资产没有被其他租户窃取的风险。在资源使用方面,OceanBase数据库表现为租户"独占"其资源配额。总体上来说,租户(tenant)既是各类数据库对象的容器,又是资源(CPU、Memory、IO等)的容器。
视频讲解如下:
https://www.bilibili.com/video/BV14dJ3zVE2Y/?aid=114527534389...
一个租户可以看成是一个数据库实例。OceanBase数据库在一个系统中可同时支持MySQL模式和Oracle模式两种模式的租户。用户在创建租户时,可选择创建MySQL兼容模式的租户或Oracle兼容模式的租户,租户的兼容模式一经确定就无法更改,所有数据类型、SQL功能、视图等相应地与MySQL数据库或Oracle数据库保持一致。OceanBase数据库社区版仅提供了MySQL模式的租户。
一、 OceanBase的多租户架构
OceanBase数据库采用了多租户架构。多租户架构适用于资源整合、SaaS服务等场景,同时也降低了运维复杂度。OceanBase数据库采用了单集群多租户设计,天然支持云数据库架构,支持公有云、私有云、混合云等多种部署形式。OceanBase的多租户架构如下图所示:
二、 租户的类型
OceanBase数据库是多租户架构。在V4.0.0版本之前,仅支持两种类型的租户:系统租户和用户租户。从V4.0.0版本开始,引入了Meta租户概念。因此,当前版本对用户可见的租户有三种类型:系统租户、用户租户以及Meta租户。
2.1 系统租户
系统租户是集群默认创建的租户,与集群的生命周期一致,负责管理集群和所有租户的生命周期。系统租户仅有一个1号日志流,仅支持单点写入,不具备扩展能力。系统租户可以创建用户表,所有的用户表和系统表数据均由1号日志流服务。系统租户的数据是集群私有的,不支持主备集群物理同步和物理备份恢复。系统租户定位于集群管理和租户管理,不提供完整的数据库功能,不推荐在生产或业务测试等场合使用。通过DBA_OB_TENANTS视图,可以查看系统租户的信息。
ob> use oceanbase;
ob> select * from dba_ob_tenants where tenant_type='sys' \G;
# 输出的信息如下:
*************************** 1. row ***************************
TENANT_ID: 1
TENANT_NAME: sys
TENANT_TYPE: SYS
CREATE_TIME: 2025-03-27 19:15:03.296223
MODIFY_TIME: 2025-03-27 19:15:03.296223
PRIMARY_ZONE: RANDOM
LOCALITY: FULL{1}@zone1
PREVIOUS_LOCALITY: NULL
COMPATIBILITY_MODE: MYSQL
STATUS: NORMAL
IN_RECYCLEBIN: NO
LOCKED: NO
TENANT_ROLE: PRIMARY
SWITCHOVER_STATUS: NORMAL
SWITCHOVER_EPOCH: 0
SYNC_SCN: NULL
REPLAYABLE_SCN: NULL
READABLE_SCN: NULL
RECOVERY_UNTIL_SCN: NULL
LOG_MODE: NOARCHIVELOG
ARBITRATION_SERVICE_STATUS: DISABLED
UNIT_NUM: 1
COMPATIBLE: 4.3.5.1
MAX_LS_ID: 1
RESTORE_DATA_MODE: NORMAL
1 row in set (0.126 sec)
2.2 用户租户
用户租户是由用户创建的租户,对外提供完整的数据库功能,支持MySQL和Oracle两种兼容模式。用户租户支持服务能力水平扩展到多台机器上,支持动态扩容和缩容,内部会根据用户的配置自动创建和删除日志流。用户租户的数据有更强的数据保护和可用性要求,支持跨集群物理同步和物理备份恢复,典型数据包括:Schema数据、用户表数据及事务数据等。OceanBase数据库社区版仅提供了MySQL模式租户;OceanBase数据库企业版提供MySQL模式租户和Oracle模式租户。通过下面的查询语句可以获取用户租户的详细信息。
ob> use oceanbase;
ob> select * from dba_ob_tenants where tenant_type='user' \G;
# 输出的信息如下:
*************************** 1. row ***************************
TENANT_ID: 1016
TENANT_NAME: my_tenant
TENANT_TYPE: USER
CREATE_TIME: 2025-04-07 13:20:51.142028
MODIFY_TIME: 2025-04-07 13:21:18.355210
PRIMARY_ZONE: RANDOM
LOCALITY: FULL{1}@zone1
PREVIOUS_LOCALITY: NULL
COMPATIBILITY_MODE: MYSQL
STATUS: NORMAL
IN_RECYCLEBIN: NO
LOCKED: NO
TENANT_ROLE: PRIMARY
SWITCHOVER_STATUS: NORMAL
SWITCHOVER_EPOCH: 0
SYNC_SCN: 1744171442450188001
REPLAYABLE_SCN: 1744171442450188001
READABLE_SCN: 1744171442450188000
RECOVERY_UNTIL_SCN: 4611686018427387903
LOG_MODE: NOARCHIVELOG
ARBITRATION_SERVICE_STATUS: DISABLED
UNIT_NUM: 1
COMPATIBLE: 4.3.5.1
MAX_LS_ID: 1001
RESTORE_DATA_MODE: NORMAL
# 提示:通过COMPATIBILITY_MODE字段可以看出my_tenant是一个MySQL模式的租户。
2.3 Meta租户
Meta租户是OceanBase数据库内部自管理的租户,每创建一个用户租户系统就会自动创建一个对应的Meta租户,其生命周期与用户租户保持一致。Meta租户用于存储和管理用户租户的集群私有数据,这部分数据不需要进行跨库物理同步以及物理备份恢复,这些数据包括:配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。通过下面的查询语句可以获取META租户的详细信息。
ob> use oceanbase;
ob> select * from dba_ob_tenants where tenant_type='meta' \G;
# 输出的信息如下:
*************************** 1. row ***************************
TENANT_ID: 1015
TENANT_NAME: META$1016
TENANT_TYPE: META
CREATE_TIME: 2025-04-07 13:20:51.140850
MODIFY_TIME: 2025-04-07 13:21:18.229272
PRIMARY_ZONE: RANDOM
LOCALITY: FULL{1}@zone1
PREVIOUS_LOCALITY: NULL
COMPATIBILITY_MODE: MYSQL
STATUS: NORMAL
IN_RECYCLEBIN: NO
LOCKED: NO
TENANT_ROLE: PRIMARY
SWITCHOVER_STATUS: NORMAL
SWITCHOVER_EPOCH: 0
SYNC_SCN: NULL
REPLAYABLE_SCN: NULL
READABLE_SCN: NULL
RECOVERY_UNTIL_SCN: NULL
LOG_MODE: NOARCHIVELOG
ARBITRATION_SERVICE_STATUS: DISABLED
UNIT_NUM: 1
COMPATIBLE: 4.3.5.1
MAX_LS_ID: 1
RESTORE_DATA_MODE: NORMAL
1 row in set (0.016 sec)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。