OceanBase数据库-学习笔记4-租户

租户

租户偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括 CPU、内存、日志盘空间、IOPS 等。

租户类似于传统数据库的数据库实例,租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额。在租户下可以创建 Database、表、用户等数据库对象。

OceanBase 数据库 4.0 开始,有三种类型的租户:系统租户用户租户以及每个用户租户对应的 Meta 租户

租户 ID 为 1 的是系统租户。租户 ID 大于 1000 的租户中,偶数的是用户租户,奇数的是 Meta 租户,并且用户租户的租户 ID 比其对应 Meta 租户大 1。

sql 复制代码
SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,COMPATIBILITY_MODE,STATUS,UNIT_NUM,COMPATIBLE,MAX_LS_ID FROM DBA_OB_TENANTS;

系统租户

  • 系统租户是集群默认创建的租户,与集群生命期一致,负责管理集群和所有租户的生命周期。系统租户仅有一个 1 号日志流,只支持单点写入,不具备扩展能力。
  • 系统租户定位于集群管理和租户管理,不提供完整的数据库功能,不推荐在生产或业务测试等场合使用。

用户租户

  • 与系统租户对应的是用户租户,用户租户是由用户创建的租户。
  • 对外提供完整的数据库功能。
  • 支持 MySQL 和 Oracle 两种兼容模式。

用户租户介绍

用户租户与通常所见的数据库管理系统相对应,可以被看作是一个数据库实例。它由系统租户根据业务需要所创建出来。 用户租户具备一个实例所应该具有的所有特性,主要包括:

  • 可以创建自己的用户
  • 可以创建数据库(database,仅 MySQL 兼容模式支持)、表(table)等所有客体对象
  • 有自己独立的系统表和系统视图
  • 有自己独立的系统变量
  • 数据库实例所具备的其他特性

所有用户数据的元信息都存储在用户租户下,所以每个租户都有自己的命名空间,并且彼此隔离不可访问。系统租户管理所有用户租户,系统租户与用户租户之间的层级关系如下图所示。

在用户租户下创建的用户,只能登录到本租户,对其他租户不可见。

  • 对于 MySQL 兼容模式的租户,可以从视图 mysql.user 中查询用户信息。
  • 对于 Oracle 兼容模式的租户,可以从系统视图 ALL_USERS 中查询用户信息。

在用户租户下可以创建表,创建后对其他租户不可见。

  • 对于 MySQL 兼容模式的租户,可以从 information_schema.tables 视图中查询本租户所有用户表的信息。
  • 对于 Oracle 兼容模式的租户,可以从 ALL_TABLES 视图中查询本租户所有用户表的信息。

用户租户只能在本租户下修改本租户的系统变量。

  • 对于 MySQL 兼容模式的租户,可以从 information_schema.global_variablesinformation_schema.session_variables 视图中查询系统变量信息。也可以通过 SHOW VARIABLES 语句查询。
  • 对于 Oracle 兼容模式的租户,可以通过 SHOW VARIABLES 语句来查询本租户所有的系统变量。

Meta租户

  • Meta 租户是 OceanBase 数据库内部自管理的租户。
  • 每创建一个用户租户会创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。
  • Meta 租户用于存储和管理用户租户的租户私有数据。
  • Meta 租户不可登录,普通用户只能通过系统租户的视图查询 Meta 租户下的数据。
  • Meta 租户没有独立的 Unit,创建租户时默认为 Meta 租户预留资源,各项资源从用户租户资源中扣除。

前置概念

租户通过资源池与资源关联,从而获取可用的资源。租户和资源池相辅相成的关系。

概念 对应视图 描述
资源规格 DBA_OB_Unit_CONFIGS 资源规格定义了常见物理资源项的大小,包括 CPU、内存、磁盘空间、IOPS 等。创建资源池时指定其资源规格,从而根据定义创建资源单元。
资源单元(Unit) DBA_OB_UnitS Unit 是租户管理中非常重要的概念。OceanBase 按照 Unit 来管理物理资源,是 CPU、内存、存储空间、IOPS 等物理资源的集合。Unit 也是资源调度的基本单位,其具有节点、Zone、Region 等位置属性,节点是服务器的抽象,Zone 是机房的抽象,Region 是地域的抽象,通过调整 Unit 的位置属性从而调整租户的部署方式。
资源池 DBA_OB_RESOURCE_POOLS 每个 Unit 都归属于一个资源池,每个资源池由若干个 Unit 组成,资源池是资源分配的基本单位,同一个资源池内的各个 Unit 具有相同的资源规格,即该资源池内 Unit 的物理资源大小都相同。
租户 DBA_OB_TENANTS

