OceanBase 数据库参考传统数据库分区表的概念,把一张表格的数据划分成不同的分区(Partition)。在 V4.0.0 版本,分区是用户创建的逻辑对象,是划分和管理表数据的一种机制。
每个分区都有其对应的数据存储对象,称之为分片(Tablet),它具备存储数据的能力,支持在机器之间迁移(transfer),是数据均衡的最小单位。
日志流是由 OceanBase 数据库自动创建和管理的实体,它代表了一批数据的集合,包括若干 Tablet 和有序的 Redo 日志流。它通过 Paxos 协议实现了多副本日志同步,保证副本间数据的一致性,实现了数据的高可用。
在分布式环境下,为保证数据读写服务的高可用,OceanBase 数据库会把同一个日志流的数据拷贝到多个机器。不同机器同一个日志流的数据拷贝称为副本(Replica)。同一日志流的多个副本使用 Paxos 一致性协议保证副本的强一致,每个日志流和它的副本构成一个独立的 Paxos 组,其中一个日志流为主副本(Leader),其它日志流为从副本(Follower)。主副本具备强一致性读和写能力,从副本具备弱一致性读能力。
Location Cache
OceanBase 数据库按日志流、分片组织用户数据,且每个日志流有多个副本用于容灾。因此,在 SQL 请求执行过程中需要知道分区数据的位置信息,用于路由到特定机器读写对应副本的数据。分区数据的位置信息即称为 Location,每个 observer 进程会有一个服务,用于刷新及缓存本机需要的分区 Location 信息,该服务称为 Location Cache 服务。
V4.0.0 版本引入了日志流、分片的概念,如果需要获取分区数据的 Location 信息,就需要知道分区对应的分片、分片与日志流的映射关系,以及日志流副本的位置信息。您可以通过以下系统租户下的数据字典获取:
oceanbase.CDB_OBJECTS:指定OBJECT_TYPE为TABLE、TABLE PARTITION或TABLE SUBPARTITION可以获取对应分区的DATA_OBJECT_ID,即TABLET_ID(租户下分片的唯一标识)。oceanbase.CDB_OB_TABLET_TO_LS:获取分片所属的日志流,日志流在租户下通过LS_ID唯一标识。oceanbase.CDB_OB_LS_LOCATIONS:获取日志流的副本类型及位置。
副本类型
根据日志流副本存储数据种类的不同,副本被划分成不同的类型,以支持不同业务在数据安全、性能伸缩性、可用性、成本等之间的选择。
OceanBase 数据库支持以下三种类型的副本:
全能型副本(FULL/F)
说明
V4.0.0 版本仅支持该副本类型。
日志型副本(LOGONLY/L)
只读型副本(READONLY/R)
全能型、日志型副本又称为 Paxos 副本,对应的副本可构成 Paxos 成员组;而只读型副本又称为非 Paxos 副本,对应的副本不可构成 Paxos 成员组。
分布式一致性协议
OceanBase 数据库使用 Paxos 协议在同一日志流各副本间同步事务日志,多数派同步成功才能提交。缺省情况下读、写操作在主副本上保证强一致;从副本支持弱一致性读,允许读取某一个稍旧版本的数据。
数据均衡
OceanBase 数据库通过 RootService 管理租户内各个资源单元间的负载均衡。不同类型的副本对资源的需求各不相同,RootService 在执行均衡操作时需要考虑的因素包括每个资源单元的 CPU、磁盘使用量、内存使用量以及 IOPS 使用情况。经过负载均衡,最终会使得所有机器的各类型资源占用都处于一种比较均衡的状态,充分利用每台机器的所有资源。
说明
OceanBase V4.0.0 暂时不支持副本扩容后的数据负载均衡,扩容前已经存在的数据无法均衡到新添加的节点上。
RootService 主要通过以下两种方式实现数据均衡:
副本均衡
RootService 会通过 Unit 迁移、日志流副本复制或迁移的方式,调整租户在各机器上的资源占用情况。
Leader 均衡
在副本均衡的基础上,RootService 会根据租户的 Primary Zone 等因素,自动创建并均衡各机器日志流的 Leader 的数目。具体表现为,通过将日志流的 Leader 聚集到同一机器上,减少分布式事务执行的可能,减少业务请求的 RT(Response Time)。




