关于OcenaBase v4.2中,分区转移和负载均衡的技术解读

OceanBase​​​​​​​​​​​​​​作为一款原生分布式数据库,其核心的技术特性之一是高可扩展性,其具体表现在两个方面:

首先,是灵活的扩缩容能力,包括垂直扩缩容和水平扩缩容:

  • 垂直扩缩容:指通过调整服务节点上的资源规格来改变服务能力的方法。举例来说,当服务节点在CPU或内存资源上遭遇瓶颈时,我们可以通过灵活地调整每个节点的CPU配置和内存大小,迅速提升服务能力。
  • 水平扩缩容:指通过增减服务节点的数量来实现服务能力的调整。例如,从单个服务节点扩展为两个服务节点,可以实现服务能力的扩容。然而只支持服务节点数量的变化是不够的,为了实现业务读写服务能力的水平扩缩容,还需要支持数据重分布,比如从单个服务节点扩展为两个服务节点,让数据均衡地分布在两个服务节点上。反之,当两个服务节点缩容为单个服务节点时,需要让数据重分布到单个服务节点上。

其次,是数据动态均衡能力,即在服务节点不变的情况下,通过调整数据分布,以实现各个服务节点负载动态均衡的能力。例如,随着表和分区的动态创建和删除,不同服务节点上服务的分区个数会有很大差异,导致服务节点的负载不均衡,基于分区动态均衡能力,可以实现分区在各个服务节点上均衡分布,从而实现负载均衡。

无论是水平扩缩容,还是数据的动态均衡,本质上都是通过调整数据的分布以实现服务节点的负载均衡。因此,我们将水平扩缩容和数据动态均衡的能力统称为负载均衡能力。

OceanBase 各版本的负载均衡有何不同

OceanBase从1.x版本开始就具备灵活的扩展性,支持以分区为单位将数据打散分布在多个服务节点上,实现了动态扩缩容和分区自动均衡。
OceanBase 4.0版本升级为单机分布式一体化架构后,引入了自适应日志流概念,扩展性更加灵活,支持单机和分布式形态的动态变换。目前OceanBase 4.0和OceanBase 4.1 的扩展能力还不够完善,由于分区和日志流是静态的绑定关系,不支持动态调整分区分布,从而限制了自动负载均衡的能力,不支持部署形态的灵活变换。


OceanBase 4.2版本是首个完整实现单机分布式一体化架构的版本,具有里程碑意义

OceanBase采用分区转移技术实现了日志流的分裂和合并,支持了以分区为单位进行跨节点的数据搬迁,完善了负载均衡策略,补齐了可扩展性能力,真正实现了单机和分布式形态的动态变换。

OceanBase支持多租户机制,不同租户间资源隔离,支持租户级别的水平扩缩容和分区均衡,下面将详细介绍OceanBase 4.2版本租户级别的负载均衡特性。

OceanBase v4.2租户级别的负载均衡特性

水平扩缩容


OceanBase支持从两方面来描述租户的服务能力:

  1. Unit Number,即每个Zone上提供服务的Unit个数。
  2. Primary Zone,即提供读写服务的Zone列表。

用户通过动态调整Unit Number和Primary Zone,可以实现租户的读写服务能力在Zone内和Zone间的水平扩缩容。负载均衡模块将根据用户服务能力的配置自适应调整日志流和分区分布。

用户可以通过下面的命令来调整租户的Primary Zone。

SQL> ALTER TENANT tenant PRIMARY_ZONE='zone1,zone2;zone3'; 
SQL> ALTER TENANT tenant PRIMARY_ZONE='RANDOM'; 

当Primary Zone为RAMDOM时,调整Locality参数也会导致Primary Zone的变化。例如:Locality为从F@zone1,F@zone2,F@zone3变更为F@zone1,F@zone2,R@zone3时,RANDOM的Primary Zone配置意味着Primary Zone从zone1,zone2,zone3变更为了zone1,zone2

