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

数据库管理-第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:胖头鱼的鱼缸
除授权转载并标明出处外,均为“非法”抄袭

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

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

通过OBProxy访问集群:

obclient -h10.10.10.202 -P2883 -uroot@sys -p'OceanBase#!123' -Doceanbase -A

image.png

1 架构拓扑图

obcluster.png

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 ;

image.png

3 多租户架构

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

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

image.png

3.1 租户类型

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

image.png

3.2 租户资源分配

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

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

image.png

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');

image.png
image.png

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');

image.png
image.png

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;

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

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

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

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

obclient -h10.10.10.202 -P2883 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.202 -P2883 -uroot@test02 -p'OceanBase#!123'

image.png

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖头鱼的鱼缸(尹海文)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值