“一个租户拥有若干个资源池”这句话应该如何理解

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】
1、以课件中的例子来说,这里三个租户都是被授予了一个资源池,那么什么情况下才会被授予其他的资源池?
2、以深蓝色的资源池来说,一个资源池是指 zone1、2、3中所有蓝色的部分,还是说3个zone内的蓝色部分被视为3个分着的资源池?

【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

这里说的资源池指的是你语句创建的资源池。一个资源池可以是一个zone,也可以是多个zone,与创建语句有关系。

1、以课件中的例子来说,这里三个租户都是被授予了一个 资源池,那么什么情况下才会被授予其他的资源池?
我理解的是每个租户都有自己的一个资源池,而不是他们几个都分配了同一个资源池。

2、以深蓝色的资源池来说,一个资源池是指 zone1、2、3中所有蓝色的部分,还是说3个zone内的蓝色部分被视为3个分着的资源池?
这是一个资源池,分布在三个zone中。这在创建资源池的时候,就会指定他们可以在哪些zone中。

是否可以把课件的链接贴出来,这样更方便理解这个问题

“2、以深蓝色的资源池来说,一个资源池是指 zone1、2、3中所有蓝色的部分,还是说3个zone内的蓝色部分被视为3个分着的资源池?
这是一个资源池,分布在三个zone中。这在创建资源池的时候,就会指定他们可以在哪些zone中。”

官网里有这样一句话:
Unit 数量指一个租户可使用的资源(专有名词:资源池)可以包含多个资源单元。每个单元会根据当前集群负载,自动在每个 Zone 中选择一个 Server 负载,但同一个资源池的多个单元不能分配到同一个 Server,即一个资源池包含的单元个数不能超过单 Zone 内 Server 的个数。
https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001007?back=kb
这里说一个资源池包含的单元个数不能超过单 Zone 内 Server 的个数,那么不就理解为一个资源池为单个zone的所有unit

找个实际环境看看就容易理解。

select t1.name resource_pool_name,  t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu
, round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb
, round(t2.max_disk_size/1024/1024/1024) max_disk_size , t4.tenant_name
from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
    join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
    left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
;
name name max_cpu min_cpu max_mem_gb min_mem_gb max_disk_size tenant_name
pool_sys_zone1_ico config_sys_zone1_S5C5G_cir 5.0 5.0 4 4 10 sys
pool_sys_zone2_tqp config_sys_zone2_S5C5G_qtm 5.0 5.0 4 4 10 sys
pool_sys_zone3_xqg config_sys_zone3_S5C5G_ykh 5.0 5.0 4 4 10 sys
pool_obmysql_zone2_fwj config_obmysql_zone2_S3C3G_fwj 2.0 2.0 1 1 500 obmysql
pool_obmysql_zone1_ltr config_obmysql_zone1_S3C3G_ltr 2.0 2.0 1 1 500 obmysql
pool_obmysql_zone3_vug config_obmysql_zone3_S3C3G_vug 2.0 2.0 1 1 500 obmysql
pool_oboracle_zone3_gab config_oboracle_zone3_S2C2G_gab 6.0 6.0 5 5 500 oboracle
pool_oboracle_zone2_yeg config_oboracle_zone2_S2C2G_yeg 6.0 6.0 5 5 500 oboracle
pool_oboracle_zone1_tzr config_oboracle_zone1_S2C2G_tzr 6.0 6.0 5 5 500 oboracle

上面有两个业务租户 obmysql 和 oboracle。 这是 OCP 创建的格式,所以每个租户有三个资源池(resource_pool_name),每个资源池都定义了自己的资源单元规格(unit_config_name),这三个单元规格虽然名称不一样,实际规格却是一样的(可以不一样,只是OCP里创建的时候我选择了一样)。 OCP 因为是自动化做的,所以搞得很繁琐,每个资源池用了一个规格,搞了三个资源池给租户。
如果是 DBA 手动创建,可能就两步:

  1. 定义一个资源单元规格。
  2. 定义一个资源池,分布在三个ZONE,都使用这个资源单元规格。
    如果是这样,那这个租户就一个 资源池,不过依然是三个资源单元。

所以,一个租户可以有一个或多个资源池,取决于你如何去组织它。但是一个租户在一个ZONE 只能由一个资源池。

一个租户有多个资源池这个功能还可以用于 租户的扩容(比如说从3副本扩容到5副本),或者增加只读副本做读写分离,新增的副本都要有资源池去存放。生产环境保险期间,新增资源池,这样就不去修改老的资源池。
缩容也是同理。有多个资源池的时候,缩容动作做起来更从容一些。

image
上图就是扩容后的分布,这个租户也有三个资源池,五个副本。

详情可以参考: OceanBase 副本数调整示例