SQL> ALTER TENANT tenant PRIMARY_ZONE='RANDOM';
SQL> ALTER TENANT tenant LOCALITY='F@zone1,F@zone2,R@zone3';

用户可以通过下面的命令来调整租户每个Zone的Unit的个数,4.0版本开始,OceanBase要求每个Zone的Unit个数必须一样,因此,仅支持租户级别调整Unit个数的命令。为了方便统一管理各个Zone的Unit,引入了Unit Group机制,每个Zone相同编号的Unit属于同一个Unit Group。Unit个数的扩缩容本质上是以Unit Group为单位创建和删除Unit。

; 对于缩容场景,随机选择一个Unit Group删除
SQL> ALTER RESOURCE TENANT tenant_name UNIT_NUM = xxx;

; 对于缩容场景,删除 指定的Unit Group
SQL> ALTER RESOURCE TENANT tenant_name UNIT_NUM = xxx DELETE UNIT_GROUP = ( id_list )

相比之前的版本,4.2版本新增支持了Unit缩容场景,可以统一减少每个Zone的Unit个数。发起缩容操作后,默认情况下,系统会随机选择一个Unit Group执行删除;用户也可以指定Unit Group列表,删除特定的Unit集合。Unit Group的列表可以在 DBA_OB_UNITS 表中查询。

分区均衡

分区均衡指:在表和分区动态变化的情况下,通过动态调整分区分布,实现分区个数以及存储空间在服务节点上的均衡。

OceanBase 支持多种表类型,包括:非分区表、一级分区表和二级分区表。不同类型的表的均衡策略不一样。为了方便描述均衡效果,OceanBase为不同的表分区划分了均衡组,在各个均衡组内要实现分区个数均衡和存储空间均衡。均衡组之间没有关系,内部自适应调整均衡组之间的分布关系。默认情况下,OceanBase的分区均衡策略如下。

  • 一级分区表:每个一级分区表是一个独立的均衡组,表的所有一级分区打散分布在各个服务节点上。
  • 二级分区表:每个一级分区下的所有二级分区形成一个独立的均衡组,每个一级分区下的所有二级分区打散分布在各个服务节点上。
  • 非分区表:所有的非分区表统一考虑,有且只有一个均衡组,所有的非分区表打散分布在各个服务节点上。

另外,为了更加灵活描述不同表数据之间的聚集和打散关系,引入了TableGroup机制。

TableGroup机制

用户手册:OceanBase分布式数据库-海量数据 笔笔算数

OceanBase从1.x版本开始就引入了Table Group概念:Table Group是一个逻辑对象,代表一组表的集合,他们在物理存储上有临近关系。Table Group的引入是为了解决Partition Wise Join需求。多张具有关联关系的表往往遵守相同的分区规则,通过将相同规则的分区聚集分布在一起,可以实现Partition Wise Join,极大地优化读写性能。

从4.2版本开始,TableGroup概念有较大调整。

首先,不再支持Table Group上的分区属性,不再通过分区属性限制一个Table Group的表的分区方式,也不再支持Table Group相关的分区管理操作。

其次,为了兼容老版本创建Table Group的语法,带分区属性创建Table Group时并不会报错,会忽略分区属性。在OceanBase 4.0和OceanBase 4.1中如果创建了带分区属性的Table Group,升级到4.2版本后,将默认转换为不带分区属性的Table Group,行为上自动兼容。

再次,视图也进行了调整:DBA_OB_TABLEGROUPS的分区属性字段将不再有含义,展示为NULLDBA_OB_TABLEGROUP_PARTITIONS/DBA_OB_TABLEGROUP_SUBPARTITIONS视图将废弃,不再展示数据。CDB相关视图调整同上。

最后,Table Group内分区的聚集和打散语义不再相同,OceanBase 4.2版本为Table Group引入了SHARDING属性,用于控制Table Group内表数据的聚集和打散关系。

那么,什么是SHARDING属性,在不同场景中它的取值和意义分表是什么?

