最近一年多我们团队一直在生产环境使用TiDB作为核心业务的分布式数据库TiDB作为一款开源的NewSQL数据库兼容MySQL协议支持水平扩展强一致性高可用等特性很好地解决了我们业务增长带来的数据库性能和容量瓶颈。

但是TiDB作为一个分布式数据库集群组件比较多(TiDBPDTiKV等)运维和管理相对复杂,如果没有合适的工具效率会比较低也容易出问题好在TiDB生态提供了非常丰富的工具覆盖了部署监控管理数据导入导出同步等各个方面能大大提升我们的运维和开发效率今天想把我们在实际使用中觉得比较好用的TiDB生态工具整理出来推荐给大家希望能帮正在使用,或者准备使用TiDB的朋友提升效率少走弯路。

一、TiDB简介和架构

在推荐工具之前,先简单介绍一下TiDB的架构方便没接触过TiDB的朋友理解后面的工具TiDB是PingCAP公司开发的开源分布式NewSQL数据库它的设计目标是兼顾传统关系型数据库的强一致性和NoSQL数据库的水平扩展能力兼容MySQL协议大部分MySQL的语法和生态都能直接使用迁移成本比较低。

TiDB集群主要由三个核心组件组成:

  • TiDB Server:SQL层负责接收客户端请求解析SQL生成执行计划和TiKV交互获取数据返回给客户端TiDB Server是无状态的可以水平扩展通过负载均衡对外提供服务。
  • PD(Placement Driver):调度层负责整个集群的元数据管理(比如数据在哪些TiKV节点上)集群调度(比如数据迁移负载均衡副本管理等)以及,全局时间戳分配(TSO用于实现分布式事务)PD一般部署3个节点组成Raft组保证高可用。
  • TiKV Server:存储层负责实际存储数据TiKV是一个分布式Key-Value存储引擎支持强一致性(基于Raft协议)和,事务(支持MVCC和分布式事务)TiKV也是可以水平扩展的数据自动分片分布在多个TiKV节点上。

除了这三个核心组件TiDB生态,还有很多其他工具和组件覆盖部署监控管理数据同步等各个方面下面就分类推荐一些我们实际使用中觉得比较好用的工具。

二、部署工具

部署是使用TiDB的第一步TiDB集群组件多节点多手动部署非常麻烦也容易出错,所以需要合适的部署工具来简化部署过程提高效率。

工具1:TiDB Ansible(官方推荐部署工具)

TiDB Ansible是PingCAP官方提供的基于Ansible的TiDB集群部署工具也是目前官方推荐的生产环境部署方式它封装了TiDB集群部署的各种操作包括环境检查依赖安装集群部署启动停止升级扩容缩容等只需要简单配置一下inventory文件(指定节点IP角色等)然后执行几个Ansible Playbook命令就能完成整个集群的部署非常方便也很可靠。

TiDB Ansible的优点:

  • 官方维护更新及时和TiDB版本同步兼容性好可靠性高。
  • 功能全面支持部署启动停止重启升级扩容缩容销毁等各种操作基本覆盖了集群运维的所有场景。
  • 基于Ansible学习成本低,只要会一点Ansible的基础就能使用也方便自定义和扩展。
  • 支持生产环境最佳实践,比如系统参数调优目录规划权限配置等都已经封装好了不用自己一个个配置减少出错概率。

TiDB Ansible的使用也很简单大概步骤是:

  1. 安装Ansible和相关依赖下载TiDB Ansible代码。
  2. 配置inventory.ini文件指定各个节点的IP和,角色(TiDBPDTiKV监控等)。
  3. 执行ansible-playbook bootstrap.yml初始化环境(创建用户目录设置系统参数等)。
  4. 执行ansible-playbook deploy.yml部署集群(下载二进制包分发到各个节点配置文件等)。
  5. 执行ansible-playbook start.yml启动集群。
  6. 验证集群状态连接TiDB执行SQL测试。

整个过程非常顺畅基本不会出什么问题我们团队生产环境的TiDB集群就是用TiDB Ansible部署的一直很稳定后续的升级扩容也都是用它操作非常方便,所以,如果是生产环境部署TiDB强烈推荐用TiDB Ansible。

工具2:TiDB Docker Compose(本地测试快速部署)

