一、引言
今天参加了一个金融科技认证考试,里面涉及了一道题也是引起了大家的热议,这也是由于这道题在培训课程上并没有讲过,所以对于oceanbase的初学者来说可能有点绕,但是通过这道考题,也非常有助于我们认识oceanbase数据库的一些基本组成概念。
具体题目如下:
题目:如果一个集群有3个zone,每个zone中有5个observer。一个租户对应的资源池的unit num=4,那么最终该用户有多少个资源单元呢?
复制
这道题是其实算是在OBCA认证考试中的一道原题,也是OBCA认证课程后的一道原模拟题。那么我们就从这道题出发,逐一对oceanbase数据库的一些基本概念知识和资源分配进行总结和了解。
二、oceanbase基本概念
1.oceanbase的物理构成和逻辑构成
ocenabase的物理构成:
从物理层面来看,我们可以将oceanbase集群分成三个层面,即
1.一个oceanbase集群;
2.多个zone;
3.多个observer物理服务器;
其中,三者的关系是一个oceanbase集群可以由1个活多个zone构成,一个zone中,又可以包含多个observer服务器,而多个observer的资源则共同组成了oceanbase的资源。
用一个实际的例子说明:
从上图中可以看到,该oceanbase集群是由3个zone组成,每个zone中只有1台服务器;
其实,从案例中可以发现,zone是一个逻辑上的概念,并不是真实的物理服务器,一个zone是由1个或着多个实体的observer物理服务器构成。不同的zone可以不同城市、同一城市的不同机房或者不同机架。而oceanbase为了保证整个集群的高可用架构,每一个zone中都会包含一套完整的数据,这样当任何一个zone出现异常时候,则可以有其他的zone进行接管保证数据库可用;
假设其中1台主机的资源为32C64G,则整个oceanbase集群的资源为96C192G。
ocenabase的逻辑构成:
从逻辑层面来看,我们则可以将oceanbase集群分成5个层面:
1.租户;
2.数据库;
3.表;
4.分区;
5.分片;
6.日志流;
其中一个租户中可以包含多个数据库,一个数据库中包含了多张表,一张表可以有多个分区,而一个分区则可以对应一个分片,分片是承载分区的物理实体,而一个日志流则可以包含多个分片,日志流则通过paxos协议,将数据存放在不同的物理位置上。
而逻辑构成和物理构成则是通过集群中的资源与租户的分配关系进行相互关联的,即在使用过程中,我们需要将资源分配至租户才可以正常使用。
2.oceanbase的多租户架构
oceanbase在使用过程中是一个单集群多租户的架构,即在一个集群里面,我们可以创建多个租户,供不同的系统使用。
租户是一个逻辑概念,我们可以将oceanbase的集群资源池根据实际去需求(定制的cpu、内存、IO、存储)划分给租户,每个租户之间的cpu、内存、io、存储都是相互隔离的;每个租户内具有单独的权限和逻辑体系,可以单独创建用户、数据库、表等数据库对象;且每个租户都有独立的information_schemas等数据库、管理视图、系统变量、系统参数;我们在创建租户的时候可以选择oracle模式或mysql模式,因此,oceanbase数据库对于oracle和mysql的支持均较好。这里借用官方的图进行理解。
三、oceanbase租户资源分配
正如上述内容,oceanbase数据库是一个单集群多租户的架构,在使用的时候,我们首先得创建租户,并且为租户进行资源分配。
oceanbase将observer的资源按照一定的规格定位为单元,即unit;而不同observer上的单元,则可以被加入到资源池中供租户使用,即:
单元 -> 资源池 -> 租户 -> 用户、数据库->对象
1. 资源单元(unit)
资源单元是定义oceanbase资源的最小单位,我们可以在资源单元中定义资源大小,比如cpu、内存、iops、存储。
2.资源池(pool)
每个unit都归属于一个资源池,集群中的每个pool都多个unit构成,由unit_num控制,同一个资源池内的unit必须为同一规格;
一个资源单元只能属于一个租户,一个租户在一个observer上只能同时存在一个资源单元。
3.租户(tenant)
租户则可以理解为我们的一个传统的数据库实例,可以单独给一个系统进行使用。
需要注意的是: 1.单元是资源的最小单位,可创建多个单元; 2.资源池由单元组成,一个资源池只能由同一个规格的多个单元构成; 3.租户由资源池组成,一个租户可以由多个资源池构成,但一个资源池只能属于一个租户(由于一个单元资源只能属于一个租户);
复制
四、租户分配资源过程
我们在使用租户,并给租户进行资源分配的过程,则如下图所示:
整个过程如下:
1.创建u1资源单元,u1=2c8g; 2.创建由u1组成的资源池,p=2c8g; 3.创建租户,并将p1分配置租户,指定unit num(控制unit的数量);
复制
根据上述的资源单元、资源池、租户、集群高可用副本的一些组成和特点,即
1.集群的高可用,每一个zone中都会包含一套完整的数据; 2.租户的资源使用是通过分配pool来实现的; 3.pool是由1个或多个同一规格的unit组成; 4.单个unit只能属于一个租户,导致一个pool也只能属于一个用户;
复制
当租户1,被授予1个资源池,资源池则是由1个租户1的unit构成,此时只能在每个zone的一台observer上存在1个unit,则整个集群中有3个租户1的unit;
当租户2,被授予1个资源池,资源池则是由2个租户2的unit构成,此时只能在每个zone的两台observer上存在1个unit,则整个集群中有6个租户2的unit;
当租户3,被授予1个资源池,资源池则是由3个租户3的unit构成,此时在每个zone的三台observer上存在1个unit,则整个集群中有9个租户3的unit;
此时,我们也会发现一个问题,就是如果有一个租户X,其分配的资源池想由4个租户X的unit构成,那么我们则需要在每个zone的四台observer上存在1个unit,但是此时集群中的单个zone只有3台机器,无法达到每个zone的四台observer上存在1个unit。
因此,unit_num也有一个限制,即unit_num的值必须小于一个zone的observer数量。
五、最初的问题
这次,我们回过头来最开始提出的考题:
如果一个集群有3个zone,每个zone中有5个observer。一个租户对应的资源池的unit num=4,那么最终该用户有多少个资源单元呢?
复制
是不是就很清晰了呢?
评论



