1背景
计费数据量剧增,需要将老库进行数据拆分到多个分库,数据分片;
拆分规则为收付款对象(或ID)字段,进行HASH,取模(32),分32个库
2目标
实现数据从老库,按照分片规则,迁移到分库中
保证数据平滑迁移,尽量停产时间最小
支持回滚,同步失败,支持回滚单库
3方案
3.1基于蜂巢中间件实现
3.2半自研同步数据处理程序
开发数据处理程序,消费历史数据MQ;消费增量数据MQ
基于dts同步历史数据(指定时间位点,同步历史)
基于JDQ同步实时数据(指定时间位点,恢复实时同步)
3.3基于开源中间件策略
3.4完全自研数据处理工具
开发数据查询程序,历史数据查询发送MQ写入
实时数据双写
统一发送MQ,由MQ异步处理写入
3.5方案对比
综上整体评估,我们最终选取,基于sharding-proxy做数据迁移整体方案
4Proxy介绍与搭建
4.1简介
4.1.1设计意义
定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前提供MySQL和PostgreSQL(兼容openGauss等基于PostgreSQL的数据库)版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQLCommandClient,MySQLWorkbench,Navicat等)操作数据,对DBA更加友好。
向应用程序完全透明,可直接当做MySQL/PostgreSQL使用;
适用于任何兼容MySQL/PostgreSQL协议的的客户端。
4.1.2整体架构
整个架构可以分为前端、后端和核心组件三部分。
前端负责与客户端进行网络通信,采用的是基于NIO的客户端/服务器框架,在Windows和Mac操作系统下采用NIO模型,Linux系统自动适配为Epoll模型。通信的过程中完成对MySQL协议的编解码。核心组件得到解码的MySQL命令后,开始调用Sharding-Core对SQL进行解析、路由、改写、结果归并等核心功能。后端与真实数据库的交互目前借助于Hikari连接池。
4.2搭建
4.2.1关键字解读
下载,解压,安装mysql驱动,启动,完事
4.2.2安装shareding-proxy
安装包下载,选择合适版本(本文选用4.1.1),在