首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用现实集群摸索OBCP - 可用区、租户

用现实集群摸索OBCP - 可用区、租户

作者头像
胖头鱼的鱼缸
发布2026-07-02 14:44:36
发布2026-07-02 14:44:36
1050
举报

数据库管理-第379期 用现实集群摸索OBCP(20251023)

914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

上一期简单部署了OB社区版集群,有一些计划不合理的地方,因此花了点时间重新捯饬了一下,新的数据库环境如下: 数据库名称:yhw_cluster

image.png
image.png

今年去尝试过一次OBCP,考的太细了,毕竟没有实地摸索过OceanBase,没有过,这一次就通过这套集群来摸索一下。

通过OBProxy访问集群:

代码语言:javascript
复制
obclient -h10.10.10.202 -P2883 -uroot@sys -p'OceanBase#!123' -Doceanbase -A
image.png
image.png

1 架构拓扑图

obcluster.png
obcluster.png

2 可用区

可用区是一个逻辑概念,每个可用区由若干个服务器一起来承载一个完整的数据副本。 在我部署的集群中,存在两个可用区:zone1和zone2,每个可用区分别有两台OBServer服务器。

2.1 查看磁盘资源

代码语言:javascript
复制
SELECT SVR_IP, ZONE, TENANT_ID, UNIT_ID, MIN_CPU, MAX_CPU, ROUND(MEMORY_SIZE/1024/1024/1024,1) AS MEMORY_SIZE_GB,
MIN_IOPS, MAX_IOPS,IOPS_WEIGHT, ROUND(LOG_DISK_SIZE/1024/1024/1024,1) AS LOG_SIZE_GB, 
ROUND(LOG_DISK_IN_USE/1024/1024/1024,1) AS LOG_USED_GB, ROUND(DATA_DISK_IN_USE/1024/1024/1024,1) AS DATA_USED_GB 
FROM GV$OB_UNITS ;
image.png
image.png

3 多租户架构

OceanBase数据库采用了单集群多租户(tenant)设计,通过租户实现资源隔离,让每个数据库服务的实例不感知其他实例的存在,并通过权限控制确保租户数据的安全性,天然支持云数据库架构,支持公有云、私有云、混合云等多种部署形式。

  • 租户是一个逻辑概念,在一定程度上相当于传统数据库的"实例"概念。
  • 租户是各类数据库对象的容器。租户之间数据隔离,不允许跨租户的数据访问。
  • 租户是是资源(CPU、Memory、IO 等)的容器。租户"独占"其资源配额,租户之间资源隔离。
image.png
image.png

3.1 租户类型

  • 系统租户 系统租户是集群默认创建的租户,与集群生命期一致,负责管理集群和所有租户的生命周期。
  • 用户租户 用户租户是由用户创建的租户,对外提供完整的数据库功能,支持 MySQL 和 Oracle 两种兼容模式。
  • Meta 租户 每创建一个用户租户,系统为该用户租户创建一个隐藏的 Meta 租户,用于存储和管理用户租户的集群私有数据。Meta 租户的生命周期与用户租户保持一致。
image.png
image.png

3.2 租户资源分配

OceanBase 数据库是多租户的数据库系统,一个集群内可包含多个相互独立的租户,每个租户提供独立的数据库服务。在 OceanBase 数据库中,使用资源配置(Unit Config)、资源池(Resource Pool)和资源单元(Unit)三个概念,对各租户的可用资源进行管理。

image.png
image.png

3.3 租户创建语句

步骤1:创建resource unit
代码语言:javascript
复制
CREATERESOURCE UNIT [IFNOTEXISTS] unit_name
MEMORY_SIZE [=] 'size_value',
[MIN_CPU [=] cpu_num,]
MAX_CPU [=] cpu_num,
[MIN_IOPS [=] iops_num,]
[MAX_IOPS [=] iops_num,]
[IOPS_WEIGHT [=]iopsweight,]
[LOG_DISK_SIZE [=] 'size_value'];

必选参数

  • MAX_CPU:租户的 CPU 规格上限(CPU核数)。
  • MEMORY_SIZE:租户最多可以使用的内存大小。

可选参数

  • MIN_CPU:租户的CPU规格下限。 – 默认等于 MAX_CPU。
  • LOG_DISK_SIZE:租户的日志磁盘大小。 – 默认等于 3 倍的内存大小,最小为 2G。
  • MAX_IOPS/MIN_IOPS:租户的 IOPS 上/下限。 – 默认值为 INT64_MAX,即没有限制。
  • IOPS_WEIGHT:租户 IOPS 的权重。 – 默认按照 CPU 规格自动计算。
步骤2:创建resource pool
代码语言:javascript
复制
CREATERESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone_name' [, 'zone_name' ...]);

参数说明

  • UNIT:资源池使用的资源配置的名字。
  • UNIT_NUM:资源池在所在的每一个 Zone 内的资源单元个数。 – 对于任一资源池,一台 OBServer 至多提供一个资源单元。 – 只有当 Zone 内的 OBServer 个数大于1时,才可以指定 UNIT_NUM大于1。
  • ZONE_LIST:使用该资源池规格进行资源分配的 Zone。 – 可以为多个 Zone 创建同一个资源池,也可以为不同的 Zone 分别创建单独的资源池。