Table Group中SHARDING属性的取值

Table GroupSHARDING属性有三种取值:NONEPARTITIONADAPTIVE。下面基于场景来描述OceanBase 4.2版本Table GroupSHARDING属性的取值和意义。

SHARDING属性的取值和意义

场景1:Table Group内所有表聚集在一起。

用户希望将任意类型的表聚集在一台机器上,以满足业务单机访问的需求。采用SHARDING = NONE的Table Group可以实现将任意类型的表聚集在一起。

SHARDING = NONE的Table Group含义如下:

  • 支持加入任意分区类型的表,包括非分区表、一级分区表、二级分区表。
  • 加入Table Group的所有表的所有分区聚集在一起,系统保证调度在一台机器上。

场景2:Table Group内表数据水平打散。

当单机无法承载单个业务的数据时,用户希望将数据打散分布在多台机器,实现水平扩展。OceanBase默认为不同分区类型的表提供了水平扩展和自动负载均衡的能力。

  • 非分区表:所有的非分区表打散均匀分布在多台机器上。
  • 一级分区表:表的所有一级分区打散分布在多台机器上。
  • 二级分区表:每个一级分区的所有二级分区打散分布在多台机器上,不同一级分区间随机打散。

默认情况下,不同表之间数据是随机分布的,但无妨。如果希望多张具有关联关系的表数据分布相同,则需要明确不同表分区之间的对齐规则,从而将不同表的分区聚集在同一台server,实现Partition Wise Join,提升性能。采用SHARDING不为NONE的Table Group可以满足该需求。

SHARDING = NONE的Table Group描述了所有表的所有分区聚集在同一台server,并且不限制表的分区类型。

SHARDING不为NONE时,Table Group内每一张表的数据打散分布在多台机器上。为了保证所有表的数据分布相同,Table Group要求所有表的分区方式一致,包括分区类型、分区个数、分区Value。系统会调度具有相同分区属性的分区聚集(对齐)分布在同一台Server,从而实现Partition Wise Join。

下面描述不同SHARDING取值的含义以及对Table Group内表的影响。

  • PARTITION:按一级分区打散,如果是二级分区表,一级分区下的所有二级分区聚集在一起。
    • 分区方式要求:一级分区的分区方式相同,如果是二级分区表,也只校验一级分区的分区方式。因此,一级分区表和二级分区表可以同时存在,只要他们的一级分区的分区方式相同即可。
    • 分区对齐规则:相同一级分区Value的分区聚集在一起,包括一级分区表的一级分区和二级分区表的对应一级分区下的所有二级分区。
  • ADAPTIVE:自适应打散方式。如果Table Group内是一级分区表,则按一级分区打散;如果Table Group内是二级分区表,则每个一级分区下的二级分区打散。
    • 分区方式要求:要么全部是一级分区表,要么全部是二级分区表。如果是一级分区表,则要求一级分区的分区方式相同;如果是二级分区表,则要求一级和二级分区方式都相同。
    • 分区对齐规则:对于一级分区表,一级分区Value相同的分区聚集在一起;对于二级分区表,一级分区Value相同,并且二级分区Value相同的分区聚集在一起。

了解了SHARDING属性的取值和意义后,我们以具体示例来看如何使用。

SHARDING属性的取值示例

示例一:SHARDING = NONE。

SHARDING = NONE的Table Group内,无论何种分区方式的表的分区,都会聚集为一个Partition Group,分布在一台机器上。

SQL> CREATE TABLEGROUP TG1 SHARDING = 'NONE';

# 非分区表
SQL> CREATE TABLE T_NONPART (pk int primary key) tablegroup = TG1;

# 一级分区表
SQL> CREATE TABLE T_PART_2 (pk int primary key)  tablegroup = TG1 partition by hash(pk) partitions 2;

# 二级分区表
SQL> CREATE TABLE T_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG1 partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
0
T_NONPARTP0
T_PART_2P0, P1
T_SUBPART_2_2P0SP0, P0SP1, P1SP0, P1SP1

