当前位置: 首页 > news >正文

基于Maxwell的MySQL数据传输服务整体设计

这是学习笔记的第 2259 篇文章

读完需要

9

分钟

速读仅需7分钟

最近对整体的DTS(数据传输系统)做了整体的开发设计,目前在做的是从数据库到大数据库侧的数据传输对接,先放出来一部分抛砖引玉。

数据传输服务(DTS)支持关系型数据库、NoSQL、大数据等数据源间的数据传输。它是一种集数据迁移、数据同步及数据订阅于一体的数据传输服务。

本次主要围绕MySQL到Kudu的数据同步进行建设,采用基于 MySQL Binlog进行数据同步的解决方案,覆盖全量、增量、全量+增量三种同步模型,支持数据同步的秒级延迟,任务异常的断点续传,以及数据的不丢、不乱、不重;

1.系统整体设计

系统的整体设计图如下:

 

 

 

其中DTS为平台前端,可以采用专业前端团队支持。

数据传输系统DTS为独立的业务系统,目前为重新构建,为实现初步初版,基线版本为数据库运维系统的当前版本,后续只维护DTS侧相关逻辑。

其中DTS为了考虑后续的扩展性和可维护性,会基于reader,write,service三个大体的模块来构建,reader,writer可以根据具体的技术方向进行细分。

关联系统为数据库运维系统,任务系统,大数据管理系统,对于这些关联系统的元数据和部分逻辑功能会有相关调用。

整个数据传输服务流程中,一个基础的属性是task_code,这是在DTS任务新建,中端数据传输,后端服务集成中的共同属性,task_code的含义即为client_id,格式为:dts_[idc]_[maxwell_ip]_[maxwell_code],后端服务的topic会基于client_id附加数据库和表信息组合而成。

当在DTS前端页面中输入了基础信息(如数据库IP,端口等)后,会调用中端的服务接口生成相应的client_id,后端服务会根据DTS任务列表中的task_code为基准进行任务管理,而中端服务会根据client_id进行相应的同步对象配置管理/服务启停等操作。

相关的数据传输流如下:

 

 

 

2.中端管理设计

中端管理主要是基于Maxwell的部署管理,配置管理,同步对象列表变更,服务管理(启动,停止),服务自管理和监控报警,目前的实现主要基于API,初步实现本地前端。

2.1. 部署管理

部署管理主要是对Maxwell服务部署实现平台化管理,目前Maxwell应用服务器有2台,分别是130.200和130.201,档案数据库为Maxwell服务基础配置数据和Maxwell启动初始化的数据库基础元数据。

通过平台化部署能够实现如下的几个功能:

1)能够实现自动寻址,为Maxwell新增同步任务匹配相应的应用服务器,在后续新增应用服务器的情况下能够快速调整和适配

 

2)如果已在服务器A上部署了实例B的maxwell服务,则新增数据同步任务时,需要复用已有的maxwell服务配置,不需要在新的服务器中重新配置。

3)服务配置的基础准备工作,如Maxwell相关的账号和防火墙开通等工作,需要通过脚本化管理方式支持,以API形式提供接入,目前统一的maxwell接入账户为:dba_maxwell_repl

① 数据库主库Master端开通防火墙权限,创建相应的数据库账户

② 数据库从库Slave端开通防火墙权限

4)MySQL服务的拓扑管理基于数据库运维管理系统,需要封装相应的API得到Slave信息,同时需要在Maxwell配置列表中维护管理。

 

补充:

前置任务:

在130.201服务器上面部署Maxwell修正版服务

基于测试环境完成Maxwell的接入测试,producer为stdout

后续的开发可以参考如下的实现点:

① 完成Maxwell模板化配置

② 可以配置模板生成定制化配置,封装统一的启停脚本

③ Maxwell自动寻址逻辑,同一个实例只能复用一个Maxwell进程服务

④ Client_id生成逻辑

⑤ Maxwell code生成逻辑

⑥ 基于运维系统封装DTS侧的接口,实现防火墙开通管理和新建复制用户功能,新建用户在Master,权限开通在Master和Slave端

⑦ 对于stdout和Kafka配置,实现互斥逻辑

 

2.2. 配置管理

配置管理包含maxwell基础的配置文件,如config配置,日志配置和监控配置。目录规划设计如下:

 

可以在这个基础上进行服务的相应扩展。

Maxwell的基础配置依赖于client_id

ü client_id元数据命名

dts_[idc]_[maxwell_ip]_[maxwell_code]

如Maxwell部署在服务器 121.240,

Maxwell001为业务编码,可以映射到相应的数据库服务(如Slave),为了方便标识和 解析,不允许包含特殊符号,如下划线等

命名示例则为:dts_xxxx_121_240_maxwell001

对于实现细节可以整理为如下的部分:

