一 、介绍
TiDB是一款能够轻松从MySQL迁移的分布式数据库。以下是TiDB的几个特点:
- 分库分表后的MySQL集群可以通过TiDB工具实时迁移至TiDB,无需修改代码。
- TiDB支持水平弹性扩展,只需简单地增加新节点即可扩展吞吐或存储,轻松应对高并发、海量数据场景。
- TiDB 100% 支持标准的 ACID 事务,是分布式事务的可靠解决方案。
- 基于Raft的多数派选举协议可以提供金融级的 100% 数据强一致性保证,同时实现故障的自动恢复(auto-failover),无需人工介入。
- TiDB作为典型的OLTP行存数据库,同时兼具强大的OLAP性能,配合TiSpark可提供一站式HTAP解决方案,一份存储同时处理OLTP & OLAP,无需传统繁琐的ETL过程。
- TiDB是为云而设计的数据库,同Kubernetes深度集成,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。TiDB对业务没有任何侵入性,能优雅地替换传统的数据库中间件、数据库分库分表等Sharding方案。同时它也让开发运维人员不用关注数据库Scale的细节问题,专注于业务开发,极大地提升研发的生产力。
二、整体架构
三个组件
TiDB Server
TiDB Server 是无状态的,其本身并不存储数据,只负责计算。它可以无限水平扩展,可以通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址。TiDB Server 通过 TiKV 地址与 TiKV 交互获取数据,最终返回结果。
PD Server
Placement Driver(简称 PD)是整个集群的管理模块,其主要工作有三个:存储集群的元信息(某个 Key 存储在哪个 TiKV 节点)、对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等)、分配全局唯一且递增的事务 ID。PD 是一个集群,需要部署奇数个节点。一般线上推荐至少部署 3 个节点。
TiKV Server
TiKV Server 负责存储数据。从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎,存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。
核心特性
无限水平扩展
无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV,3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例。
高可用
高可用是 TiDB 的另一大特点。TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。
- TiDB:TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session。从应用的角度看,会出现单次请求失败的情况。重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
- PD:PD 是一个集群,通过 Raft 协议保持数据的一致性。单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是 3 秒钟。推荐至少部署两个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。
- TiKV:TiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 节点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效并在一段时间内(默认 30 分钟)无法恢复,PD 会将上的数据迁移到其他的 TiKV 节点上。
TiDB 技术内幕
- 保存数据:TiDB 技术内幕 - 说存储
- 计算(很关键如何做 SQL 运算):TiDB 技术内幕 - 说计算
- 调度(TiDB 集群管理):TiDB 技术内幕 - 谈调度
安装部署
TiDB 安装部署可能比较麻烦,一步步照着做,如果公司有专门的运维,这个工作可以由运维来搞,但是大多数的中小公司是没有的,都是开发者兼职运维,所以作为一个开发者,还是了解下比较好。
- 部署指导:从基础开始搭建 TiDB 集群https://link.zhihu.com/?target=https%3A//blog.csdn.net/D_Guco/article/details/94746802
声明
以上只是对tidb资料的简单整理和对tidb的一个基本了解,更详细的资料可以转至tidb的官方文档,注意里面的常见问题和解答,很有用:PingCAP Tidb官方文档