通过 Unit 的概念,我们将 OceanBase 数据库的物理概念和逻辑概念进行了关联。每个租户有若干 Unit,分布于若干 Zone 的若干节点上。而每个节点上分布有若干个 Unit,这些 Unit 归属于不同租户。概括的讲:集群由节点组成,节点是 Unit 的容器。租户由 Unit 组成,Unit 是数据库对象的容器。

创建租户时通过设置 RESOURCE_POOL_LIST,可以指定该租户关联到的资源池,从而该租户拥有指定资源池的 Unit。例如:设置租户 a 的 RESOURCE_POOL_LIST=('a_pool'),其部署图如下:

创建租户

创建租户的流程

OceanBase 数据库仅支持创建用户租户,系统租户由集群创建时自动创建。创建用户租户是一系列操作的组合,首先创建资源规格,然后基于该资源规格创建资源池,最后创建租户并指定其资源池。所以创建租户的顺序为:资源规格 -> 资源池 -> 租户。

步骤一:创建资源规格

创建一个名称为 S1_unit_config 的资源规格,其资源配置为 CPU 为 1 核,内存 5G,日志盘空间 6G

sql 复制代码
CREATE RESOURCE UNIT S1_unit_config
                MEMORY_SIZE = '5G',
                MAX_CPU = 1, MIN_CPU = 1,
                LOG_DISK_SIZE = '6G',
                MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;

步骤二:创建资源池

创建一个名为 mq_pool_01 的资源池,在 zone1 里创建 1 个 UnitUnit 的资源规格为 S1_unit_config

sql 复制代码
CREATE RESOURCE POOL mq_pool_01 
                UNIT='S1_unit_config', 
                UNIT_NUM=1, 
                ZONE_LIST=('zone1'); 

步骤三:创建租户

创建一个名为 mq_t1 的租户(默认为 MySQL 模式租户),副本数为 2,资源池指定为 mq_pool_01Primary Zonezone1,允许所有 IP 连接数据库。

sql 复制代码
CREATE TENANT IF NOT EXISTS mq_t1 
                PRIMARY_ZONE='zone1', 
                RESOURCE_POOL_LIST=('mq_pool_01')
                set OB_TCP_INVITED_NODES='%';

查询创建的租户

sql 复制代码
SELECT c.TENANT_ID, e.TENANT_NAME, concat(c.NAME, ': ', d.NAME) `pool:conf`, concat(c.UNIT_COUNT, ' unit: ', d.min_cpu, 'C/', ROUND(d.MEMORY_SIZE/1024/1024/1024,0), "G") unit_info
    -> FROM DBA_OB_RESOURCE_POOLS c, DBA_OB_UNIT_CONFIGS d, DBA_OB_TENANTS e
    -> WHERE c.UNIT_CONFIG_ID=d.UNIT_CONFIG_ID AND c.TENANT_ID=e.TENANT_ID AND c.TENANT_ID>1000
    -> ORDER BY c.TENANT_ID;
复制代码
+-----------+-------------+----------------------------+---------------+
| TENANT_ID | TENANT_NAME | pool:conf                  | unit_info     |
+-----------+-------------+----------------------------+---------------+
|      1002 | mq_t1       | mq_pool_01: S1_unit_config | 1 unit: 1C/1G |
+-----------+-------------+----------------------------+---------------+
1 row in set (0.033 sec)

obclient(root@sys)[oceanbase]> 

以上就是本次的分享,感谢阅读。

上一章:《OceanBase数据库-学习笔记3-Oceanbase相关命令》

下一章:《OceanBase数据库-学习笔记5-用户》

相关推荐
小黑_深呼吸6 分钟前
k8s平台:手动部署Grafana
运维·学习·kubernetes·grafana·prometheus
J先生x8 分钟前
【IP101】图像处理基础:从零开始学习颜色操作(RGB、灰度化、二值化、HSV变换)
图像处理·人工智能·学习·计算机视觉
struggle20252 小时前
deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试
人工智能·学习·开源·自动化·deepseek
一刀到底2112 小时前
从实列中学习linux shell4: shell 脚本中 $0 $1 $2 $3 >> 以及 awk 都是干啥的?
linux·运维·学习
冰茶_3 小时前
WPF之TextBox控件详解
学习·microsoft·微软·c#·wpf
FAQEW3 小时前
Redis的简单介绍
数据库·redis·缓存
十夫长3 小时前
Redis Info 性能指标描述
数据库·redis·缓存
辰哥单片机设计6 小时前
LCD1602液晶显示屏详解(STM32)
数据库·mongodb
一刀到底2116 小时前
从实列中学习linux shell5: 利用shell 脚本 检测硬盘空间容量,当使用量达到80%的时候 发送邮件
linux·运维·学习