From 5786555794af1a3fc1b93112128dfa96d33968e9 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 11:56:37 +0800 Subject: [PATCH 1/5] overview: split overview.md into sub docs Via: https://github.com/pingcap/docs/pull/611 --- architecture.md | 28 +++++++++++++++++++++++++ features.md | 28 +++++++++++++++++++++++++ overview.md | 56 ++++--------------------------------------------- 3 files changed, 60 insertions(+), 52 deletions(-) create mode 100644 architecture.md create mode 100644 features.md diff --git a/architecture.md b/architecture.md new file mode 100644 index 000000000000..8ce1f681d075 --- /dev/null +++ b/architecture.md @@ -0,0 +1,28 @@ +--- +title: TiDB 整体架构 +category: introduction +--- + +# TiDB 整体架构 + +要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构。TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 [TiSpark](https://github.com/pingcap/tispark/) 组件。 + +![TiDB Architecture](media/tidb-architecture.png) + +## TiDB Server + +TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。 + +## 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 为单位进行调度。 + +## TiSpark + +TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。 \ No newline at end of file diff --git a/features.md b/features.md new file mode 100644 index 000000000000..b62582fd27fb --- /dev/null +++ b/features.md @@ -0,0 +1,28 @@ +--- +title: TiDB 核心特性 +category: introduction +--- + +# TiDB 核心特性 + +本文详细介绍 TiDB 的两大核心特性:水平扩展与高可用。 + +## 水平扩展 + +无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 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 节点上。 \ No newline at end of file diff --git a/overview.md b/overview.md index f638b1956eed..ea017acc4e18 100644 --- a/overview.md +++ b/overview.md @@ -1,15 +1,13 @@ --- -title: TiDB 简介与整体架构 +title: TiDB 简介 category: introduction --- -# TiDB 简介与整体架构 - -## TiDB 简介 +# TiDB 简介 TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。 -TiDB 具备如下核心特性: +TiDB 具备如下特性: - 高度兼容 MySQL @@ -43,50 +41,4 @@ TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间 - [说存储](https://pingcap.com/blog-cn/tidb-internal-1/) - [说计算](https://pingcap.com/blog-cn/tidb-internal-2/) -- [谈调度](https://pingcap.com/blog-cn/tidb-internal-3/) - -## TiDB 整体架构 - -要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构。TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 [TiSpark](https://github.com/pingcap/tispark/) 组件。 - -![TiDB Architecture](media/tidb-architecture.png) - -### TiDB Server - -TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。 - -### 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 为单位进行调度。 - -### TiSpark - -TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。 - -## 核心特性 - -### 水平扩展 - -无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 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 节点上。 +- [谈调度](https://pingcap.com/blog-cn/tidb-internal-3/) \ No newline at end of file From db9fb3a89d7a604c6ea64362d107b6f2f407a05f Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 12:00:13 +0800 Subject: [PATCH 2/5] readme: udpate intro --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 000696a4447d..0226a397ce4d 100755 --- a/README.md +++ b/README.md @@ -3,8 +3,9 @@ ## 目录 + TiDB 简介与整体架构 - - [TiDB 简介](overview.md#tidb-简介) - - [TiDB 整体架构](overview.md#tidb-整体架构) + - [TiDB 简介](overview.md) + - [TiDB 整体架构](architecture.md) + - [TiDB 核心特性](features.md) - [TiDB 快速入门指南](QUICKSTART.md) + TiDB 用户文档 + TiDB 数据库管理 From 98e1078bfcb01a62f11f3db3fe3eff014431abb3 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 13:44:18 +0800 Subject: [PATCH 3/5] overview: add a link to MySQL compatibility Via: https://github.com/pingcap/docs/pull/613 --- overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overview.md b/overview.md index ea017acc4e18..a95446aaf0f7 100644 --- a/overview.md +++ b/overview.md @@ -11,7 +11,7 @@ TiDB 具备如下特性: - 高度兼容 MySQL - 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。 + [大多数情况下](sql/mysql-compatibility.md),无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。 - 水平弹性扩展 From 551baa28edc3a28d88584e0e303e6ab09ce6baf9 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 13 Sep 2018 16:05:34 +0800 Subject: [PATCH 4/5] readme: update wording --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0226a397ce4d..eb425a9bf505 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## 目录 -+ TiDB 简介与整体架构 ++ 关于 TiDB - [TiDB 简介](overview.md) - [TiDB 整体架构](architecture.md) - [TiDB 核心特性](features.md) From 07ad22437dfe0f92e58611d052b6f48b223463e4 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Mon, 17 Sep 2018 16:19:53 +0800 Subject: [PATCH 5/5] readme: update toc --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f9b9199ad3d6..bed30b51a6dd 100755 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ - [TiDB 简介](overview.md) - [TiDB 整体架构](architecture.md) - [TiDB 核心特性](features.md) -- [TiDB 快速入门指南](QUICKSTART.md) + TiDB 快速入门 - [快速入门指南](QUICKSTART.md) - [SQL 基本操作](try-tidb.md)