单机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/