如果只是想在本地快速搭一个TiDB集群测试学习,或者开发调试用TiDB Ansible就有点重了这时候可以用TiDB官方提供的Docker Compose部署方式只需要一个docker-compose.yml文件执行docker-compose up -d就能在本地快速启动一个TiDB集群(包含TiDBPDTiKV以及监控组件)非常方便适合本地开发测试和学习。

Docker Compose部署的优点是简单快速不需要准备多台机器一台机器就能跑整个集群也不需要安装Ansible等依赖,只要有Docker和Docker Compose就行适合本地开发测试和学习,但是不适合生产环境,因为Docker容器的性能和隔离性不如物理机,或者虚拟机,而且高可用和数据持久化也需要额外配置,所以生产环境还是建议用TiDB Ansible部署在物理机,或者虚拟机上。

我们团队开发同学本地调试和测试的时候,就用Docker Compose快速搭一个TiDB集群非常方便不用依赖测试环境也不会影响其他人效率很高,所以,如果是本地开发测试,或者学习TiDB推荐用Docker Compose快速部署。

工具3:TiDB Operator(Kubernetes环境部署)

如果你们的基础设施是基于Kubernetes的,那么可以用TiDB Operator来部署和管理TiDB集群TiDB Operator是PingCAP官方提供的基于Kubernetes Operator模式的TiDB集群管理工具它把TiDB集群的部署管理运维等操作封装成Kubernetes的CRD(自定义资源)和Controller只需要写一个YAML文件定义TiDB集群的规格(节点数资源配置版本等)TiDB Operator就会自动帮你创建和管理整个TiDB集群包括部署启动升级扩容缩容故障恢复等非常适合在Kubernetes环境中使用。

TiDB Operator的优点是和Kubernetes生态无缝集成能利用Kubernetes的调度服务发现配置管理存储管理等能力简化TiDB集群的运维也适合云原生的部署模式,但是TiDB Operator相对比较新功能和稳定性还在不断完善中,而且需要有Kubernetes的基础和经验才能用好,所以,如果你们已经在Kubernetes上运行其他服务,并且有Kubernetes运维经验可以考虑用TiDB Operator否则还是建议先用TiDB Ansible更成熟稳定。

我们团队目前生产环境还是用TiDB Ansible部署在物理机上,但是也在测试环境试用TiDB Operator为以后迁移到Kubernetes做准备体验还不错,所以,如果你们用Kubernetes推荐了解一下TiDB Operator。

三、监控和诊断工具

TiDB作为分布式数据库监控和诊断非常重要需要及时发现问题定位问题TiDB生态提供了很完善的监控和,诊断工具能帮我们快速发现和定位问题。

工具4:Prometheus + Grafana监控体系(官方标配)

TiDB官方提供了基于Prometheus+Grafana的完整监控体系,而且已经和TiDB Ansible集成了部署集群的时候,勾选监控组件就会自动部署Prometheus和Grafana并且导入了TiDB各个组件的监控仪表盘非常完善覆盖了TiDBPDTiKV各个组件的各种指标,比如QPS延迟错误率连接数执行计划缓存命中率Raft状态存储容量IOCPU内存等等非常详细能帮我们全面了解集群的运行状态及时发现异常。

Grafana仪表盘已经官方预配置好了分了很多面板,比如Overview(总览)TiDBPDTiKVPerformance(性能)Trouble Shooting(故障排查)等等每个面板都有很多图表非常直观我们平时运维主要就是看这些监控图表发现异常,比如延迟突然升高QPS下降TiKV节点IO过高PD调度异常等等都能从监控里及时发现,然后去排查原因非常方便。

另外Prometheus还支持告警规则配置可以配置各种告警规则(比如节点宕机延迟超过阈值存储容量超过80%等)当指标异常时通过Alertmanager发送告警到邮件钉钉企业微信等渠道及时通知运维人员处理我们团队就配置了比较完善的告警规则核心指标异常都会及时告警大大提升了问题发现的及时性减少了故障影响,所以使用TiDB一定要把监控和告警配置好这是集群稳定运行的重要保障。

工具5:TiDB Dashboard(可视化管理和诊断平台)

