翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

news2024/11/20 0:55:10
引言:自2021年起,翼鸥教育便开始应用OceanBase社区版,两年间,先后部署了总计12套生产集群,其中核心集群占比超过四分之三,所承载的数据量已突破30TB。自2022年10月,OceanBase 社区发布了4.2.x 版本,其单机效能、数据压缩实力及AP分析能力等核心功能进行了整体升级,深深吸引了我们的目光。于是,在4.2.1 LTS版正式面世后,我们立刻启动了升级计划,目前已经从最初的OceanBase 3.1.4升级到4.2.1 版本。
本文分享我们在版本升级过程中积累的一些经验,供大家参考。

家里有孩子的朋友或许对翼鸥教育的核心产品“ClassIn在线教室”比较熟悉。作为应用于150多个国家的全球教与学一体化平台,ClassIn 为学生提供从课前到课后的智慧服务,以及从软件到硬件的配套设施。此外,翼鸥教育旗下还有TeacherIn、NOBOOK 等众多优质的教育科技产品。

翼鸥教育应用OceanBase的起因是想解决MySQL带来的问题。众所周知,MySQL读出现瓶颈时,可以通过扩展从库轻松解决,但遇到写瓶颈的时候就比较难办了。尤其是单机数据增长到2TB以上,写能力愈发受限,数据处理效率也逐渐变低。这时我们会想到分库分表方案,但分库分表无法从根本解决问题。业务连续性也是一个问题,MySQL的高可用能力依赖外部组件,需要投入专门的人力去维护。因此,当我们了解到OceanBase多分区的灵活扩展能力、高数据压缩率以及金融级高可用后,我们怎么会不选择它呢?

我们为什么选择将OceanBase从 3.1.4版本升级到4.2.1版本?

在上线OceanBase 3.1.4版本后,我们陆续部署了12套生产集群,其中超过3/4的集群是核心集群,数据量超30TB。上线之后,OceanBase 3.1.4的确为我们解决了不少难题,在灵活扩展、数据库压缩和高可用等方面的表现优异。

OceanBase在翼鸥教育的应用场景如下图所示,翼鸥教育的应用通过访问SLB(服务器负载均衡)再连接到OceanBase生产集群。在大数据场景下,由于OceanBase 3.1.4版本AP性能较弱,我们将上游数据通过OMS工具同步至OceanBase集群,在实时场景使用OMS将数据同步至Kafka,在离线场景使用Data X将数据抽取到大数据的数仓系统中进行分析。

1723630763

俗话说没有一款产品是万金油,OceanBase 3.1.4在我们的业务场景中逐渐显现出一些不足。

1.      DDL支持不完善。OceanBase的DDL速度非常快,但在3.x版本支持不够完善,比如向上兼容不支持text-> medium text,再比如不支持int -> varchar的列类型修改。

2.      字符集支持不完善。由于历史原因,我们使用的字符集没有用OceanBase 支持的 utf8mb4_general_ci,而是 utf8mb4_bin字符集,导致我们使用OMS在上游加字段时,下游的大数据集群就会发生数据迁移任务的中断。

3.      大IN支持不友好。例如在MySQL中 IN 包含 80万个值,查询只需10ms,而在OceanBase 3.1.4版本中需要5s,是因为时间主要消耗在查询解析方面。OceanBase 4.2版本后对这方面做了优化,性能提升明显。

4.      分区数太多影响性能。当分区数超过30000后,响应时间下降明显。

5.      数据膨胀问题。OceanBase的降本增效的效果非常显著,原来MySQL集群中6TB数据迁移到OceanBase后缩减到了1TB。但我们发现集群使用一段时间后,数据存在空间放大的问题。比如本来一年增长1.5TB,但集群膨胀了4T。

6.      物理备份不支持S3。S3是可以充分利用网络带宽且价格优惠的存储方式,但OceanBase 3.1.4版本仅支持nfs,未支持S3。

基于上述使用方面的不足,我们决定升级到OceanBase 4.x版本。

升级至OceanBase 4.2.1版本的流程和效果

从版本选型到版本升级,我们历经四个阶段:版本选型、功能和性能测试、组件升级、集群升级。

第一阶段:版本选型。

选择版本时我们主要考虑五个因素。

  • 功能:新版本能否满足当前业务需求?
  • 性能:新版本性能相较于旧版本性能提升多少?
  • 稳定性:新版本是否足够稳定,有没有bug?
  • 兼容性:迁移后与旧的集群是否兼容?
  • 产品生命周期:新版本是否为官方长期支持版本?

