黄东旭解析 TiDB 的核心优势
699
2023-04-09
原集群版本过低,运维难度大,决定进行版本升级
经过测试发现,v5.3.0版本相对于v3.0.10版本性能有很大提升
决定将TiDB v3.0.10升级到TiDB v5.3.0
【升级方式划分】 大体分为停机升级 与不停机升级 根据字面意思理解,我们可以根据业务的要求来进行选择,如果业务允许进行停机升级,那相对来说我们选择停机升级 会更加的安全,快速,如果业务不允许停机的话我们主要选择就是不停机升级
不停机升级 根据官方文档来看,需要通过特定方式来进行滚动升级 滚动升级对于我们来说或许是一个很好的选择,但问题就是: 1、业务需求回滚,我们的回滚方案通常需要针对于全备+增量的方式来进行回滚,回滚进度较慢 2、因版本差距过大的话,连续进行滚动升级,不可控因素增多 3、老版本通常采用Ansible安装,又想让新版本适用tiup进行管理,操作起来较为复杂 #因为种种因素原因,最终决定采用Dumpling+Lightning+TiDB Binlog的方式,可以有效的规避一系列繁琐问题。
获取相关信息
创建TiDB v5.3.0的目标集群
Dumpling对原集群进行数据导出
Lightning对目标集群进行数据导入
启动Drainer进行增量同步
sync-diff-inspector进行数据校验
搭建回滚链路
切换业务
1、编辑拓扑文件topology.yaml
#混合部署与跨机房部署见官方文档 tiup cluster template > topology.yaml vim topology.yaml #详细配置信息参考官方文档2、部署TiDB集群
#-p/-i 二选一 tiup cluster deploy cluster_name v5.3.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]3、启动TiDB集群
#新部署集群默认关闭状态,需要将其启动 tiup cluster start cluster_name4、验证集群状态
tiup cluster display cluster_name【注意事项】 1、确定原集群数据量大小,来判断导出数据所需要的磁盘大小,防止导出数据量过大导致磁盘容量不够报错 2、因为我们后续需要搭建Drainer进行增量同步,所以需要在导出之前进行Pump部署和开启Binlog 3、为确保导出数据的可用性,判断导入与导出时间,调长GC时间
1、编写Dumpling脚本
vim dumpling.sh #!/bin/bash nohup ./dumpling -u -P -h --filetype sql -t 8 -o /data/dumpling -r 200000 -F 256MiB > nohup_dumpling.out &2、执行Dumpling脚本,并观察日志
sh dumpling.sh tail -50f nohup_dumpling.out【注意事项】 1、注意sorted-kv-dir目录大小,防止导入时候磁盘空间不够 2、若 tidb-lightning 因不可恢复的错误而退出(例如数据出错),重启时不会使用断点,而是直接报错离开。为保证已导入的数据安全,这些错误必须先解决掉才能继续。使用 tidb-lightning-ctl 工具可以标示已经恢复 3、可以关注progress来查看剩余时间与导入效率
1、编辑Lightning配置文件
vim lightning.toml #详细配置文件查看官方文档 https://docs.pingcap.com/zh/tidb/v5.3/tidb-lightning-configuration2、编辑执行Lightning脚本
vim lightning.sh #!/bin/bash nohup ./tidb-lightning -config lightning.toml > nohup-lightning.out &3、执行Lightning脚本并查看运行情况
sh lightning.sh tail -50f tidb-lightning.log egrep "progress" lightning.log【注意事项】 1、在导出数据之前要部署好Pump组件和开启Binlog 2、commit_ts通过dumpling导出数据的目录的metadata获取 3、部署完毕查看Pump、Drainer运行状态和checkpoint
1、TiDB Binlog集群监控
Pump状态
metric名称说明Storage Size记录磁盘的总空间大小(capacity),以及可用磁盘空间大小(available)Metadata记录每个Pump的可删除binlog的最大TSO(gc_tso),以及保存的binlog的最大的commit tsoWrite Binlog QPS by ln每个Pump接收到的写binlog请求的QPSWrite Binlog Latency记录每个Pump写binlog的延迟时间Storage Write Binlog SPump写binlog数据的大小Storage Write Binlog LPump中的storage模块写binlog数据的延迟Pump Storage Error ByPump遇到的error数量,按照error的类型进行统计Query TiKVPump通过TiKV查询事务状态的次数Drainer状态
metric名称说明Checkpoint TSODrainer已经同步到下游的binlog的最大TSO对应的时间,通过该指标估算同步延迟时间Pump Handle TSO记录Drainer从各个Pump获取到binlog的最大TSO对应的时间Pull Binlog QPS by Pump NodeIDDrainer从每个Pump获取binlog的QPS95% Binlog Reach Duration By Pump记录binlog从写入Pump到被Drainer获取到这个过程的延迟时间Error By TypeDrainer遇到的error数量,按照error的类型进行统计SQL Query TimeDrainer在下游执行SQL的耗时Drainer Event各种类型event的数量,event包括(ddl,insert,delete,update,flush,savepoint)Execute Time写入binlog到同步下游模块所消耗的时间95% Binlog SizeDrainer从各个Pump获取到binlog数据的大小DDL job CoutDrainer处理的DDL的数量Queue SizeDrainer内部工作队列大小2、编辑Ansible集群文件inventory.ini文件
#原端集群由Ansible完成 详细配置参数参考官方文档 https://docs.pingcap.com/zh/tidb/v3.0/deploy-tidb-binlog#%E7%AC%AC-3-%E6%AD%A5%E9%83%A8%E7%BD%B2-drainer3、修改drainer.toml配置文件
cd /home/tidb/tidb-ansible/conf && cp drainer.toml drainer_mysql_drainer.toml && vi drainer_mysql_drainer.toml #配置文件名命名规则为 ,否则部署时无法找到自定义配置文件。 但是需要注意 v3.0.0,v3.0.1 的配置文件命名规则与其余版本略有不同,为别名_drainer.toml别名_drainer-cluster.toml 详细参数参考官方文档 https://docs.pingcap.com/zh/tidb/v3.0/deploy-tidb-binlog#%E7%AC%AC-3-%E6%AD%A5%E9%83%A8%E7%BD%B2-drainer4、部署Drainer
ansible-playbook deploy_drainer.yml #单独创建部署文件的inventory.ini的需要-i指定5、启动Drainer
ansible-playbook start_drainer.yml #单独创建部署文件的inventory.ini的需要-i指定【注意事项】 1、个别数据类型目前不支持比对,需要过滤出来不可比对的列进行过滤掉并进行手工比对 2、对于 MySQL 和 TiDB 之间的数据同步不支持在线校验,需要保证上下游校验的表中没有数据写入,或者保证某个范围内的数据不再变更 3、支持对不包含主键或者唯一索引的表进行校验,但是如果数据不一致,生成的用于修复的 SQL 可能无法正确修复数据 4、snapshot配置通过checkpoint获得
1、获取ts-map
select * from tidb_binlog.checkpoint;2、编辑sync-diff-inspector
vim sync-diff-inspector.toml #详细配置参数参考官方文档https://docs.pingcap.com/zh/tidb/v5.3/sync-diff-inspector-overview
3、创建sync-diff-inspector启动脚本
vim sync-diff-inspector.sh #!/bin/bash nohup ./sync-diff-inspector --config=./sync-diff-inspector.toml > nohup_sync-diff-inspector.out &4、运行sync-diff-inspector脚本
sh sync-diff-inspector.sh【注意事项】 1、回滚链路的Binlog与Pump需要在搭建集群时候同步搭建 2、只需要配置好Drainer扩容文件即可,需要回滚时在扩容上去
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。