TiDB Dashboard是TiDB4.0版本开始内置的可视化管理和诊断平台(我们用的2.x版本还没有内置,但是可以单独部署,或者用第三方的类似工具)它提供了一个Web界面可以查看集群的整体运行状态各个节点的状态SQL执行统计慢查询分析集群诊断等功能非常实用能帮我们快速了解集群状态定位性能问题。

TiDB Dashboard的主要功能包括:

  • 集群总览:展示集群的整体状态各个组件的版本状态资源使用情况等一目了然。
  • SQL分析:统计所有SQL的执行情况包括执行次数平均延迟错误次数等能按各种维度排序和,筛选快速找到慢SQL和高频SQL进行优化。
  • 慢查询:展示慢查询日志能按时间数据库用户等维度筛选查看慢查询的详细信息(执行计划参数等)方便定位慢查询原因。
  • 集群诊断:自动诊断集群的健康状况发现潜在的问题和,风险给出诊断报告和建议非常实用。
  • 日志搜索:可以在Web界面搜索各个节点的日志不用登录到服务器上查日志非常方便。

TiDB Dashboard把很多原来需要用命令行工具,或者查日志才能做的事情都集成到了Web界面非常直观方便能大大提升运维和诊断的效率特别是对TiDB不太熟悉的同学也能快速上手,所以,如果你们用的TiDB版本支持Dashboard强烈推荐开启和使用我们也在计划升级到支持Dashboard的版本体验这个功能。

工具6:pd-ctl / tikv-ctl / tidb-ctl(命令行管理工具)

除了可视化工具TiDB还提供了各个组件的命令行管理工具pd-ctl(PD管理工具)tikv-ctl(TiKV管理工具)tidb-ctl(TiDB管理工具)这些命令行工具功能非常强大能做很多可视化工具做不了的高级管理和诊断操作是高级运维和问题排查的利器。

  • pd-ctl:用来管理和诊断PD集群可以查看集群状态节点信息区域(Region)信息调度状态配置参数等也可以手动触发调度调整配置等是管理PD和集群调度的主要工具。
  • tikv-ctl:用来管理和诊断TiKV节点可以查看TiKV节点状态Region信息Raft状态存储信息等也可以做一些高级操作,比如手动compact检查数据一致性等是排查TiKV问题的利器。
  • tidb-ctl:用来管理和诊断TiDBServer可以查看TiDB的状态配置Schema信息执行计划等也可以做一些调试操作,比如查看某条SQL的执行计划统计信息等。

这些命令行工具,虽然没有可视化界面,那么直观,但是功能非常强大很多深层的问题排查和高级管理操作都需要用它们才能完成,所以作为TiDB运维人员一定要熟悉这些工具的使用我们团队排查一些复杂问题的时候,也经常用到这些工具非常有用,所以推荐大家学习和掌握。

四、数据导入导出和同步工具

TiDB作为数据库经常需要做数据导入导出和同步,比如从MySQL迁移数据到TiDBTiDB数据备份恢复TiDB和其他数据库之间,数据同步等TiDB生态提供了专门的工具来处理这些场景效率很高。

工具7:TiDB Lightning(高速数据导入工具)

TiDB Lightning是TiDB官方提供的高速数据导入工具专门用来把大量数据快速导入到TiDB集群它和普通的执行SQLINSERT导入不同它是直接读取数据文件(比如CSV或者mysqldump的输出)然后直接生成TiKV的底层数据文件(SST文件)再Ingest到TiKV集群中跳过了SQL层和事务的开销导入速度非常快比普通的INSERT导入快很多倍适合大规模数据迁移和初始化导入。

TiDB Lightning的优点:

  • 导入速度极快支持并行导入能充分利用集群资源TB级数据也能比较快导入完成。
  • 支持多种数据格式包括CSVmysqldump输出等也支持从本地文件,或者S3等云存储读取数据。
  • 支持断点续传导入过程中,如果中断了下次可以从断点继续不用从头开始很人性化。
  • 支持数据校验导入完成后可以校验数据的完整性和正确性确保导入的数据没有问题。

我们团队从MySQL迁移数据到TiDB的时候,就是用TiDB Lightning导入的几亿条数据几个小时就导完了效率非常高,如果用普通的INSERT导入可能要跑几天,所以大规模数据导入强烈推荐用TiDB Lightning。

