分布式数据库生态系统
(转载公众号:晓磊聊DB)
首先什么是“生态系统”?
生态系统(英语:Ecosystem)是指在一个特定环境内,相互作用的所有生物和此一环境的统称。此特定环境里的非生物因子(例如空气、水及土壤等)与其间的生物之间具交互作用,不断地进行物质的交换和能量的传递,并借由物质流和能量流的连接,而形成一个整体,即称此为生态系统或生态系。
上面是来自维基百科的解释,生态系统主要讨论是是生物学领域物质交换和能量传递的系统。
那么什么是分布式数据库生态系统?我的理解是,基于分布式数据库这个软件,打通数据库上下游的生态工具,以及保障这些分布式数据库行稳致远的备份、监控、部署、日志处理工具。还有基于数据库组件研发的新软件或者为分布式数据库服务的自动化运维平台也是属于分布式数据库生态系统的范畴。
下面我以分布式数据库TiDB为例,并且基于一张图来展开TIDB的生态系统:
下面我会从打通上下游的迁移/同步工具、运维工具、自动化运维平台、新软件生态几个方面给大家详细展开。
打通分布式数据库上下游生态工具
•请求接入层:负载均衡(LB)
因为tidb cluster本身是无状态的,完全可以基于LVS或者F5实现数据库接入层的高可用方案,业务采用支持mysql协议的driver链接一个vip来统一访问tidb集群。
•MySQL数据迁移工具DM
TiDB Data Migration(DM)通过充当mysql Slave的方式,全量拉取上游Mysql主库的快照数据,并且基于mysql的binlog实时同步mysql数据,这里说下DM支持配置黑白名单来过滤那个表想同步,哪个表不同步;并且基于binlog event来过滤一些DDL/DML SQL在下游的tidb执行;并且支持mysql分布分表同步到下游TIDB的一张table里面。这样tidb可以作为mysql的一个slave接受读请求长期存在,或者用于mysql->tidb时临时使用,一旦读写都切到tidb,这样mysql就完成迁移,下线即可。
•TiDB下游同步工具TiCDC
TiCDC通过实时扫描拉取tikv的事务变更日志(changelog),可以将数据写入到下游的Mysql、TiDB集群、Kafka+Flink流处理和S3中备份。完善数据的流转。
完成日常运维的工具
•备份/恢复工具
数据库备份和恢复作为数据库容灾中非常非常重要的一环,对于MySQL熟悉的DBA,每次操作前select into out file,或者逻辑备份工具:mysqldump/mydumper,物理备份工具Xtrabackup,或者基于虚拟机部署的拷贝数据镜像等等,都是大家常用且熟悉的备份方案。相比之下,早期TiDB提供了mydumper/loader的逻辑备份/恢复工具,后来这些工具被整合成dumping这一个工具。另外 TiDB还提供了Backup & Restore(简称BR)这种物理备份工具直接备份leader region所在tikv的sst文件,高效且快速。
•监控/报警工具
大部分的云原生数据库都会基于:exporter+Prometheus+altermanager+Grafana来搭建监控/报警系统,工具本身很好,但是TiDB为每套集群都单独搞一套,对于多套集群来说运维和管控都很不方便,这时就需要基于这些工具,开发相应的监控和报警平台,用来收集核心metric的监控信息,然后自己制定报警策略,也可以定制发送介质(SMS/IM/Mail)和收件人,在一些日常升级维护时,可以基于平台一键关闭报警,动态可控。
•日常运维工具Tiup/tidb ansible
在tidb 3.0版本之前,tidb的集群deploy、scale-in/out都是靠ansible调度来实现的,后来因为性能和易用性等问题,tidb 4.0之后就有tiup统一来管理集群。
•ELK
搞运维的应该对Elasticsearch、Logstash、Kibana(简称ELK)三个组件不陌生,其实这个ELK的日志同步和查看方案中还有:filebeat和kafka的存在,因为logstash如果配置了解析放在数据库端,可能会对数据库的性能造成影响,这是更轻量级别的filebeat出现了,由它收集数据库的error和slow log写入到kafka,为啥要过一层kafka,因为大量tidb的组件都在往一个ES里面写入的话,有时ES扛不住存在丢数据的可能,中间一层kafka起到一定的限流作用。这样log->filebeat收集->kafka缓存->logstash消费和解析->ES存储->Kibana展现,完成了日志到报表的全部流程。
•TiDB Operator
数据库上云趋势不可挡,TiDB作为云原生数据库,提供了TiDB Operator,TiDB Operator 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或私有部署的 Kubernetes 集群。
自动化运维平台
什么能提升生产力?答案就是:规范化、流程化的自动化平台。自动化运维平台的搭建不是一朝一夕的工作,前期需要大量的统一规范的工作,比如统一定制化操作系统镜像、统一数据库目录、统一管理账户等等,一旦统一标准,数据库的部署、日常运维、监控等都可以基于平台调度管理,节省人力,提升效率。DBDAS平台包括切不限于:元信息管理(用来查询我在什么ip服务器上安装了什么版本的谁业务负责人的什么DB),DB failover(自动/手动),配置管理,一键部署集群,监控报警管理,扩缩容,SQL审核,自动化任务等等模块。
基于TiDB组件的新研发
TUG社区里也有不少基于tikv进行二次研发的软件,这些软件的研发也是分布式数据库生态的一部分。比如TiBigData,由知乎发起的 incubator 项目 TiBigData,旨在解决企业大数据场景中各项技术栈对接 TiDB 的整合问题。目前已提供 TiDB 与 Flink 和 Presto 的整合能力,并已应用在知乎的数据集成平台和 OLAP 分析场景中。TiRedis 是基于 Tikv 实现的一个分布式持久化的类 Redis 存储系统。TiDE是一个基于流行的代码编辑器 Visual Studio Code 的 TiDB 插件,可以开发和本地/远程调试 TiDB 集群,让开发者不需要搞清楚 TiDB 的内部机制也能方便地在本地启动测试集群和实时调试编写,极大提升开发者开发和调试 TiDB 项目的体验。
写在最后
任何的数据库要想被大家认可和使用,丰富的数据库生态必不可少。