写点什么

生态工具原理学习笔记 (笔记)

  • 2022 年 7 月 11 日
  • 本文字数:1347 字

    阅读完需:约 4 分钟

作者: xialuo1990 原文来源:https://tidb.net/blog/049fcb66

TiDB Data Migration

DM 简介

DM 是 MySQL 同步到 TiDB 的数据同步工具。具备一下特性:


  • 一体化数据同步管理平台 (client)

  • 全量 (dumper+loader)+ 增量复制 (syncer)

  • 多任务实例 X 多容不任务

  • 同步异常处理、状态监控

  • 更加完善的合库合表支持

DM 架构

DM-master

DM-master 负责管理和调度数据同步任务的各项操作。


  • 保存 DM 集群的拓扑信息

  • 监控 DM-worker 进程的运行状态

  • 监控数据同步任务的运行状态

  • 提供数据同步任务管理的统一入口

  • 协调分库分表场景下各个实例分表的 DDL 同步

DM-worker

DM-worker 负责执行具体的数据同步任务。


  • 将 binlog 数据持久化保存在本地

  • 保存数据同步子任务的配置信息

  • 编排数据同步子任务的运行

  • 监控数据同步子任务的运行状态

功能支持

组件介绍

dumper


  • 相比 mydumper, 增加黑白名单和正则表达式


load


  • batch 导入,提升导入速度

  • DDL 的 router 实现是通过读取 schema 文件后,替换实现


relay log


  • 支持上游 MySQL/MariaDB

  • 兼容 binlog position/gtid

  • 支持 relay log 自动清理并进行了安全性保障

  • 为保证正确性 / 时序,DDL 操作会等之前 DML 队列的消息执行完成后再执行

Sharding DDL

Sharding DDL 实现

  • 在 DM-mater 上引入协调者,来保证上一个版本的所有 DML 都在下游执行完成后,才应用下一个版本 DDL 语句

Sharding DDL 约束

  • 所有上游分片 DDL 都需要成功执行并成功被 worker 接收到

  • 所有分片上执行的 DDL 相对顺序必须一致

  • 协调 DDL 过程中,同步延迟会增加


  • 下游承担业务读,并业务对读写延迟比较敏感的,需要在业务低峰期操作或者禁止 DDL 同步到下游(人工添加方式)。

Checkpoint 设计

  • 通过将同步位点信息存储在下游的 meta-schema 表,实现断点续传

  • DDL 执行成功后,立即 flush 到下游的 TiDB 中

  • DML 事务结束后,定期 flush 到下游的 TiDB 中

TiDB Binlog

概述

TiDB Binlog 是一个勇于收集 TiDB 的 binlog,并提供数据同步,异常备份的工具


TiDB Binlog 支持以下场景:


  • 同步数据到从集群

  • 备份文件和恢复

  • 输出到 kafka, 提供缓存更新和大数据相关服务

Binlog 格式

  • 类似 MySQL Row Format

  • 记录每行的数据变更

  • 事务相关信息


  • start TS +primary key for P-Binlog(prewrite)

  • commit TS for C-Binlog

Binlog 写入流程

TiDB 采用两阶段来对事务进行提交


  • Prepare 阶段:


  • 写数据到 TiKV

  • 写 priwrite binlog 到 Pump(增加)


  • Commit 阶段


  • 发送 Commit 到 TiKV

  • 异步发送 Commit binlog 到 Pump

Pump 设计与实现

  • 提供写 Binlog 服务(通过 GRPC 网络请求)


  • append binlog 到 log 文件

  • 返回写成功给 TiDB(异步)

  • 将 Binlog 元信息存储到 KV DB(异步)

  • 更新 MaxCommit Ts(保证有序性)


  • 存储 Binlog 到本地


  • 根据配置文件,计算需要删除的 KV 以及 Vlog 文件

  • 保证 GC 的安全性


  • 获取 Binlog 服务 (实现单 Pump 内事务按照 commit TS 有序)


  • 通过 GRPC 返回指定 Commit-TS 后的 Binlog

  • 按照 Commit Ts 顺序返回

Drainer 设计与实现

  • Drainer 作用


  • grpc 持续拉取全部 pump 的 binlog

  • 根据 commit Ts 合并排序 Binlog


  • 支持下游:


  • MySQL/TiDB 灾备 / 从集群

  • 本地备份文件 备份

  • Kafka 缓存更新 / 大数据

Pump/Drainer 状态

  • Pump/Drainer 的不同状态


  • offline: 下线状态

  • pause: 暂停状态

  • online:运行状态


  • binlogctl 查看状态与下线状态


  • ./binlogctl -cmd drainers

  • ./binlogctl -cmd offline-drainer -node-id node-name:port


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
生态工具原理学习笔记(笔记)_TiDB 社区干货传送门_InfoQ写作社区