工具8:Syncer / TiDB Data Migration(数据同步工具)

如果需要把MySQL的数据实时同步到TiDB(比如迁移过程中先全量导入再增量同步追平数据,然后切换,或者长期把TiDB作为MySQL的从库做读写分离等)可以用TiDB生态的数据同步工具早期是Syncer工具后来演进为TiDB Data Migration(简称DM)工具功能更强大更完善。

DM是TiDB官方提供的数据同步工具支持从MySQL(或者兼容MySQL的数据库,比如MariaDBPercona等)全量+增量同步数据到TiDB它支持表路由(把源库的表同步到目标库的不同表名)库表过滤(只同步某些库表)数据过滤(按条件过滤数据)等功能也支持多源同步(多个MySQL实例同步到一个TiDB集群)非常灵活能满足各种数据同步场景。

DM的优点:

  • 支持全量+增量一体化同步不用多个工具配合配置和使用更简单。
  • 增量同步基于binlog实时性好延迟很低能满足大部分场景的需求。
  • 支持断点续传同步中断后能从断点继续不用重新同步。
  • 支持数据校验能校验源和目标数据的一致性确保同步正确。
  • 提供可视化的管理平台(DM Portal)能在Web界面管理同步任务查看同步状态很方便。

我们团队从MySQL迁移到TiDB的过程中就是先用Lightning全量导入历史数据再用DM增量同步binlog追平数据,然后业务低峰切换到TiDB整个过程非常平滑数据零丢失切换时间也很短,所以数据同步场景推荐用DM工具。

工具9:mydumper / loader(逻辑备份和恢复工具)

如果需要对TiDB做逻辑备份和恢复(比如备份某些库表,或者整个集群的数据用于灾备,或者迁移到其他数据库)可以用mydumper和loader工具mydumper是一个开源的MySQL逻辑备份工具支持多线程备份速度比mysqldump快很多TiDB兼容MySQL协议,所以也可以用mydumper备份TiDB的数据loader是TiDB官方提供的多线程数据导入工具能把mydumper备份的数据快速导入到TiDB(不过现在更推荐用Lightning导入速度更快)。

mydumper的优点是多线程备份速度快备份文件是标准的SQL或者CSV格式通用性好能导入到任何兼容MySQL的数据库适合做逻辑备份和数据迁移,但是逻辑备份的速度和数据量相比物理备份还是慢一些,而且恢复时间也长,所以适合数据量不是特别大的场景,或者需要跨数据库迁移的场景,如果是TiDB集群本身的灾备更推荐用物理备份工具(比如BRBackup & Restore后面会提到)。

五、其他实用工具

工具10:BR(Backup & Restore物理备份恢复工具)

BR是TiDB官方提供的物理备份和恢复工具它直接备份TiKV的底层数据文件(SST文件)而不是通过SQL导出数据,所以备份和恢复速度非常快比逻辑备份快很多倍适合大规模TiDB集群的灾备和数据恢复场景BR支持全量备份和增量备份支持备份到本地,或者S3等云存储也支持按库表备份和恢复非常灵活功能也很强大是TiDB生产环境灾备的推荐工具。

我们团队目前也在调研和测试BR工具准备用它做生产环境TiDB集群的定期备份和灾备替代原来的逻辑备份,因为数据量越来越大逻辑备份时间太长了BR的物理备份速度快很多能满足我们的需求,所以,如果你们的TiDB集群数据量比较大推荐了解和使用BR做备份恢复。

工具11:TiSpark(Spark on TiKV复杂分析查询)

如果需要在TiDB的数据上做复杂的分析查询(比如大规模数据统计报表机器学习等)TiDB本身的SQL层可能性能不够这时候可以用TiSparkTiSpark是PingCAP提供的Spark插件能让Spark直接读取TiKV的数据跳过TiDBSQL层利用Spark的分布式计算能力做复杂分析查询速度比在TiDB里执行复杂SQL快很多适合OLAP分析场景。

TiSpark的优点是能利用Spark强大的计算能力和生态支持复杂的分析查询机器学习图计算等也能和Spark生态的其他工具(比如HiveHDFS等)集成非常灵活,而且数据不需要同步出来直接在TiKV上计算节省了数据同步的成本和时间也保证了数据的实时性,所以,如果你们有复杂分析查询的需求推荐了解一下TiSpark。

