首批通过分布式安全可靠测评,为关键业务系统打造
数据负载均衡概述
更新时间:2026-05-13 11:23:09
OceanBase 数据库提供了水平扩缩容和数据动态均衡等负载均衡能力。
水平扩缩容能力指的是通过调整服务节点的数量来实现服务能力的扩缩容,例如,从单个服务节点扩展为两个服务节点,即可实现服务能力的扩容。同时,水平扩缩容还需要支持数据的重分布,例如从单个服务节点扩展为两个服务节点,需要让数据均衡的分布在两个服务节点上;反之,当两个服务节点缩容为单个服务节点时,需要让数据重分布到单个服务节点上。
数据动态均衡能力指的是服务节点不变的情况下,通过调整数据分布,以实现各个服务节点负载动态均衡的能力。例如,随着表和分区的动态创建和删除,不同服务节点上服务的分区个数会有很大差异,导致服务节点的负载不均衡,基于分区动态均衡能力,可以实现分区在各个服务节点上均衡分布,从而实现负载均衡。
水平扩缩容
OceanBase 数据库中租户的存储容量和读写服务能力主要受以下两方面的影响:
Unit Number,即每个 Zone 上提供服务的 Unit 个数
通过增加或减少 Unit Number,从而增加或减少服务节点,实现读写服务和存储容量的水平扩缩容。
通过调整 Unit Number 实现租户扩缩容的详细操作,请参见 通过调整 Unit Number 实现租户扩缩容。
Primary Zone,即提供读写服务的 Zone 列表
通过增加或减少第一优先级的 Primary Zone 的个数,从而增加或减少提供读写服务的 Zone,实现读写服务在 Zone 间的水平扩缩容。
通过调整 Primary Zone 实现租户扩缩容的详细操作,请参见 通过调整 Primary Zone 实现租户扩缩容。
用户通过动态调整 Unit Number 和 Primary Zone,可以实现租户的读写服务能力在 Zone 内和 Zone 间的水平扩缩容。负载均衡功能将根据用户服务能力的配置自适应调整日志流和分区分布。
分区均衡
分区均衡是指在表和分区动态变化的情况下,通过动态调整分区分布,实现分区个数、分区权重、表组权重以及存储空间在服务节点上的均衡。
OceanBase 数据库支持多种表类型,包括非分区表、一级分区表和二级分区表。不同类型的表的均衡策略不一样。为了方便描述均衡效果,OceanBase 数据库为不同的表分区划分了均衡组,在各个均衡组内要实现分区个数均衡和存储空间均衡。均衡组之间没有关系,内部自适应调整均衡组之间的分布关系。默认情况下,OceanBase 数据库的分区均衡策略如下:
一级分区表:每个一级分区表是一个独立的均衡组,表的所有一级分区打散分布在各个服务节点上。
二级分区表:每个一级分区下的所有二级分区形成一个独立的均衡组,每个一级分区下的所有二级分区打散分布在各个服务节点上。
非分区表:所有的非分区表统一考虑,有且仅有一个均衡组,所有的非分区表打散分布在各个服务节点上。
为了更加灵活描述不同表数据之间的聚集和打散关系,OceanBase 数据库引入了表组(Table Group)的概念。
表组是一个逻辑概念,表示一组表的集合。表组内的表在物理存储上有临近关系,而多张具有关联关系的表往往具有相同的分区规则,通过将相同规则的分区聚集分布在一起,可以实现 Partition Wise Join,大大优化读写性能。
在之前的版本中,OceanBase 数据库引入了表组的 SHARDING 属性,对于 V4.4.2 版本,从 V4.4.2 BP1 版本开始,表组又支持了 SCOPE 属性。表组内分区的分布方式由 SHARDING 属性和 SCOPE 属性共同决定。其中,SHARDING 属性决定了表组内各表之间对应分区的聚合方式,聚合的一组分区称为分区组(Partition Group),是分布打散的最小单位。SCOPE 属性决定了表组内所有聚合后的 Partition Group 的分布范围。
表组的 SHARDING 属性有三种取值:NONE、PARTITION 和 ADAPTIVE。其中:
SHARDING = NONE:对表组内各表的分区方式无限制,且表之间分区不作聚合。注意
对于 V4.4.2 版本,在 V4.4.2 BP1 版本之前,
SHARDING = NONE的表组内表的所有分区都在同一个日志流上不打散,而从 V4.4.2 BP1 版本开始,表组内表的所有分区是否打散还取决于表组的SCOPE属性。对于一级分区表,每个一级分区作为一个独立的 Partition Group。
对于二级分区表,每个一二级分区作为一个独立的 Partition Group。
对于非分区表,整个表作为一个 Partition Group。
对于全局索引表,
SHARDING = NONE的表组内,表的全局索引表自动绑定到表组。全局非分区索引表整体作为一个 Partition Group,全局分区索引表的每个分区作为一个独立的 Partition Group。
SHARDING = PARTITION:整个表组是一个均衡租。同一个一级分区索引的分区聚合在同一个 Partition Group。SHARDING = ADAPTIVE:如果全部是一级分区表,则整个表组是一个均衡组。同一个一级分区索引的分区聚合在同一个 Partition Group。
如果全部是二级分区表,则同一个一级分区索引的分区是一个均衡组。均衡组下,同一个二级分区索引的二级分区聚合在同一 Partition Group。
表组的 SCOPE 属性有三种取值:SERVER、ZONE 和 CLUSTER。其中:
SCOPE = SERVER:所有分区组(Partition Group)的 Leader 分布在同一节点上。SCOPE = ZONE:所有分区组(Partition Group)的 Leader 分布在同一个 Zone 内,且打散在 Zone 内各节点上。SCOPE = CLUSTER:所有分区组(Partition Group)的 Leader 打散在集群内各节点上。
表组的 SHARDING 属性和 SCOPE 属性的各种组合方式下,其分区分布方式如下表所示。
| SHARDING / SCOPE 属性值 | SERVER | ZONE | CLUSTER |
|---|---|---|---|
| NONE | 表组内所有分区聚合在同一节点上(分区分布方式等价于 SCOPE 属性支持之前的版本的 SHARDING = NONE) |
表组内的全部分区平等地在某个 Zone 内打散 | 表组内全部分区平等地在各节点平均打散 |
| PARTITION | 不支持 | 暂不支持 | 按一级分区聚合,各分区组随机打散。(分区分布方式等价于 SCOPE 属性支持之前的版本的 SHARDING = PARTITION) |
| ADAPTIVE | 不支持 | 暂不支持 |
分区分布方式等价于 |
更多表组的详细介绍及操作,请参见 创建和管理表组(MySQL 模式) 和 创建和管理表组(Oracle 模式)。
基于表组权重的均衡
OceanBase 数据库的 MySQL 模式通过将 Database 绑定到一个 Sharding = 'NONE' 的表组上来实现用户表的聚合。当前支持同一个 Database 下的用户表的自动聚合和多个 Database 下的用户表聚合。
通过为 Sharding = 'NONE' 的表组设置权重实现表组权重均衡,可以使表组中的表按权重分布。需要注意的是,在 V4.4.2 版本中,从 V4.4.2 BP1 版本开始,对于 Sharding = 'NONE' 的表组,仅支持为 SCOPE = ZONE、SCOPE = 'SERVER' 的表组设置权重。
表组权重均衡是分区均衡(PARTITION_BALANCE)任务中的一个过程,用户租户可以通过手动触发,或者等待定时分区均衡任务触发。
基于分区权重的均衡
为了进一步解决分区表内分区热点、表间分区热点等问题,OceanBase 数据库提供了基于权重的分区均 衡策略。分区权重,即分区之间占用的 CPU、内存、磁盘等资源的相对比重。分区权重均衡是分区均衡(PARTITION_BALANCE)任务中的一个过程,用户租户可以通过手动触发,或者等待定时分区均衡任务触发。
分区权重均衡算法通过分区移动和分区交换的方法,使各个用户日志流上分区权重之和的方差尽量小。
只有设置过分区权重的表会参与分区权重均衡。未设置权重的分区仍按照分区个数均衡。
数据负载均衡相关的配置项
-
租户级配置项
enable_rebalance在系统租户下用于控制是否进行租户间的负载均衡;在用户租户下用于控制是否进行租户内均衡。默认值为true。 -
租户级配置项
enable_transfer用于控制是否在租户下进行 Transfer,默认值为true。其中:当配置项
enable_rebalance的值为false时,无论配置项enable_transfer的值为true还是false,系统均不会进行自动负载均衡。当配置项
enable_rebalance的值为true且enable_transfer的值为 为true时,表示在进行租户扩缩容时,系统会自动调整租户内日志流的数量,通过日志流分裂、合并以及 Transfer 等操作,进行租户下的 Leader 均衡和分区均衡。当配置项
enable_rebalance的值为true且enable_transfer的值为 为false时,表示在进行租户扩缩容时,系统不会进行 Transfer 并且不会出现日志流数量的变化,仅在现有日志流的基础上尽量保证日志流均衡。
partition_balance_schedule_interval
租户级配置项
partition_balance_schedule_interval用于控制生成分区负载均衡任务的时间间隔。表示当enable_rebalance的值为true时,系统会将partition_balance_schedule_interval作为时间间隔来自动触发分区负载均衡任务。默认值为2h,取值范围为 [0s, +∞),0s表示关闭分区均衡。注意
对于 V4.4.x 版本,该配置项的默认值从 V4.4.1 版本开始更改为 0s,对于 V4.4.1 及之后版本,不建议再使用该配置项来控制分区均衡,用户可以通过调用
DBMS_BALANCE.TRIGGER_PARTITION_BALANCE子程序来定时或手动触发分区均衡。-
租户级配置项
enable_database_sharding_none用于控制在创建 Database 时,是否开启用户表的自动聚合。默认值为False,表示在创建 Database 时,默认不开启用户表的自动聚合。 zone_disk_balance_tolerance_percentage
租户级配置项
zone_disk_balance_tolerance_percentage用于控制 Zone 间表组磁盘均衡算法对不均衡的容忍程度。当磁盘占用最大的 Zone 和最小的 Zone 之间的差值超过最大 Zone 磁盘使用量乘以该百分比时,才会触发 Zone 间的磁盘均衡。默认值为10。