TiDB

一、TiDB简介

TiDB是一个分布式NewSQL数据库。它支持水平弹性扩展、ACID事物、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性,是一个不仅适合OLTP场景还适合OLAP场景的混合数据库。

(注:NewSQL数据库的特点:(1)拥有NOSQL的可扩展性和高可用(2)保留了原ACID事务的支持(3)支持SQL(4)通过特定的算法自动分布到多个节点)

TIDB是开源分布式 HTAP (Hybrid Transactional and Analytical Processing)数据库,结合了传统的RDBMS和NoSQL的最佳特性。TiDB兼容MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB的目标是为OLTP和OLAP场景提供一站式的解决方案。TiDB具备如下核心特点:

1、高度兼容MySQL

大多数情况下,无需修改代码即可从MySQL轻松迁移至Tidb,分库分表后的MySQL集群也可以通过Tidb工具进行实时迁移。

2、水平弹性扩展

通过简单的增加新节点即可实现Tidb的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。

3、分布式事务

Tidb 100%支持标准的ACID事务。

4、真正金融级高可用

相比于传统主从(M-S)复制方案,基于Raft的多数派选举协议可以提供金融级的100%数据强一致性保证,且在不丢失大数据副本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。

5、一站式HTAP解决方案

TiDB作为典型OLTP行存数据库,同时兼具强大的OLAP性能,配合TiSpark,可提供一站式HTAP解决方案,一份存储同时处理OLTP&OLAP,无需传统繁琐的ETL过程。

6、云原生SQL数据库

TiDB是为云而设计的数据库,同Kubernetes深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。

TiDB的设计目标是100%的OLTP场景和80%的OLAP场景,更复杂的OLAP分析可以通过TiSpark项目来完成。

TiDB对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等Sharding方案。同时,它也让开发运维人员不用关注数据库Scale的细节问题,专注于业务开发,极大的提升研发的生产力。

 

二、TiDB整体架构

TiDB_第1张图片

 

TiDB集群主要分为三个组件:

1、TiDB Server

 

TiDB Server负责接收SQL请求,处理SQL相关的逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果。TiDB Server是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy或F5)对外提供统一的接入地址。

2、PD Server

Placement Driver(简称PD)是整个集群的管理模块,其主要工作有三个:一个是存储集群的元信息(某个key存储在哪个TiKV节点);二是对TiKV集群进行调度和负载均衡(如数据的迁移、Raft group leader的迁移等);三是分配全局唯一且递增的事务ID.

PD是一个集群,需要部署奇数个节点,一般线上推荐至少部署3个节点。

3、TiKV Server

TiKV Server负责存储数据,从外部看TiKV是一个分布式提供事务的Key-Value存储引擎。存储数据的基本单位是Region。每个Region负责存储一个Key Range(从StartKey到EndKey的左闭右开区间)的数据,每个TiKV节点会负责多个Region。TiKV使用Raft协议做复制,保持数据的一致性和容灾。副本以Region为单位及逆行管理,不同节点上的多个Region构成一个RaftGroup,互为副本。数据在多个TiKV之间的负载均衡由PD调度,这里也是以Region为单位进行调度。

三、核心特性

1、水平扩展

水平扩展包括计算能力和存储能力。TiDB Server负责处理SQL请求,随着业务的增长,可以通过添加TiDB Server节点,从而提高整体的处理能力。TiKV负责存储数据,随着数据量的增长,可以部署更多的TiKV Server节点来解决数据规模较大的问题。PD会在TiKV节点之间以Region为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署3个TiKV,3个PD,2个TiDB),随着业务量的增长,按照需求添加TiKV或者TiDB实例。

2、高可用

TiDB/TiKV/PD这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。

(1)TiDB

TiDB是无状态的,推荐至少部署两个实例。当单个实例失效时,会影响正在这个实例上的session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。

(2)PD

PD是一个集群,通过Raft协议保持数据的一致性,单个实例失效时,如果这个实例Raft的leader,那么服务完全不受影响;如果这个实例时Raft的leader,会重新选出新的Raft Leader,自动恢复服务。PD在选举的过程中无法对外提供服务,这个时间大概是3秒钟,推荐至少部署3个PD实例,单个实例失效后,重启这个实例或者添加新的实例。

(3)TiKV

TiKV是一个集群,通过Raft协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过PD做负载均衡调度。单个节点失败时,会影响这个节点上存储的所有Region。对于Region中的Leader节点,会中断服务,等待重新选举;对于Region中的Follower节点,不会影响服务。当某个TiKV节点失效,并且在一段时间内(默认30分钟)无法恢复,PD会将其上的数据迁移到其他的TiKV节点上。

 

注:以上只是对tidb的一个基本了解,更详细的资料可以转至tidb的官方文档,注意里面的常见问题和解答,很有用。tidb官方文档网址:https://pingcap.com/docs-cn/

 

 

 

 

 

 

 

https://blog.csdn.net/D_Guco/article/details/80641236

你可能感兴趣的:(DataBus项目)