TiDB Data Migration (DM) 集群部署实战
一、TiDB Data Migration (DM) 工具简介
TiDB Data Migration (DM)是一体化的数据迁移任务管理工具, 支持从与 MySQL 协议兼容的数据库(MySQL、 MariaDB、Aurora MySQL) 到TiDB 的数据迁移, 支持全量的数据载入和增量的数据传输,同时可以进行表与操作的过滤,并且可以进行分库分表的合并迁移。使用 DM 工具有利于简化数据迁移过程,降低数据迁移运维成本。
二、TiDB Data Migration (DM) 架构
DM 主要包括三个组件:DM-master,DM-worker 和 dmctl。
1、DM-master 负责管理和调度数据迁移任务的各项操作。
- 保存 DM 集群的拓扑信息
- 监控 DM-worker 进程的运行状态
- 监控数据迁移任务的运行状态
- 提供数据迁移任务管理的统一入口
- 协调分库分表场景下各个实例分表的 DDL 迁移
2、DM-worker 负责执行具体的数据迁移任务。
- 将 binlog 数据持久化保存在本地
- 保存数据迁移子任务的配置信息
- 编排数据迁移子任务的运行
- 监控数据迁移子任务的运行状态
3、dmctl 用来控制 DM 集群的命令行工具。
- 创建、更新或删除数据迁移任务
- 查看数据迁移任务状态
- 处理数据迁移任务错误
- 校验数据迁移任务配置的正确性
注意:
一个DM-worker对应一个上游数据源,如果一个有问题free的顶替,因此具有高可用性。DM-master也具有高可用性且一个也可以。管理和调度数据迁移任务。
三、TiDB Data Migration (DM) 原理
支持DML & DDL同步复制、支持合库合表同步复制、内置过滤器、集中管理、高可用。
四、TiDB Data Migration (DM) 数据迁移工具特性
- 与 TiDB 同样保持 MySQL 兼容性。高度兼容 MySQL 协议、MySQL 5.7 和 MySQL 8.0 的常用功能及语法。
- 支持 DML & DDL 事件同步。支持解析和同步 binlog 中的 DML 和 DDL 事件。
- 支持合库合表同步模式。可以方便的将上游各个分片 MySQL 实例的各个分表数据,合并同步到下游 TiDB 的一张表。支持自定义编写同步规则以方便各种可能的同步需求,且具备自动识别和处理上游分片 MySQL 的 DDL 变更,大幅简化运维成本。
- 内置多种过滤器以灵活适应不同场景。支持以预定义事件类型、正则表达式、SQL 表达式等多种方式在数据同步过程中对 MySQL binlog 事件进行过滤。
- 集中管理。DM 支持上千个节点的集群规模,可同时运行并集中管理大量数据迁移同步任务。
- 对第三方 Online Schema Change 工具变更过程的同步优化。在 MySQL 生态中,gh-ost 与 pt-osc 等工具被广泛使用,DM 对其变更过程进行了特殊的优化,以避免对不必要的中间数据进行迁移。详细信息可参考 online-ddl。
- 高可用。支持迁移任务在不同节点自由调度,少量工作节点宕机并不会影响进行中的任务。
使用场景 | 用于将数据从与 MySQL 协议兼容的数据库迁移到 TiDB |
|---|---|
上游 | MySQL,MariaDB,Aurora |
下游 | TiDB |
主要优势 | 一体化的数据迁移任务管理工具,支持全量迁移和增量同步 支持对表与操作进行过滤 支持分库分表的合并迁移 |
使用限制 | 数据导入速度与 TiDB Lightning 的逻辑导入模式大致相同,而比 TiDB Lightning 的物理导入模式低很多。建议用于 1 TB 以内的存量数据迁移。 |
五、TiDB Data Migration (DM) 适用场景
- 从兼容MySQL的数据库迁移同步数据,支持全量+增量。
- 源库表与目标库异构表的迁移(只要有包含关系)。
- MySQL分表分库的合并迁移数据到TiDB(数据量小于1TB)。
六、TiDB Data Migration (DM) 使用限制
- 源数据库版本要求
MySQL 版本 5.5 ~ 5.7,MySQL 版本 = 8.0(实验特性),MariaDB 版本 >= 10.1.2 (实验特性)。
- DDL语法兼容性限制
目前,TiDB部分兼容MySQL 支持的DDL语句。因为 DM 使用 TiDB parser 来解析处理 DDL 语句,所以目前仅支持 TiDB parser 支持的 DDL 语法。详见 TiDB DDL 语法支持。
- GBK字符集兼容性限制
在 v5.4.0 之前不支持将 charset=GBK 的表迁移到 TiDB。
- 分库分表
如果业务分库分表之间存在数据冲突,自增主键冲突处理来解决。
- 同步的 MySQL 实例变更
七、TiDB Data Migration (DM) 工具部署与使用
1、软硬件配置要求
TiDB Data Migration (DM) 支持主流的 Linux 操作系统如下:
Linux 操作系统 | 版本 |
|---|---|
Red Hat Enterprise Linux | 7.3 及以上 |
CentOS | 7.3 及以上 |
Oracle Enterprise Linux | 7.3 及以上 |
Ubuntu LTS | 16.04 及以上 |
DM 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器平台。对于开发,测试,及生产环境的服务器硬件配置(不包含操作系统本身的占用)有以下要求和建议:
生产环境建议:
组件 | CPU | 内存 | 硬盘类型 | 网络 | 实例数量(最低要求) |
|---|---|---|---|---|---|
DM-master | 4 核+ | 8 GB+ | SAS,200 GB+ | 千兆网卡 | 3 |
DM-worker | 16 核+ | 32 GB+ | SSD,200 GB+(大于迁移数据的大小) | 万兆网卡 | 大于上游 MySQL 实例的数量 |
监控 | 8 核+ | 16 GB+ | SAS,200 GB+ | 千兆网卡 | 1 |
注意
在生产环境中,不建议将 DM-master 和 DM-worker 部署和运行在同一个服务器上,以防 DM-worker 对磁盘的写入干扰 DM-master 高可用组件使用磁盘。
在遇到性能问题时可参照配置调优尝试修改任务配置。调优效果不明显时,可以尝试升级服务器配置。
目标 TiKV 集群必须有足够空间接收新导入的数据。除了标准硬件配置以外,目标 TiKV 集群的总存储空间必须大于 数据源大小 × 副本数量 × 2。例如集群默认使用 3 副本,那么总存储空间需为数据源大小的 6 倍以上。
本次实验环境配置一台中控机作为TiUP环境,三台虚拟机各部署一个DM-master、DM-worker集群。
节点名称 | 操作系统版本 | Ip地址 | 备注 |
|---|---|---|---|
DM-master | Redhat7.8 | 192.168.126.231~233 | DM集群节点 |
DM-worker | Redhat7.8 | 192.168.126.231~233 | DM集群节点 |
监控 | Redhat7.8 | 192.168.126.231 | DM集群节点 |
TiUP | Redhat7.8 | 192.168.126.110 | DM集群管理节点 |
2、TiDB Data Migration (DM) 的部署
说明:
- 在单机部署多个 DM-master 或 DM-worker 时,需要确保每个实例的端口以及运行命令的当前目录各不相同。
- 如果不需要确保 DM 集群高可用,则可只部署 1 个 DM-master 节点,且部署的 DM-worker 节点数量不少于上游待迁移的 MySQL/MariaDB 实例数。
- 如果需要确保 DM 集群高可用,则推荐部署 3 个 DM-master 节点,且部署的 DM-worker 节点数量大于上游待迁移的 MySQL/MariaDB 实例数(如 DM-worker 节点数量比上游实例数多 2 个)。
- 需要确保以下组件间端口可正常连通:
各 DM-master 节点间的 8291 端口可互相连通。
各 DM-master 节点可连通所有 DM-worker 节点的 8262 端口。
各 DM-worker 节点可连通所有 DM-master 节点的 8261 端口。
dmctl dm安装
方法一、使用TiUP 执行tiup install dm dmctl 命令
查看已安装的组件
查看能安装的组件
查看能安装的dm dmctl版本
安装dm dmctl组件
查看安装的信息
#查看最新可用版本
tiup list dm-master |dm-worker
方法二、tidb-commun ity-toolkit安装包
下载相关toolkit工具包并配置环境变量
- 解压工具包
- 配置环境变量
$ vi .bash_profile
添加如下:
export PATH=/home/tidb/.tiup/bin:$PATH:/usr/local/mysql/mysql-8.0/bin:/home/tidb/tidb-community-toolkit-v7.5.1-linux-amd64
$ source .bash_profile
- 查看dm版本信息
$ dm --version
3、使用 TiUP 部署 DM集群
1. 编辑初始化配置文件
生成配置文件模板
$ tiup dm template >topology_dm_node3.yaml
2. 执行部署命令
执行部署命令
tiup dm deploy dm_cluster v7.5.1 topology_dm_node3.yaml --user tidb
输入y继续
3. 查看集群信息
tiup dm list
4. 检查集群运行情况
tiup dm display${name}
5. 启动集群
tiup dm start ${name}
6. 检查集群运行情况
tiup dm display${name}
7.关闭集群
tiup dm stop ${name}
4、使用 TiUP 运维 DM 集群
tiup dm –help可以了解dm组件相关参数比如部署、启停、扩容、缩容等
1. 缩容节点
缩容即下线服务,最终会将指定的节点从集群中移除,并删除遗留的相关数据文件。
缩容操作进行时,内部对 DM-master、DM-worker 组件的操作流程为:
- 停止组件进程
- 调用 DM-master 删除 member 的 API
- 清除节点的相关数据文件
缩容命令的基本用法:
tiup dm scale-in <cluster-name> -N <node-id>
它需要指定至少两个参数,一个是集群名字,另一个是节点 ID。节点 ID 可以参考上一节使用 tiup dm display 命令获取。
举例如下:
查看DM集群信息
缩容dm-worker节点
tiup dm scale-in dm_cluster -N 192.168.126.233:8262
查看DM集群信息
缩容dm-master节点
tiup dm scale-in dm_cluster -N 192.168.126.233:8261
查看DM集群信息
2. 扩容节点
扩容的内部逻辑与部署类似,TiUP DM 组件会先保证节点的 SSH 连接,在目标节点上创建必要的目录,然后执行部署并且启动服务。
例如,扩容一个DM-master和DM-worker节点:
新建 topology_dm_scale_out.yaml 文件,添加新增的 woker 节点信息:
注意
需要新建一个拓扑文件,文件中只写入扩容节点的描述信息,不要包含已存在的节点。
其他更多配置项(如:部署目录等)请参考 TiUP 配置参数模版。
执行扩容操作。
TiUP DM 根据 topology_dm_scale_out.yaml 文件中声明的端口、目录等信息在集群中添加相应的节点:
tiup dm scale-out dm_cluster topology_dm_scale_out.yaml --user tidb
输入y继续
执行完成之后可以通过 tiup dm display dm_cluster 命令检查扩容后的集群状态。
3. DM 集群启停
DM集群启动
tiup dm start ${name}
DM集群停止
tiup dm stop ${name}
DM集群重启
tiup dm restart ${name}
4. DM 集群卸载
当业务下线之后,如果想将集群占有的机器释放出来让给其他业务使用,需要清理掉集群上的数据以及部署的二进制文件。tiup dm destroy 命令会执行以下操作销毁集群:
- 停止集群
- 对于每个服务,删除其日志目录,部署目录,数据目录
- 如果各个服务的数据目录/部署目录的父目录是由 tiup-dm 创建的,也一并删除
举例如下:
八、问题及总结
问题一、部署中异常宕机
解决办法:
# su – tidb
$ cd /home/tidb/dm/deploy/
$ rm -rf dm-worker-8262
问题二、部署中报ssh失败
解决办法:
确保相关节点正常启动并配置SSH互信
问题三、缩容DM-master报错
解决办法:
高可用master至少2个,无法继续缩容,如果需要单节点,重新创建单节点DM。
DM作为一款数据迁移工具实现多种MySQL兼容数据库(包括MySQL、MariaDB、Aurora MySQL)到TiDB的全量及增量数据迁移,部署也相对简单,是一款优秀的迁移工具。