针对上述问题,我们结合应用场景需求,对OceanBase 4.x版本特性与升级点进行了分析,认为新版本相较于旧版本性能有显著的提升,能够更好地满足当前场景的需求。且OceanBase 4.2版本是长期支持版本。长期支持版本经过多次迭代,遇到的问题较少;创新版本经过几个版本的迭代和修复,也会渐趋稳定。兼容性方面,因为我们是从OceanBase低版本升级到高版本,所以兼容性良好。

第二阶段:功能和性能测试。

在MySQL环境中,我们可以使用tcpcopy进行流量回放来进行业务验证。然而,在OceanBase中,业务是以租户为单位的,如果直接采集流量,会涉及多个租户。为了方便实现,我们自己开发了一个代理(Agent),实时将SQL_audit中的SQL同步到Kafka。在目标端,可以启动多个Agent读取select语句来并行进行回放,并观察目标端是否受到影响。

1723630789

我们基于gopacket抓包。再进行mysql ps数据解析,经过解析的PS协议及其参数的结果存在Redis,最后通过Agent读取Redis回放。这样可以让我们提前发现业务迁移中可能存在的问题,比如执行计划是否变慢、是否有不兼容问题等。

在迁移前,我们通过sysbench压测观察OceanBase新版本相较于旧版本的性能提升度。我们的服务器规格都是64C/512G,但此处仅基于16C/96G的业务租户配置进行压测。从下图可见,OceanBase 4.2.1版本较OceanBase 3.1.4版本性能提升3倍左右,即使在读写比7:3的场景下,新版本的性能更优,也更为稳定。

1723630834

此外,保险起见,我们基于JMeter,使用CSV动态生成参数的方式对生产线接口进行压测(线上租户配置为3节点16C/96G )。结果如下图所示,OceanBase 4.2.1版本较OceanBase 3.1.4性能提升2倍左右。

1723630855

第三阶段:组件升级。

在确定版本升级后,我们先对组件进行升级,以下是我们在升级过程中的一些经验总结,供大家借鉴:

1. 如何解决长期未使用的Agent导致升级OCP时报错的问题:

具体而言,显示ocp-server-ce:check_operation_task未通过,The Server have running task。这是因为我们升级OCP时使用的Agent经久未用导致无法回滚,所以我们在它的原数据库中更新状态就可以了:update task_instance set state='SUCCESSFUL' where id in (父任务id);

2. 如何针对OMS Store 进行性能调优:

作为OMS的重度用户,OMS store可以理解为一个binlogservice的webservice,并且store内部有OB CDC模块。该模块包括数据消费模块和拉取日志模块。消费日志线程(cdc)会从多个OBServer中拉取clog并排序,存储到内存中。此时,CDC拉取日志模块会消费内存中数据,并将其落盘。然而,由于最初使用的是机械硬盘,默认的storage即机械盘,导致落盘速度较慢。为了进行性能调优,我们将参数storage调整为内存,并且将OB CDC使用的内存限额从20G调整为40G。此外,为了及时更新心跳时间,我们还将DDL当前拉取日志的上限(progress_limit_sec_for_ddl)从3600秒调整为60秒。

3. 如何解决OMS迁移和同步任务延迟问题:

在OMS的迁移流程中,首先会启动OMS store,以保证后续DBA能成功取到增量数据。然后,全量迁移流程随之启动,待全量迁移和全量校验完成后,再启动增量数据迁移和校验流程。在这个流程中,我们经常遇到数据迁移慢、校验时间长的问题,以及数据同步到Kafka

延迟的问题。究其原因,不同场景采用默认参数,速度不及预期,我们可以通过调整参数来解决上述问题。

在数据迁移和校验场景,速度慢的时候我们通常会想到调整线程数或切片大小,以读取更多数据。但是读取更多数据就意味着内存需要更大的承载量,所以我们要把JVM参数调高。

常用调参:

•       workerNum | limitator.platform.threads.number

•       sliceBatchSize | limitator.select.batch.max

•       connectorJvmParam       | task.checker_jvm_param

应用场景调参:

•       sliceByMinMax: false(id不连续)

•       sliceByMinMax: true(id连续)

在数据同步sink到Kafka场景下,如果速度较慢,可能是由于分片算法的影响,导致OBServer的I/O较高。这是slicebyminmax的原因,通常情况下,我们的跑批操作类似数据库工具pt和ghost,它们基于范围100~~10000不断向前滚动。然而,有时我们的自身ID包括业务使用的UUID,它可能是不连续的,这会导致读取I/O较高。在这种情况下,需要关闭切片的slicebyminmax设置,这样可以提高数据同步速度。如果仍然无法满足预期,在机器的支持能力足够的情况下,还可以调整批处理的大小,每次读取更多的数据。