示例二:SHARDING = PARTITION。

SHARDING = PARTITION的Table Group里所有表都会看成是一级分区表,要求所有表的一级分区方式相同,而一级分区属性相同的分区会聚集成一个Partition Group。

SQL> CREATE TABLEGROUP TG1 SHARDING = 'PARTITION';

# 一级分区表
SQL> CREATE TABLE T_PART_2 (pk int primary key)  tablegroup = TG1 partition by hash(pk) partitions 2;

# 二级分区表
SQL> CREATE TABLE T_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG1 partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
01
T_PART_2P0P1
T_SUBPART_2_2P0SP0, P0SP1P1SP0, P1SP1

示例三:SHARDING = ADAPTIVE

Table Group要求所有表的一级和二级分区方式完全一致。一级分区表和二级分区表不支持在一个Table Group中。

一级分区表的Table Group:

SQL> CREATE TABLEGROUP TG_PART SHARDING = 'ADAPTIVE';

# 一级分区表
SQL> CREATE TABLE T1_PART_2 (pk int primary key)  tablegroup = TG_PART partition by hash(pk) partitions 2;

# 一级分区表
SQL> CREATE TABLE T2_PART_2 (pk int primary key, c1 int)  tablegroup = TG_PART partition by hash(pk) partitions 2;

TablePartition Group
01
T1_PART_2P0P1
T2_PART_2P0P1

二级分区表的Table Group:

SQL> CREATE TABLEGROUP TG_SUBPART SHARDING = 'ADAPTIVE';

# 二级分区表
SQL> CREATE TABLE T1_SUBPART_2_2 (pk int, c1 int, primary key(pk, c1))  tablegroup = TG_SUBPART partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;


# 二级分区表
SQL> CREATE TABLE T2_SUBPART_2_2 (pk int, c1 int, c2 int, primary key(pk, c1))  tablegroup = TG_SUBPART partition by hash(pk) subpartition by hash(c1) subpartitions 2 partitions 2;

TablePartition Group
00011011
T1_SUBPART_2_2P0SP0P0SP1P1SP0P1SP1
T2_SUBPART_3_3P0SP0P0SP1P1SP0P1SP1

相关视图 

1701336611

视图名称说明
DBA/CDB_OB_TABLE_LOCATIONS分区副本分布,包含分区详细信息。最常用的视图之一
DBA/CDB_OB_LS_LOCATIONS日志流副本分布
DBA/CDB_OB_BALANCE_JOBS正在执行的负载均衡任务,如扩容、缩容、分区均衡等
DBA/CDB_OB_BALANCE_JOBS_HISTORY负载均衡任务历史
DBA/CDB_OB_BALANCE_TASKS正在执行的LS均衡任务,如LS分裂、LS合并等
DBA/CDB_OB_BALANCE_TASK_HISTORYLS均衡任务历史
DBA/CDB_OB_TRANSFER_TASKS正在执行的分区转移(transfer)任务,tablet级别
DBA/CDB_OB_TRANSFER_TASK_HISTORY分区转移(transfer)任务历史
GV$OB_UNITSunit分布及资源使用情况
GV$OB_SERVERSserver分布及资源使用情况

负载均衡配置参数enable_rebalance

在上述负载均衡过程中,涉及一个控制参数enable_rebalance,该参数在OceanBase 4.2前的版本用于控制租户间的均衡是否开启。为了支持控制租户内的均衡,我们决定将enable_rebalance配置项变更为租户级别,不同租户下的配置项控制不同的均衡操作。

1. 在系统租户下控制是否做租户间均衡

  • false:不会进行后台的unit迁移操作,但是在机器永久下线或者处于DELETING状态时,unit迁移不受配置项控制。
  • true:机器可以通过unit迁移达到均衡态。