1)支持根据模板配置化生成相应的maxwell配置文件,配置文件命名以client_id元数据命名,格式为:dts_[idc]_[maxwell_ip]_[maxwell_code].properties,配置文件部署在app_config目录下。

如Maxwell部署在服务器 130.200,

Maxwell001为业务编码,可以映射到相应的数据库服务(如Slave),为了方便标识和 解析,不允许包含特殊符号,如下划线等

命名示例则为:dts_xxxx_130_200_maxwell001.properties

2)对于Maxwell基础信息的配置,因为基于client_id,不便于显示源端的关联关系,该配置信息的管理需要统一在maxwell档案库中维护。

3)基础配置信息包括源端服务信息,源服务端口,复制账户信息,client_id,归属maxwell应用服务器,监控端口,过滤列表,bootstrap_type(sync,async), kafka配置信息等

4)基础配置管理需要实现本地前端

补充:

完成Maxwell服务列表和服务配置的平台化管理,后端均为API实现

如果任务配置发生变更时,服务列表和详情列表为一对多的关系,即需要保留已有的配置文件记录,然后将原记录状态置为失效,使得在出现异常回退的时候,该任务依然可以保证服务可用。

 

2.3. 同步对象列表变更

同步对象列表为数据传输中的重点管理对象,需要实现如下的功能:

1)对已有的maxwell服务新增表时,需要在已有的maxwell服务下进行扩展,修改同步对象列表,列表的修改模式为追加,暂不支持修改,删除等其他模式。

2)修改同步列表后,需要对maxwell服务进行重新启动,需要保证启动过程相对是平滑可控。

3)如同步列表刷新失败,需要能够快速回退,快速恢复数据传输服务。

4)配置文件版本管理和归档,对象变更前,需要对配置文件先做备份,并规范备份文件命名。

补充:

主要实现同步对象的修改和管理,添加相应的正则配置,调用明细管理的方法/接口

 

2.4. 服务管理

能够实现maxwell的启停管理功能,包含三个子选项;start,stop,restart

通过API模式进行服务状态检查,目前可以复用已有的开放接口

 

2.5. 服务自启动

在传输链路中,如果因为源端服务异常,maxwell侧异常或者后端传输服务异常,会导致Maxwell服务异常终止,需要通过探测的模式进行检查复核,确认后重新拉起服务,保证maxwell服务的持续性。

补充:

开发相应的脚本,能够进行服务状态检测,并复用已有监控的API进行数据传输状态的检测。

 

3.6. 监控报警

监控报警为maxwell基础保障功能,需要完成对Maxwell服务的数据传输监控,解析binlog的吞吐量,下推Kafka的吞吐量等,并对数据传输异常,服务异常等异常场景进行报警提示。

补充:

配置相应的报警明细项目,设定阈值,进行报警配置

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。

   

近期热文

你可能也会对以下话题感兴趣。点击链接就可以查看。

相关文章:

  • 迁移到MySQL的语法转换工具初步设计
  • MySQL空间报警后的一揽子解决方案
  • 超12万人申请北京积分落户,顺带分析了一波近年的数据
  • MySQL中insert阻塞问题的分析
  • MySQL数据延迟跳动的问题分析
  • 彻底取代Redis+数据库架构,京东618稳了!
  • 一个扭蛋的故事
  • 做一次完美的数据迁移
  • 招贤纳士-第16期,来自北京和成都的职位
  • MySQL安装部署,从半成品状态的改进
  • 从SQL Server到TiDB的架构设计及对数据中台的思考
  • 近期的状态小结和最近要做的一些事情
  • 一次完整的JVM堆外内存泄漏故障排查记录
  • 35岁老码农:老板,你看我还有机会吗?
  • 打算搞一个简单的开源项目mysql_lite
  • #Java异常处理
  • CentOS 7 修改主机名
  • Java 网络编程(2):UDP 的使用
  • js中的正则表达式入门
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python3爬取英雄联盟英雄皮肤大图
  • underscore源码剖析之整体架构
  • vuex 学习笔记 01
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue小说阅读器(仿追书神器)
  • Yii源码解读-服务定位器(Service Locator)
  • 坑!为什么View.startAnimation不起作用?
  • 老板让我十分钟上手nx-admin
  • 前端技术周刊 2019-01-14:客户端存储
  • 深度学习在携程攻略社区的应用
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 译有关态射的一切
  • Java总结 - String - 这篇请使劲喷我
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (1)(1.11) SiK Radio v2(一)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)图像的%2线性拉伸
  • (一)基于IDEA的JAVA基础1
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .Net中wcf服务生成及调用
  • .Net中间语言BeforeFieldInit
  • @JoinTable会自动删除关联表的数据
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ C++ ] STL---stack与queue
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [20150321]索引空块的问题.txt
  • [Android 13]Input系列--获取触摸窗口
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [C#基础]说说lock到底锁谁?