OceanBase 是分布式多租户架构数据库,其分布式集群从资源角度看可以分成集群、Zone、OB Server、资源池和租户等几个层次。
今天我们从集群和资源两个层次梳理 OceanBase 资源管理相关的概念。
OceanBase 集群管理
OceanBase 集群包含若干个Zone,一个Zone内可包含若干台物理机,每台物理机只能隶属于一个Zone,同一个Zone内的物理机通常部署在相同的机房内。Zone内的物理机提供CPU、内存和存储等资源给上层租户。
-
Zone
集群是由多个 Zone 组成的,Zone 被更多的赋予了物理位置上的意义。比如在两地三中心的架构中,我们可以把 Zone 按照地域划分为 SH-Zone、HZ-Zone等;如果集群规模没那么大,也可以按照物理机柜位置分为 CAB1-Zone、CAB2-Zone等,不同地域的服务器分配到不同的 Zone 中。
Zone 的个数要求大于3,建议是基数。每个 Zone 中保存一份完整的副本,单个 Zone 故障不影响业务。
-
OB Server
每个 Zone 中包含一台或多台 OBServer ,是具体的物理服务器,负责提供租户运行所需要的资源。
Zone 中的每台 OBServer 都是独立的,有独立的计算和存储引擎,保存副本的一部分数据。单台的 OBServer 故障,OceanBase 会有一定的策略对其中保存的数据进行保护,避免同时出现多台故障,影响业务的正常使用。
Zone 和 OBServer 提供了物理级别的资源管理和映射,在实施之前需要规划和设计好系统架构及对应的资源需求。
OceanBase 资源管理
OceanBase 数据库是多租户的分布式数据库,一个集群内可以创建多个相互独立的租户,每个租户提供独立的数据库服务。
为了避免租户之间的相互干扰,OceanBase 采用资源单元和资源池进行资源管理,实现租户之间的资源隔离。
-
资源单元配置 (Resource Unit Config)
资源单元配置是资源池的配置信息,用来描述资源池中每个资源单元可用的 CPU、内存、存储空间和 IOPS 等。集群中支持定义多种规格的资源配置,根据租户的需要选择合适的配置。
资源配置是静态配置信息,并不实际分配资源空间,修改资源配置可以动态调整资源单元的规格,进而调整对应租户的资源池分配。
-
资源单元 (Resource Unit)
资源单元是资源分配的最小单位,同一个资源单元不能跨OBServer节点,每个租户在同一台OBServer节点上只能有一个Unit。
资源单元包含了计算存储资源(CPU/内存/存储等),根据资源配置定义来分配,同时资源单元也是负载均衡的基本单位,在集群节点上下线、扩缩容时会动态调整资源单元在节点上的分布,从而实现资源使用的负载均衡。
资源单元可以看成是一个轻量级的虚拟机,所有的租户副本最终都保存在资源单元中,因此也可以说资源单元是数据的容器。
-
资源池 (Resource Pool)
资源池描述了租户所能使用的所有资源,由具有相同资源配置的若干个资源单元组成。一个资源池只能属于一个租户,一个租户可以拥有若干个资源池。
可以根据租户的资源需求选择对应的资源配置,资源需求较大的租户,也可以通过分配多个资源单元数量 (unit_num) 来满足资源分配的需求。
以下简单列举租户的创建和资源分配流程,帮助大家更好的理解上述的概念。
## 创建资源配置
create resource unit ut_5c2g max_cpu=2, max_memory='1G', max_iops=10000, max_disk_size='10G', max_session_num=1000000;
## 使用已经定义好的资源配置创建资源池
create resource pool pl_5c2g unit=ut_2c2g, unit_num=1;
## 使用已经创建好的资源池创建租户
create tenant obcp_t1 charset='utf8mb4', zone_list=('zone1,zone2,zone3'), primary_zone='zone1,zone2,zone3', resource_pool_list=('pl_5c2g') set ob_tcp_invited_nodes='%';
通过资源配置将服务器资源定义为更小的粒度,创建资源池时指定资源配置,建立资源池和资源配置之间的关联,租户创建时则根据资源池描述的资源合集进行资源分配。相信大家一定接触和使用过虚拟机,以上的资源管理模式是否觉得和虚拟机的使用很相似。OBServer 就是虚拟机中的物理服务器,负责提供租户所需要的资源;资源配置相当于虚拟机中的模板,通过模板可以继承资源使用分配,快速克隆出需要的虚拟机;而租户则是虚拟机,利用服务器所提供的资源启动相应的相应的数据库服务。
总结
OceanBase 数据库发源于阿里系,其架构是基于互联网系统高可用、资源池化、快速交付、动态扩缩容理念设计的。
物理层面上,通过 Zone 提供了数据中心服务器级的高可用保护;逻辑层面,通过资源配置将服务器资源拆分为更小的单元,可以为不同类型的应用分配不同类型和不同数量的 Unit ,这些资源既可以通过调大资源规格,也可以通过资源单元的数量来进行动态扩缩容,来满足不同业务的需求。