2. 在用户租户下控制是否做租户下的均衡。

  • false:租户内不在进行负载均衡操作,已经在进行中的均衡操作会取消。用户如果发起扩缩容操作时会报错,例如:
    • 租户的Unit Number增大缩小。
    • 第一优先级的Primary Zone发生变化,如果第一优先级的Primary Zone不发生变化,则不会报错。
    • Primary Zone为RANDOM的情况下,F副本个数发生变化。
  • true :租户内可以执行负载均衡操作,如下。
# 均衡都关闭
alter system set enable_rebalance = false tenant = ALL;


#只开启租户间均衡 
alter system set enable_rebalance = true tenant='sys';

#关闭租户间均衡,但是可以进行租户内均衡
alter system set enable_rebalance = false tenant='sys';
alter system set enable_rebalance = true tenant='mysql_tenant';

总结

OceanBase 4.2版本的分区转移功能支持了以分区为单位灵活的跨节点搬迁数据的能力,弥补了因OceanBase 4.0版本架构升级而引入的问题,即无法在日志流间负载均衡的缺陷,真正实现了单机分布式一体化的灵活转化。

分区转移的源端日志流会有数秒卡DDL和用户写入,后续会优化为支持用户写入。 如果分区转移有跨节点的负载均衡任务,那么耗时和分区个数和数据量正相关。 需要转移的分区个数越多,转移的速度就越慢;需要转移的数据量越大,跨节点拷贝的速度也会越慢,主要受限于磁盘、网络的带宽瓶颈(网络限速默认参数为实际带宽的60%)。

需要说明的是,OceanBase 4.2版本的分区转移不支持活跃事务,预计在4.3版本实现支持。但是,提供了两种模式以满足不同使用的场景。

第一种模式是非紧急状态下的负载均衡,默认配置下,分区转移操作在业务低峰期没有活跃事务的时候执行。此操作对于业务是基本无感知的。

第二种模式是紧急运维负载均衡,需要用户手动开启分区转移主动杀事务的配置,分区转移会主动“杀死”对应日志流上的活跃事务,保证分区转移的顺利进行,但会对业务运行有一定影响。

另外,分区转移期间禁止部分DDL操作,如删除分区/Truncate分区、/删除表/Truncate表;分区分裂、合并;添加、删除局部索引;以及第一次添加LOB列,都会引发阻塞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探究云手机的海外原生IP优势

随着全球数字化进程的加速,企业越来越依赖于网络来扩展其业务。在这个数字时代,云手机作为一种创新的通信技术,已经成为了企业网络优化的重要组成部分。云手机支持海外原生IP的特性,为企业在国际市场上的拓展提供了全新的可能性。…

【Node.js从基础到高级运用】二十、Node.js 强大的REPL

引言 Node.js REPL(Read-Eval-Print Loop)是一种交互式的命令行工具,它允许开发者快速地执行JavaScript代码,并查看结果。这个功能在进行快速原型设计、调试、学习JavaScript或Node.js时非常有用。 启动REPL 首先,确保…

高度不同的流体瀑布css实现方法

商城商品列表 实现瀑布流展示,通过flex或grid实现会导致每行中的列高度一致,无法达到错落有致的感觉; 为此需要用到: CSS columns 属性 columns 属性是一个简写属性,用于设置列宽和列数。 CSS 语法 columns: column-wi…

Java类和对象练习题

练习一 下面代码的运行结果是() public static void main(String[] args){String s;System.out.println("s"s);} 解析:本题中的代码不能编译通过,因为在Java当中局部变量必须先初始化,后使用。所以此处编译不…

信息安全技术基础知识总结

一、信息安全基础知识 信息安全基本要素: 1. 机密性(C):确保信息不暴露给未授权的实体或进程 2. 完整性(I):只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改 3. 可用性…

论文笔记✍GS3D- An Efficient 3D Object Detection Framework for Autonomous Driving

论文笔记✍GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving 📜 Abstract 🔨 主流做法限制 : 我们在自动驾驶场景中提出了一种基于单个 RGB 图像的高效 3D 物体检测框架。我们的工作重点是提取 2D 图像中的底层 3…

