数据库管理379期 2025-10-23
数据库管理-第379期 用现实集群摸索OBCP(20251023)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809
IFClub:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭

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

今年去尝试过一次OBCP,考的太细了,毕竟没有实地摸索过OceanBase,没有过,这一次就通过这套集群来摸索一下。
通过OBProxy访问集群:
obclient -h10.10.10.202 -P2883 -uroot@sys -p'OceanBase#!123' -Doceanbase -A

1 架构拓扑图

2 可用区
可用区是一个逻辑概念,每个可用区由若干个服务器一起来承载一个完整的数据副本。
在我部署的集群中,存在两个可用区:zone1和zone2,每个可用区分别有两台OBServer服务器。
2.1 查看磁盘资源
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 ;

3 多租户架构
OceanBase数据库采用了单集群多租户(tenant)设计,通过租户实现资源隔离,让每个数据库服务的实例不感知其他实例的存在,并通过权限控制确保租户数据的安全性,天然支持云数据库架构,支持公有云、私有云、混合云等多种部署形式。
- 租户是一个逻辑概念,在一定程度上相当于传统数据库的"实例"概念。
- 租户是各类数据库对象的容器。租户之间数据隔离,不允许跨租户的数据访问。
- 租户是是资源(CPU、Memory、IO 等)的容器。租户"独占"其资源配额,租户之间资源隔离。

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

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

3.3 租户创建语句
步骤1:创建resource unit
CREATE RESOURCE UNIT [IF NOT EXISTS] 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
CREATE RESOURCE 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
CREATE TENANT { {[IF NOT EXISTS] 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
obclient -h10.10.10.203 -P2881 -uroot@sys -p'OceanBase#!123' -Doceanbase -A

4.2 创建租户test01
租户规格为unit最大CPU为1,内存2G。resource pool指定每个zone运行1个unit。主要zone为zone1。
CREATE RESOURCE UNIT unit1 MAX_CPU 1,
MEMORY_SIZE '2G';
CREATE RESOURCE POOL pool1 UNIT 'unit1',
UNIT_NUM 1,
ZONE_LIST ('zone1','zone2');
CREATE TENANT test01
PRIMARY_ZONE='zone1',
RESOURCE_POOL_LIST=('pool1');


4.3 创建租户test02
租户规格为unit最大CPU为2,内存2G。resource pool指定每个zone运行2个unit。主要zone为zone2。
CREATE RESOURCE UNIT unit2 MAX_CPU 2,
MEMORY_SIZE '2G';
CREATE RESOURCE POOL pool2 UNIT 'unit2',
UNIT_NUM 2,
ZONE_LIST ('zone1','zone2');
CREATE TENANT test02
PRIMARY_ZONE='zone2',
RESOURCE_POOL_LIST=('pool2');


4.4 查看租户运行情况
可以通过SQL查看租户资源分配情况与租户运行节点:
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;

这里可以看到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 访问租户
在访问租户前需要在管理界面将白名单放开:

根据上一小节查出的内容可以到租户运行对应节点IP访问租户数据库:
obclient -h10.10.10.204 -P2881 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.203 -P2881 -uroot@test02 -p'OceanBase#!123'


也可以通过OBProxy访问租户数据库:
obclient -h10.10.10.202 -P2883 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.202 -P2883 -uroot@test02 -p'OceanBase#!123'

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

被折叠的 条评论
为什么被折叠?