另外还需要调整JVM的内存。在这个场景下,开发人员都知道,对于插入操作,可以很容易地进行批量处理。但对于更新和删除操作,就不那么容易进行批量处理。因此,需要根据上游的情况如是否有大事务等,动态调整参数,尤其是针对insert和update的比例。首先消除最重要的瓶颈,然后再调整其它常用的参数,特别是在OMS中将增量同步到大数据库的情况下。我们采取了大数据库的lock_time默认值,并将OceanBase的ob_query_time参数设置得比较大,因为锁的释放时间根据ob_query_time来确定,可能会导致长时间被锁住的情况,进而使jdbc的writer的点位不更新。实际上,数据仍然会持续写入目标端。

常用调参

•       workerNum

•       maxRecordCapacity

•       connectorJvmParam

应用场景调参

•       splitThreshold(insert攥批效率高;update和delete不能批量,拆开效果好)

4.如何解决4018错误码报错:

在使用OceanBase的过程中,让我们最困扰的问题是4018错误码,这也是版本升级的直接原因。当出现4018错误码的时候,一个zone中两个机器只有一个机器节点报错,无法请求,导致业务报错。短期解决方法是重启报错的机器节点,而从长远来看,升级版本才能彻底解决问题。我们升级到OceanBase 4.2.1.3 版本后,再没有遇到过4018问题。

1723630907

第四阶段:集群升级。

在集群升级的过程中,我们仍然保持谨慎的态度,分为准备、生产上线、整体回归、收尾操作四个步骤,升级成功后整体效果满足预期:

  • 新版本的DDL支持完善,解决了旧版本的DDL问题,且性能得到较大提升;
  • 数据被进一步压缩,比如300GB数据迁移到新版本后压缩至200GB,存储空间得到释放;
  • 新版本的备份支持S3,使我们可以充分利用网络带宽;
  • 数据从OMS同步到Kafka,性能提升7倍。

至于上文提到的字符集支持问题,可能是OB server带来的,在OMS迁移的部分场景中仍会出现任务中断的现象。

总结与规划

目前,我们把8套核心集群都升级到了OceanBase 4.2.1版本,升级经验总结如上。而在我们从上线到使用OceanBase期间,有五点应用经验可供大家参考。

第一,   在我们使用OceanBase的过程中,跑批是业务经常做的工作。经验指出,跑批或数据更新时,尽量指定分区,避免跨节点分布式事务。

第二,   尽可能使用本地索引以节省开销,因为全局索引更新需要分布式事务,所以在唯一性或者多维场景下使用全局索引。

第三,   针对副本切主,OBServer事务查杀有重试逻辑,业务同学要能够及时捕获异常,利用分布式特性和发挥分区并行的优势,避免业务报错。

第四,   在OLAP环境下可以充分利用并行提升查询速度,建议单个分区小于50GB。

第五,   此前人工排查问题时速度比较慢,obdiag推出后,问题定位和日志分析都变得方便、简单,在此推荐大家充分利用这个工具。

后续,我们会把剩余OceanBase集群都升级到4.2.1版本。同时,随着OceanBase 4.3版本AP能力的提升,我们也考虑将大数据集群升级到该版本。


OceanBase 云数据库现已支持免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Ubuntu 22.04 上安装 ownCloud

简介 ownCloud 是一个开源的个人云存储平台,它允许用户在本地服务器上存储和同步文件,提供了一个类似于 Dropbox 或 Google Drive 的服务,但是更加注重隐私和数据控制。以下是 ownCloud 的一些基础使用简介: 文件存储&#xff1…

使用Mybatis向Mysql中的插入Point类型的数据全方位解析

