集群相关的概念
集群(Cluster)
OceanBase数据库集群由一个或多个Region组成,Region由一个或多个Zone组成,Zone由一个或多个节点组成,每个节点可有若干个Unit,每个Unit可有若干个日志流Logstream的Replica,每个Logstream可使用若干个Tablet。
地域(Region)
Region是指一个地域或城市,而一个Region可能包含一个或多个Zone。不同Region通常距离较远,而在OceanBase数据库中,一份数据可以被部署在多个Region中的不同副本上,以保证数据的高可用性和容错性。每个Region都是一个物理数据中心的地理区域,不同地域之间是完全隔离的,以确保系统在不同地域间具备最高程度的稳定性和容错能力。
分区(Zone)
Zone是一个逻辑概念,是对节点进行管理的容器,一般是具有相似容灾属性的一组OBServer节点的组合。
在OceanBase中,Zone是指一个数据中心或一个物理区域,它是一个逻辑上的概念,通常包含多个存储节点,这些节点在物理上可以分布在不同的机房、不同的机架或不同的服务器上。一个Zone可以包含多个数据中心(比如机房),但是一个数据中心只能属于一个Zone。
从物理层面来讲,一个Zone通常是一个独立的物理部署单元,可以是一个数据中心(IDC)或者云上的一个可用区,也可以是一个单独的机架(Rack)。通过将OceanBase集群部署于不同的Zone,实现单个Zone故障时的故障隔离及快速恢复。
在OceanBase中,Zone通常用于实现跨数据中心的数据容灾。OceanBase会将数据按照一定的规则分布到不同的Zone中,从而实现数据的冗余备份。当一个Zone发生故障时,系统可以自动切换到备用Zone中的数据来保证数据的可用性。
除了数据容灾,OceanBase的Zone还可以用于数据分片的容器。数据分片是一种将数据划分为多个分片,并将不同分片存储在不同的节点上的技术,可以提高系统的吞吐量和性能。在OceanBase中,可以将不同的Zone作为不同的分片的Primary Zone,从而实现分布式存储和处理数据。
⚠️ OceanBase中的Zone与我们常说的AZ的含义不完全一致。AZ指的是可用区(Availability Zone),是指在同一地理区域内,相互隔离的数据中心集群。可用区通常由相互独立的电力、网络和冷却系统组成,以确保高可用性和冗余性。
主可用区(Primary Zone)
Primary Zone指的是分区的主副本所在的Zone,可以为分区指定一个Zone的列表,当分区需要切主的时候,容灾策略会按照这个列表的顺序决定新主的偏好位置。
节点(Server|Node)
OceanBase数据库服务器。server是运行observer进程的物理机,一台物理机上可以部署一个或者多个OBServer。在OceanBase数据库内部,server由其IP地址和服务端口唯一标识。
OBServer进程
OceanBase数据库是单进程软件,进程名为observer
。通常一台物理或者虚拟服务器运行一个observer进程,由IP和端口作为唯一标识,我们称之为节点,也可以用OBServer节点表示。observer进程作为OceanBase数据库最核心的组件,负责几乎所有数据库内核功能,包括SQL引擎、存储引擎和事务引擎。分布式的功能也同样在这个进程中,包括RPC通信、分区管理和负载均衡等。
总控服务(Root Service)
OceanBase数据库集群会有一个Root Service,其运行在某个OBServer节点上。当Root Service所在机器故障时,其余节点会选举出来新的Root Service。Root Service主要提供资源管理、容灾、负载均衡、schema管理等功能。
租户相关的概念
租户(Tenant)
OceanBase数据库通过租户实现资源隔离,采用单集群多租户的管理模式。OceanBase集群的一个租户相当于一个MySQL或者Oracle的实例。OceanBase数据库的租户之间的资源和数据都是隔离的。租户拥有一组计算和存储资源,提供一套完整独立的数据库服务。
OceanBase数据库上有系统租户和普通租户。系统租户下存放OceanBase数据库管理的各种内部元数据信息;普通租户下存放用户的各种数据和数据库元信息。
租户类似于传统数据库的数据库实例,租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额。在租户下可以创建Database、表、用户等数据库对象。
集群偏向于部署层面的物理概念,是Zone和节点的集合,Zone和节点具有部署地域(称为Region)等属性;而租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括CPU、内存、日志盘空间、IOPS等。
资源规格(Unit Config)
资源规格规定了一个Unit需要使用的计算存储资源(包含内存、CPU和IO等)的规格,是一个资源配置信息。创建资源池时指定其资源规格,从而根据定义创建资源单元。
资源单元(Unit)
资源单元是租户在节点上的容器,描述租户在节点上的可用资源(CPU、MEMORY 等)。一个租户在一个节点只能同时存在一个Unit。
OceanBase按照Unit来管理物理资源,是CPU、内存、存储空间、IOPS等物理资源的集合。Unit也是资源调度的基本单位,其具有节点、Zone、Region等位置属性,节点是服务器的抽象,Zone是机房的抽象,Region是地域的抽象,通过调整Unit的位置属性从而调整租户的部署方式。
资源池(Resource Pool)
一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。一个资源池由具有相同资源规格的若干个资源单元组成。一个资源池只能属于一个租户。每个Unit描述了位于一个server上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干CPU资源、内存资源和磁盘资源等。
一个租户在同一个server上最多有一个Unit。实际上,从概念上讲,副本是存储在Unit之中,Unit是副本的容器。
每个Unit都归属于一个资源池,每个资源池由若干个Unit组成,资源池是资源分配的基本单位,同一个资源池内的各个Unit具有相同的资源规格,即该资源池内Unit的物理资源大小都相同。
日志相关的概念
副本(Replica)
为了数据安全和提供高可用的数据服务,每个日志流的数据在物理上存储多份,每一份叫做日志流的一个副本。每个副本,包括存储在磁盘上的Tablet的静态数据(SSTable)、存储在内存上的Tablet的增量数据(MemTable)、以及记录事务的日志三类主要的数据。根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全、性能伸缩性、可用性、成本等之间的选择。
分片(Tablet)
OceanBase数据库V4.0.0
版本引入了分片(Tablet)概念来表示实际的数据存储对象。它具备存储数据的能力,支持在机器之间迁移(Transfer),是数据均衡的最小单位。Tablet与分区一一对应,单分区表会创建一个Tablet,多分区表会为每个分区创建一个Tablet。索引表的每个分区也会对应一个Tablet,包括局部索引表和全局索引表。特别地,局部索引表的Tablet与主表Tablet会强制绑定,保证存储在一台机器上。
日志流(Log Stream)
日志流是由OceanBase数据库自动创建和管理的实体,它代表了一批数据的集合,包括若干Tablet和有序的Redo日志流。它通过Paxos协议实现了多副本日志同步,保证副本间数据的一致性,实现了数据的高可用。日志流副本支持在不同机器之间迁移(Migration)和复制(Replication),以达到机器管理和系统容灾的目的。
从数据存储的角度来看,日志流可以抽象为Tablet容器,支持添加和管理Tablet数据,允许Tablet在不同日志流之间转移(Transfer),以达到数据均衡和水平扩展的目的。
从事务的角度来看,日志流是事务的提交单位。事务修改在单个日志流内完成时可以采用一阶段原子提交;事务修改跨多个日志流时,采用OceanBase数据库优化的两阶段提交协议完成原子提交,日志流是分布式事务参与者。
clog(Commit Log)
OceanBase会将包括事务在内的所有对数据库状态的修改操作,以redo log的形式记录并通过Multi-Paxos
一致性协议持久化在集群的多个副本之中。这样的一组redo log在OceanBase中称作clog。
clog按照日志流进行组织,每个日志流有自己的一组clog文件。同时,各个租户的clog文件是隔离的,每个租户可以设置本租户可以使用的clog空间大小。
clog既用于在数据库实例故障的场景下保证数据库的持久性和原子性,同时也用于备节点、物理备库、Change Data Capture等多个数据库功能实时获取数据库的状态变更操作。
slog(SSTable Log)
slog是节点为了维护本机基线数据一致性而使用的日志。
内存相关的概念
Sorted Strings Table(SSTable)
SSTable用于存储基线数据或转储数据,行数据有序存储。
增量数据表(MemTable)
MemTable是内存中增量修改记录的集合。
转储(Mini Compaction & Minor Compaction)
OceanBase数据库中的转储即Minor Compaction概念,可以理解和其他LSM-Tree架构数据库的Compaction概念类似,主要负责MemTable刷盘转成SSTable以及多个SSTable之间的Compaction策略选择以及动作。OceanBase数据库中采用的是leveled结合size tiered的Compaction策略,大致可以分为三层,其中L1和L2就是固定的leveled层次,L0层是size tiered,L0内部还会继续根据写放大系数以及SSTable个数进行内部Compaction动作。
小版本冻结(Minor Freeze)
分区在内存中的增量数据超过阈值时,冻结该分区当前活跃MemTable,不再接受新开启事务的写操作,新事务的写操作在该分区新的活跃MemTable中进行。
大版本冻结(Major Freeze)
集群中所有的节点在一个统一的快照点冻结当前的活跃MemTable,不再接受新开启事务的写操作,新事务的写操作在新的活跃MemTable中进行。
布隆过滤器(Bloom Filter)
布隆过滤器用于快速判断行在基线数据或转储数据是否存在,当结果为不存在时,可以减少磁盘IO和CPU消耗。
References
【1】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012832
【2】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012845
【3】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002325135