TiDB整体架构
要深入了解TiDB的水平扩展和高可用特点,首先需要了解TiDB的整体架构。
TiDB服务器
TiDB服务器负责接收SQL请求,处理SQL相关的逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果。 TiDB服务器是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如lv, HAProxy或F5)对外提供统一的接入地址。
PD服务器
放置司机(简称PD)是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个关键存储在哪个 TiKV节点);二是对TiKV集群进行调度和负载均衡(如数据的迁移,筏组长 的迁移等);三是分配全局唯一且递增的事务ID。
帕金森病是一个集群,需要部署奇数个节点,一般线上推荐至少部署3个节点。
TiKV服务器
TiKV服务器负责存储数据,从外部看TiKV是一个分布式的提供事务的键值存储引擎。存储数据的基本单位是 地区,每个地区负责存储一个关键范围(从StartKey到EndKey的左闭右开区间)的数据,每个 TiKV节点会负责多个地区.TiKV使用筏协议做复制,保持数据的一致性和容灾。副本以地区 为单位进行管理,不同节点上的多个地区构成一个木筏,互为副本。数据在多个TiKV之间的负载均衡由PD 调度,这里也是以地区为单位进行调度。
水平扩展
无限水平扩展是TiDB的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力.TiDB服务器负责处理SQL 请求,随着业务的增长,可以简单的添加TiDB服务器节点,提高整体的处理能力,提供更高的吞吐.TiKV 负责存储数据,随着数据量的增长,可以部署更多的TiKV服务器节点解决数据规模的问题.PD会在TiKV节点之间以 地区为单位做调度,将部分数据迁移到新加的节点上,所以在业务的早期,可以只部署少量的服务实例(推荐至少部署3个TiKV, 3个 PD, 2个TiDB),随着业务量的增长,按照需求添加TiKV或者TiDB实例。
高可用
高可用是TiDB的另一大特点,TiDB TiKV/PD这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性,单个实例失效后的后果以及如何恢复。
-
<李>
TiDB
TiDB是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 会话,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
李> <李>PD
帕金森病是一个集群,通过筏协议保持数据的一致性,单个实例失效时,如果这个实例不是大量的 领袖,那么服务完全不受影响,如果这个实例是筏的领袖,会重新选出新的木筏领导人,自动恢复服务.PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个PD实例,单个实例失效后,重启这个实例或者添加新的实例。