3.1 基于蜂巢中间件实现
3.2 半自研同步数据处理程序
3.3 基于开源中间件策略
3.4 完全自研数据处理工具
3.5 方案对比
综上整体评估,我们最终选取,基于 sharding-proxy 做数据迁移整体方案
4.1 简介
4.1.1 设计意义
定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL(兼容 openGauss 等基于 PostgreSQL 的数据库)版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。
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),在官网进行下载,官网地址 https://shardingsphere.apache.org/document/current/cn/downloads
4.2.3 安装 mysql 驱动
将 mysql 的驱动 jar 包 (mysql-connector-java-5.1.44.jar) 放在 shareding-proxy 的 lib 目录下 ShardingSphere-Proxy 不带 mysql 驱动 jar 包,需要手动下载
下载地址 https://dev.mysql.com/downloads/connector/j/
4.2.4 proxy 启动
shareding-proxy 的 bin 目录 start.sh,通过./start.sh 启动
4.2.5 Remark
Sharding-Proxy 默认的启动端口是 3307
4.3 配置
4.3.1 关键字解读
六大配置 —— 日志配置 (logback.xml),基础服务配置 (server.yaml),逻辑配置 (四个 conf 配置文件,分片(核心)/ 影子 / 读写分离 / 加密配置)
本例基于 server.yaml、config-sharding.yaml 配置分片策略
4.3.2 server.yaml
基础服务配置,三部分组成
1)shareding-jdbc 的编排治理配置,提供数据治理功能,包含如下:
2)权限配置,配置用户名和密码以及授权数据库
配置数据链接,线程,核数等
4.3.3 config-sharding.yaml
shareding-proxy 核心配置,分片规则相关配置,包含 schemaName、dataSources、shardingRule 三部分
1)下图逻辑库对应分库数据源的映射配置
4.3.4 logback.xml
基于 logback 的日志配置
4.3.5 剩余三项配置
config-shadow.yaml/config-master_slave.yaml/config-encrypt.yaml
分别为影子库配置,主从配置,数据字段加密配置,有意可以自行看下文链接
基于搭建 ShardingSphere-Proxy 代理选择直连工具客户端
查询不带拆分键默认搜全库,新增默认根据拆分键路由对应真实库
迁移三步
1)线上安装 sharding-proxy
2)数据同步:创建迁移任务,启动同步,原理即是创建 DTS 任务
3)数据完整性校验
基于 easyops 或者 myops 配置物流指定查询机,通过查询机查询 proxy 代理实现
整体数据迁移过程中遇到的最大的问题即是数据不可测,针对各种历史数据问题导致数据迁移中断,造成返工,清理垃圾数据,重新迁移
8.1 拆分键为空
拆分键为空默认不支持
8.2 更新拆分键
更新语句默认不支持更新拆分键 (实际 4.x 不支持更新带拆分键,5.x 已经支持更新带拆分键不改的情况下)
Unknown exception: [INSERT INTO …. ON DUPLICATE KEY UPDATE can not support update for sharding column.]
8.3 针对以上俩种异常的解决方法
拆分键不能为空,设置默认拆分键
更新带拆分键,升级 sharding-proxy 到 5.x 或配置同步 DTS 去掉拆分键更新
作者:任洪波