1. 结果 希望每一个能够看到结果的人都能自己装载进去!加油! 2.代码 2.1TestMapper import org.apache.ibatis.annotations.*; import java.util.Date; import java.util.List;/*** author Administrator*/ Mapper public interface TestMapper {/*…

web——sqliabs靶场——第六关——报错注入和布尔盲注

这一关还是使用报错注入和布尔盲注 一. 判断是否有sql注入 二. 判断注入的类型 是双引号的注入类型。 3.报错注入的检测 可以使用sql报错注入 4.查看库名 5. 查看表名 6.查看字段名 7. 查具体字段的内容 结束 布尔盲注 结束

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…

数据结构(基本概念及顺序表——c语言实现)

基本概念: 1、引入 程序数据结构算法 数据: 数值数据:能够直接参加运算的数据(数值,字符) 非数值数据:不能够直接参加运算的数据(字符串、图片等) 数据即是信息的载…

一.安装版本为19c的Oracle数据库管理系统(Oracle系列)

1.数据库版本信息: 版本信息: 或者直接由命令查出来: 2.操作系统的版本信息 3.安装包下载与上传 可以去oracle官网下载也可以从其他人的百度网盘链接中下载: 使用xftp工具或者其他的工具(mobaxterm)上传到l…

从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望

作者:金峰(项良)、朱永林、赵世振(寰奕) 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月,是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…

说说软件工程中的“协程”

在软件工程中,协程(coroutine)是一种程序运行的方式,可以理解成“协作的线程”或“协作的函数”。以下是对协程的详细解释: 一、协程的基本概念 定义:协程是一组序列化的子过程,用户能像指挥家…

MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准

随着 AI 和机器学习的需求不断加速,数据中心网络正在迅速发展以跟上步伐。对于许多企业来说,400GbE 甚至 800GbE 正在成为标准选择,因为数据密集型和时间敏感型 AI 工作负载需要高速、低延迟的数据传输。用于大型语言处理、实时分析和计算机视…

怀旧游戏打卡清单(TODO)

感觉忙碌了好久好久,真的好想休息一下。。 整理一下将来休息时候的打卡清单,不工作了去个海边狂打游戏,想想就惬意啊。当然,最好找个work from home,去海边找个酒店上班。挣钱休息两不误。。。 能不能实现另说&#xf…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果: – 使用Pygame模拟粒子运动,粒子会以爱心的轨迹分布并运动。爱心公式: 爱心的数学公式: x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果: 粒子…

使⽤MATLAB进⾏⽬标检测

目录 数据准备定义模型并训练用测试集评估性能推理过程⼀⾏代码查看⽹络结构⼀⾏代码转onnx结语 ⼈⽣苦短,我⽤MATLAB。 Pytorch在深度学习领域占据了半壁江⼭,最主要的原因是⽣态完善,⽽且api直观易⽤。但谁能想到现在MATLAB⽤起来⽐Pytorch…

word-毕业论文的每一章节的页眉单独设置为该章的题目怎么设置

在Microsoft Word中,为毕业论文的每个章节设置不同的页眉,通常需要使用“分节符”来分隔各个章节,然后在每个章节中单独设置页眉。以下是详细步骤: 使用分节符 插入分节符: 将光标放在每个章节的末尾(注意…

【简历】25届江苏二本JAVA简历:本末倒置,重点部分格式错误,不重要的写了一堆

简历总体说明 校招的第一法则就是必须要确定校招层次。 开发岗分为大中小厂,不同的层次对学校背景、时间点、项目和考点的要求都不太一样,所以必须要确定就业的层次。 这是一个25届二本同学的JAVA简历。 最近不知道怎么回事,看两份简历都…

字母异位词分组(java)

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单shilie 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "n…

fpga spi回环

SPI设备间的数据传输之所以又被称为数据交换,是因为 SPI协议规定一个 SPI设备 不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)“或者"接收者 (Receiver)”.在每个 Clock 周期内,SPI 设备都会发送并接收一个 bit 大小的数据(不管主 设备好还是从设备),相当于…

计算机网络-理论部分(二):应用层

网络应用体系结构 Client-Server客户-服务器体系结构:如Web,FTP,Telnet等Peer-Peer:点对点P2P结构,如BitTorrent 应用层协议定义了: 交换的报文类型,请求or响应报文类型的语法字段的含义如何…

路由器基本原理与配置

一 , 路由是什么? 从源主机到目标主机的转发过程; 二 , 路由器 (1)路由器的工作原理 路由器是一种三层设备,是使用IP地址寻址,实现从源IP到达目标IP地址的端到端的服务&#xff0c…

windows的WSL Ubuntu子系统重置root或其他用户的密码

思路:以管理员身份运行PowerShell,在命令行窗口重置密码 ,不需要删除或重新安装Linux子系统。 1、以管理员身份运行PowerShell 2、用root用户启动Ubuntu,执行 wsl.exe --user root 3、重置密码,执行passwd username&…

autoDL微调训练qwen2vl大模型

autodl是一家GPU服务厂商,提供专业的GPU租用服务,秒级计费、稳定好用 先去autodl把官方的帮助文档看懂先 AutoDL帮助文档 autodl注册并登陆,充钱,根据自己的情况租用新实例 创建新实例后马上关机,因为有个省钱的办法…