步骤3:创建tenant
代码语言:javascript
复制
CREATE TENANT { {[IFNOTEXISTS] tenant_name
[tenant_option] [set_sys_var]} };

tenant_option: 
| LOCALITY = locality_description
| PRIMARY_ZONE= primary_zone_list
| RESOURCE_POOL_LIST [=] (pool_name [, pool_name...])
| {CHARACTER SET | CHARSET} [=] charset_name
| COLLATE [=] collation_name

set_sys_var:
SET var_name = var_value [,var_name =var_value...]

参数说明 tenant_option

  • LOCALITY:指定租户的副本都分布在哪些 Zone。 – 默认为分布在集群的所有zone。
  • PRIMARY_ZONE:指定租户提供读写服务的 Zone 列表。 – 默认为 RANDOM,即所有的 Zone 都是 Primary Zone。
  • RESOURCE_POOL_LIST:租户可以使用的资源池列表。

set_sys_var:创建租户的同时设置租户级的全局变量。

  • ob_compatibility_mode:租户的兼容模式,默认为 MySQL。 – 租户模式仅能在租户创建时指定,不允许在创建租户后修改。
  • ob_tcp_invited_nodes:租户连接的白名单,即允许哪些客户端 IP 连接该租户。 – 默认仅允许本机的 IP 登录该租户。

4 创建租户实战

4.1 登录OB

代码语言:javascript
复制
obclient -h10.10.10.203 -P2881 -uroot@sys -p'OceanBase#!123' -Doceanbase -A
image.png
image.png

4.2 创建租户test01

租户规格为unit最大CPU为1,内存2G。resource pool指定每个zone运行1个unit。主要zone为zone1。

代码语言:javascript
复制
CREATERESOURCE UNIT unit1 MAX_CPU 1, 
MEMORY_SIZE '2G';

CREATERESOURCE POOL pool1 UNIT 'unit1', 
UNIT_NUM 1, 
ZONE_LIST ('zone1','zone2');

CREATE TENANT test01
PRIMARY_ZONE='zone1', 
RESOURCE_POOL_LIST=('pool1');
image.png
image.png
image.png
image.png

4.3 创建租户test02

租户规格为unit最大CPU为2,内存2G。resource pool指定每个zone运行2个unit。主要zone为zone2。

代码语言:javascript
复制
CREATERESOURCE UNIT unit2 MAX_CPU 2, 
MEMORY_SIZE '2G';

CREATERESOURCE POOL pool2 UNIT 'unit2', 
UNIT_NUM 2, 
ZONE_LIST ('zone1','zone2');

CREATE TENANT test02
PRIMARY_ZONE='zone2', 
RESOURCE_POOL_LIST=('pool2');
image.png
image.png
image.png
image.png

4.4 查看租户运行情况

可以通过SQL查看租户资源分配情况与租户运行节点:

代码语言:javascript
复制
SELECT T1.ZONE, T1.SVR_IP, T1.UNIT_ID, T2.NAME AS RESOURCE_POOL_NAME, T3.TENANT_NAME, T1.STATUS, T2.REPLICA_TYPE,  T1.MIN_CPU, T1.MAX_CPU, ROUND(T1.MEMORY_SIZE/1024/1024/1024,1) AS MEMORY_SIZE_GB,  ROUND(T1.LOG_DISK_SIZE/1024/1024/1024,1) AS LOG_DISK_GB, T1.MAX_IOPS, T1.MIN_IOPS, T1.IOPS_WEIGHT  FROM DBA_OB_UNITS T1, DBA_OB_RESOURCE_POOLS T2, DBA_OB_TENANTS T3  WHERE T1.RESOURCE_POOL_ID = T2.RESOURCE_POOL_ID AND T2.TENANT_ID = T3.TENANT_ID;
image.png
image.png

这里可以看到test01运行在10.10.10.204和10.10.10.206上;test02运行在10.10.10.203,10.10.10.204,10.10.10.205,10.10.10.206上。

4.5 访问租户

在访问租户前需要在管理界面将白名单放开:

image.png
image.png

根据上一小节查出的内容可以到租户运行对应节点IP访问租户数据库:

代码语言:javascript
复制
obclient -h10.10.10.204 -P2881 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.203 -P2881 -uroot@test02 -p'OceanBase#!123'
image.png
image.png
image.png
image.png

也可以通过OBProxy访问租户数据库:

代码语言:javascript
复制
obclient -h10.10.10.202 -P2883 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.202 -P2883 -uroot@test02 -p'OceanBase#!123'
image.png
image.png

总结

本期通过本地部署的OB,对OB的可用区与租户做了个简单了解与实操。 第一篇OB总结,有点乱,后面慢慢来。 老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 胖头鱼的鱼缸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库管理-第379期 用现实集群摸索OBCP(20251023)
    • 1 架构拓扑图
    • 2 可用区
      • 2.1 查看磁盘资源
    • 3 多租户架构
      • 3.1 租户类型
      • 3.2 租户资源分配
      • 3.3 租户创建语句
    • 4 创建租户实战
      • 4.1 登录OB
      • 4.2 创建租户test01
      • 4.3 创建租户test02
      • 4.4 查看租户运行情况
      • 4.5 访问租户
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档