数据库运维实战:TiDB分布式数据库扩缩容与数据迁移方案

单机MySQL到了千万级QPS或TB级数据量后,分库分表改造成本高、运维复杂,扩缩容要改路由规则。TiDB是兼容MySQL协议的分布式数据库,用TiKV(存储)、TiDB(计算)、PD(调度)三层架构,数据自动分片、在线扩缩容,业务层SQL基本不用改。本文从集群部署、扩缩容操作到数据迁移,给出生产落地的完整路径。

TiDB架构与MySQL兼容性

TiDB对上层暴露MySQL协议,客户端连接方式和MySQL一致,常用SQL语法、事务模型(乐观锁/悲观锁)都兼容。底层数据按Region(默认96MB)分片,PD模块负责Region调度,扩容节点时Region自动迁移,业务无感知。核心价值在于:加机器扩容、下机器缩容,业务路由不用动。

集群部署:TiUP一键部署生产集群

官方推荐TiUP部署:

# 安装 TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 生成拓扑文件,按角色分配节点
vi topology.yaml   # pd x3 / tidb x2 / tikv x3
tiup cluster deploy tidb-prod v8.1.0 ./topology.yaml
tiup cluster start tidb-prod

生产最小建议:PD三节点(奇数),TiKV至少三节点,TiDB计算节点按QPS扩容。TiKV磁盘用SSD,Region调度与多副本机制写放大明显,机械盘扛不住。

在线扩缩容:加机器与减机器

扩缩容分两类:加TiDB节点(水平扩展计算)、加TiKV节点(扩容存储)。TiDB节点写进拓扑再reload即可:

tiup cluster scale-out tidb-prod scale-out-tidb.yaml
# scale-out-tidb.yaml 声明新增 tidb 节点

tiup cluster display tidb-prod   # 查看集群状态

TiKV缩容用scale-in指定节点:

tiup cluster scale-in tidb-prod -N 10.0.1.8:20160

缩容时PD先调度Region把数据迁走再下线节点,业务几乎无感。

数据迁移:MySQL全量+增量平滑迁移

迁移工具链:全量用dumpling导出再导入,增量用DM解析binlog持续同步:

# DM 任务配置
task-name: mysql-to-tidb
target-database:
  host: "tidb-server"
  port: 4000
  user: "root"
mysql-instances:
  - source-id: "mysql-source"
    block-allow-list:
      rules: ["appdb.*"]

先全量导出导入,再追binlog增量,业务读流量先切部分到TiDB验证,最后全量切换并观察延迟。TiDB走MySQL协议,切换时连接串改端口即可,ORM层不用动。

数据校验与回退方案

切换后用sync-diff-inspector对比MySQL与TiDB数据一致性。回退方案:切换前保留MySQL只读副本,TiDB验证失败时把连接指回MySQL,增量数据反向同步回MySQL,保证可逆。

运维注意事项

TiKV的Region分裂与合并由PD自动调度,不要手动干预。写入热点(单Region过热)用预分裂或对表打散。GC默认10分钟一次,长事务注意GC时间戳影响。小表频繁全表扫描场景TiDB不一定比MySQL单机快,评估后再迁移。备份用TiDB-BR,支持全量+增量,可恢复到指定时间点。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/shu-ju-ku-yun-wei-shi-zhan-tidb-fen-bu-shi-shu-ju-ku-kuo/

(0)
小编小编
上一篇 1天前
下一篇 1天前

相关推荐