一、Tidb是什么?
Tidb是一个分布式、强一致、具有水平扩展能力的关系型数据库。
关键特性:
水平扩展
高可用
ACID事务
SQL支持
二、Tidb整体架构
组件作用:
个人理解:
Tidb :无状态的计算引擎(通俗的讲就是和外面的应用和客户端做交互,通过MySQL的协议接受外面的请求,对于外面的用户看到的就是一个MySQL,可以通过Navicat直接连接)
官方描述:
TiDB Server 负责接收SQL请求,处理SQL相关的逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(LVS、HAProxy或F5)对外提供统一的接入地址。
个人理解:
TiKV :分布式且支持事务的分布式存储引擎(真正存储数据的地方,接受sql发来的请求)
官方描述:
TiKV Server 负责存储数据,从外部看TiKV是一个分布式的提供事务的Key-Value存储引擎。存储数据的基本单位是Region,每个Region负责存储一个Key Range(从StartKey到EndKey的左闭右开区间)的数据,每个TiKV节点会负责多个Region。TiKV使用Raft协议做复制,保持数据的一致性和容灾。副本以Region为单位进行管理,不同节点上的多个Region构成一个Raft Group,互为副本。数据在多个TiKV之间的负载均衡由PD调度,这里也就是以Region为单位进行调度
个人理解:
PD :集群的管理节点
官方描述:
Placement Driver(简称PD)是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个Key存储在那个TiKV节点);二是对TiKV集群进行调度和负载均衡(如数据的迁移、Raft group leader的迁移等);三是分配全局唯一且递增的事务ID。
PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署3个节点。PD在选举的过程中无法对外提供服务,这个时间大约是3秒。
存储:
任何持久化的存储引擎,数据终归要保存在磁盘上,TiKV 也不例外。但是 TiKV 没有选择直接向磁盘上写数据,而是把数据保存在 RocksDB 中,具体的数据落地由 RocksDB 负责。这个选择的原因是开发一个单机存储引擎工作量很大,特别是要做一个高性能的单机引擎,需要做各种细致的优化,而 RocksDB 是由 Facebook 开源的一个非常优秀的单机 KV 存储引擎,可以满足 TiKV 对单机引擎的各种要求。这里可以简单的认为 RocksDB 是一个单机的持久化 Key-Value Map
数据容灾:
RocksDB解决了数据落地问题,但是没有解决高可用的场景,所以tidb使用Raft进行多副本复制
Raft特性:
多数派写入(假设Raft讲数据复制三份,每一次写入都要保证两个副本写入成功,才对客户端返回成功,这就算有一个副本丢掉,还有一个副本有最新的数据)
强leader
多leader
成员变更
有了Raft之后,就可以在不同的机器、机架、数据中心之间复制