波波说运维 开源分布式关系型数据库TiDB入坑指南( 二 )


PDServer(负责管理调度 , 如数据和TiKV位置的路由信息维护、TiKV数据均衡等)
PlacementDriver(简称PD)是整个集群的管理模块 , 其主要工作有三个:一是存储集群的元信息(某个Key存储在哪个TiKV节点);二是对TiKV集群进行调度和负载均衡(如数据的迁移、Raftgroupleader的迁移等);三是分配全局唯一且递增的事务ID 。
PD通过Raft协议保证数据的安全性 。 Raft的leaderserver负责处理所有操作 , 其余的PDserver仅用于保证高可用 。 建议部署奇数个PD节点 。
TiKVServer(负责SQL逻辑 , 通过PD寻址到实际数据的TiKV位置 , 进行SQL操作)
TiKVServer负责存储数据 , 从外部看TiKV是一个分布式的提供事务的Key-Value存储引擎 。 存储数据的基本单位是Region , 每个Region负责存储一个KeyRange(从StartKey到EndKey的左闭右开区间)的数据 , 每个TiKV节点会负责多个Region 。 TiKV使用Raft协议做复制 , 保持数据的一致性和容灾 。 副本以Region为单位进行管理 , 不同节点上的多个Region构成一个RaftGroup , 互为副本 。 数据在多个TiKV之间的负载均衡由PD调度 , 这里也是以Region为单位进行调度 。
TiSpark(解决复杂OLAP需求组件)
TiSpark作为TiDB中解决用户复杂OLAP需求的主要组件 , 将SparkSQL直接运行在TiDB存储层上 , 同时融合TiKV分布式集群的优势 , 并融入大数据社区生态 。 至此 , TiDB可以通过一套系统 , 同时支持OLTP与OLAP , 免除用户数据同步的烦恼 。
TiDBOperator(k8s支持)
TiDBOperator提供在主流云基础设施(Kubernetes)上部署管理TiDB集群的能力 。 它结合云原生社区的容器编排最佳实践与TiDB的专业运维知识 , 集成一键部署、多集群混部、自动运维、故障自愈等能力 , 极大地降低了用户使用和管理TiDB的门槛与成本 。
四、两个核心特性1、水平扩展
无限水平扩展是TiDB的一大特点 , 这里说的水平扩展包括两方面:计算能力和存储能力 。 TiDBServer负责处理SQL请求 , 随着业务的增长 , 可以简单的添加TiDBServer节点 , 提高整体的处理能力 , 提供更高的吞吐 。 TiKV负责存储数据 , 随着数据量的增长 , 可以部署更多的TiKVServer节点解决数据Scale的问题 。 PD会在TiKV节点之间以Region为单位做调度 , 将部分数据迁移到新加的节点上 。 所以在业务的早期 , 可以只部署少量的服务实例(推荐至少部署3个TiKV , 3个PD , 2个TiDB) , 随着业务量的增长 , 按照需求添加TiKV或者TiDB实例 。
2、高可用
高可用是TiDB的另一大特点 , TiDB/TiKV/PD这三个组件都能容忍部分实例失效 , 不影响整个集群的可用性 。 下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复 。
1)TiDB
TiDB是无状态的 , 推荐至少部署两个实例 , 前端通过负载均衡组件对外提供服务 。 当单个实例失效时 , 会影响正在这个实例上进行的Session , 从应用的角度看 , 会出现单次请求失败的情况 , 重新连接后即可继续获得服务 。 单个实例失效后 , 可以重启这个实例或者部署一个新的实例 。
2)PD
PD是一个集群 , 通过Raft协议保持数据的一致性 , 单个实例失效时 , 如果这个实例不是Raft的leader , 那么服务完全不受影响;如果这个实例是Raft的leader , 会重新选出新的Raftleader , 自动恢复服务 。 PD在选举的过程中无法对外提供服务 , 这个时间大约是3秒钟 。 推荐至少部署三个PD实例 , 单个实例失效后 , 重启这个实例或者添加新的实例 。
3)TiKV
TiKV是一个集群 , 通过Raft协议(raft一致性哈算法以及Raft为什么是更易理解的分布式一致性算法)保持数据的一致性(副本数量可配置 , 默认保存三副本) , 并通过PD做负载均衡调度 。 单个节点失效时 , 会影响这个节点上存储的所有Region 。 对于Region中的Leader结点 , 会中断服务 , 等待重新选举;对于Region中的Follower节点 , 不会影响服务 。 当某个TiKV节点失效 , 并且在一段时间内(默认30分钟)无法恢复 , PD会将其上的数据迁移到其他的TiKV节点上 。


推荐阅读