我们团队有一些报表和统计需求复杂SQL在TiDB里跑比较慢后来用TiSpark跑速度提升了很多效果很好,所以分析场景推荐用TiSpark。

六、工具选择和使用建议

上面推荐了11个TiDB生态的工具涵盖了部署监控诊断数据导入导出同步备份分析等各个方面可能有,人会问这么多工具该怎么选怎么用呢这里给一些选择和使用建议:

  1. 根据场景选择工具:不同的场景用不同的工具不要一个工具用到底,比如生产环境部署用TiDB Ansible本地测试用Docker ComposeK8s环境用TiDB Operator大规模数据导入用Lightning数据同步用DM备份恢复用BR复杂分析用TiSpark等等根据具体场景选择合适的工具能大大提升效率。
  1. 优先用官方工具:TiDB生态的官方工具(TiDB AnsibleLightningDMBRTiSpark等)都是PingCAP官方维护的更新及时兼容性好可靠性高文档也完善遇到问题也容易找到解决方案,或者提Issue获得官方支持,所以优先用官方工具除非官方工具满足不了需求再考虑第三方工具,或者自己开发。
  1. 从基础工具开始逐步深入:如果刚接触TiDB不要一下子就去研究所有工具先从最基础的开始,比如先用Docker Compose或者TiDB Ansible搭一个集群跑起来用MySQL客户端连接执行SQL体验一下,然后再看监控仪表盘了解集群状态等熟悉了基础之后,再逐步学习和使用更高级的工具(比如pd-ctlLightningDMBR等)循序渐进不要急于求成。
  1. 做好工具和集群的文档:TiDB工具比较多操作也比较复杂一定要做好文档记录各个工具的使用方法常用命令注意事项以及集群的架构配置部署拓扑等方便团队成员查阅也方便问题排查和交接我们团队就整理了比较完善的TiDB运维文档包括部署升级扩容备份恢复常见问题排查等新同学上手很快问题排查也很高效,所以文档很重要一定要做好。
  1. 关注官方文档和社区:TiDB发展很快版本更新也比较频繁新的工具和功能不断推出,所以要关注官方文档和社区(比如TiDB官方文档GitHub知乎公众号等)及时了解新的工具和功能以及最佳实践不断更新自己的知识和技能更好地使用TiDB也能避免踩一些已经被解决的坑。

七、写在最后

以上就是我们团队在实际使用TiDB的过程中觉得比较好用的生态工具推荐涵盖了部署监控诊断数据导入导出同步备份分析等各个方面这些工具大大提升了我们的TiDB运维和开发效率也帮助我们更好地发挥TiDB的能力保障了集群的稳定运行希望这些推荐能帮正在使用,或者准备使用TiDB的朋友少走弯路提升效率。

TiDB作为一款优秀的开源NewSQL数据库,不仅核心功能强大生态工具也非常完善这也是我们选择TiDB的重要原因之一它不只是一个数据库而是一个完整的数据平台生态能满足我们在数据存储计算同步备份分析等各个方面的需求,而且TiDB还在快速发展新的功能和工具不断推出生态越来越完善相信以后会越来越好用也能满足更多场景的需求。

当然工具只是工具更重要的是理解TiDB的原理和架构掌握分布式数据库的基本概念和最佳实践这样才能真正用好TiDB发挥它的能力工具只是帮我们提高效率减少重复劳动不能替代我们对原理的理解和问题的思考,所以在使用工具的,同时也要深入学习TiDB的原理和架构不断提升自己的技术能力这样才能真正成为TiDB的高手也能更好地利用TiDB为业务创造价值。

最后用一句话结束这篇文章也是我使用TiDB和这些工具的心得"工欲善其事必先利其器TiDB生态丰富的工具就是我们的利器善用这些工具能让我们事半功倍更好地管理和使用TiDB但是工具之外更重要的是对原理的理解和对业务的思考,只有两者结合才能真正发挥TiDB的威力为业务创造价值。"

愿大家都能用好TiDB和它的生态工具提升效率保障稳定为业务发展保驾护航也愿TiDB生态越来越完善越来越好加油!