降低项目延期概率的5大注意事项

降低项目延期概率对项目非常重要。因为项目延期往往会导致成本增加,降低客户满意度,影响企业在市场上的竞争力,造成资源浪费。因此,我们需要降低项目延期概率,实现企业长远发展。 而降低项目延期概率,一般来…

java基础之高级面试-2024

抽象类和接口有什么区别 定义和设计:抽象类是使用abstract关键字定义的类,可以包含抽象方法和非抽象方法,可以有实例变量和构造方法;接口通过interface关键字定义,只能包含抽象方法、默认方法和静态方法,不…

基于ssm的家政服务中介网(java项目+文档+源码)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的闲一品交易平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 家政服务中介网的主要使用者分为…

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例1: 输入:root [3,1,4,null,2], k 1 输出:1 解…

【iOS ARKit】3D 视频

在AR 中播放视频也是一种常见的需求,如在一个展厅中放置的虚拟电视上播放宣传视频,或者在游戏中为营造氛围而设置的虚拟电视视频播放,或者在识别的2D个人名片上播放自我介绍视频,因视频具有静态图像无法比拟的综合信息展示能力&am…

【学习笔记】java项目—苍穹外卖day02

文章目录 苍穹外卖-day02课程内容1. 新增员工1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码开发1.2.1 设计DTO类1.2.2 Controller层1.2.3 Service层接口1.2.4 Service层实现类1.2.5 Mapper层 1.3 功能测试1.3.1 接口文档测试1.3.2 前后端联调测试 1.4 …

深度卷积神经网络(AlexNet)

文章目录 简介 简介 AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。 AlexNet使用ReLU而不是sigmoid作为其激活函数。 import torch from torch import nnnet nn.Sequential(# 这里使用一个11*11的更大窗口来捕捉对象。# 同时,…

面试题:MySQL 优化篇

定位慢查询 💖 开源工具 调试工具:Arthas(阿尔萨斯)运维工具:Prometheus(普罗米修斯)、Skywalking 💖 MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

软件测试-基础篇

目录 1 软件测试的生命周期2 软件测试&软件开发生命周期3 如何描述一个bug4 如何定义bug的级别5 bug的生命周期5.1 bug状态转换图 6 如何开始第一测试7 测试的执行和BUG管理7.1 如何发现更多的bug 8 产生争执怎么办(处理人际关系) 1 软件测试的生命周…

插值字符串格式化代码中的感叹号(Python)

在csdn上读到,插值字符串格式化代码中有“!”,进行了一番探究,了解到其中的一点“隐秘”,在此共享。🤪 (笔记模板由python脚本于2024年03月31日 09:27:59创建,本篇笔记适合对Python字符串格式化有一定认知的…

竞技之道-打造成功竞技游戏的实战指南【文末送书】

文章目录 理解竞技游戏的本质游戏力:竞技游戏设计实战教程【文末送书】 在当今数字化时代,游戏已经不再是一种单纯的娱乐方式,而是成为了一门具有巨大商业潜力的产业。特别是竞技游戏,它们引领着全球数十亿玩家的潮流,…

书生·浦语训练营二期第二次笔记

1. 部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1 配置环境 创建conda环境,安装必要的库 studio-conda -o internlm-base -t demo # 与 studio-conda 等效的配置方案 # conda create -n demo python3.10 -y # conda activate demo # conda install pytorch2.0.…

智能文档合规检测系统:在央企国企招标采购领域的应用

一、背景介绍 在央企国企采购过程中,合规性是一个不可忽视的重要方面。采购方需要确保供应商的资质、业绩、规模等条件符合采购要求,同时避免设置不合理的条件限制或排斥潜在供应商。为了提高采购效率和确保合规性,智能文档合规检测系统应运…

ZKFair 步入Dargon Slayer 新阶段,未来还有哪些财富效应?

在当前区块链技术的发展中,Layer 2(L2)解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术,但它仍面临一些关键问题和挑战,例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…