文档章节

分布式存储原理:TiDB

浮躁的码农
 浮躁的码农
发布于 09/20 16:55
字数 930
阅读 34
收藏 1

一、TiDB整体架构

如图所示,TiDB有三个组件,分别是TiDB,PD,TiKV,每个组件都是可横向无限扩展的,因此,高可用易扩展得到了保障。

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 为单位进行调度。

 

二、TiDB存储原理

  • 对于一个 Table 来说,需要存储的数据包括三部分:
    1. 表的元信息
    2. Table 中的 Row
    3. 索引数据

1、存储:底层是使用RocksDB(Facebook开源的单机key-value数据库)进行存储。

2、数据复制及灾备:Raft协议。

3、以 Region 为单位,将数据分散在集群中所有的节点上,并且尽量保证每个节点上服务的 Region 数量差不多

 

https://pingcap.com/images/blog-cn/raft-rocksdb.png

 

三、AddReplica:TiDB是怎么做的?

是内部节点提供了一个接口,新增的节点(Learner)会调用内部的接口拉取Region的所有数据,当拉完之后,会将自身设置为Follwer角色;

另一种场景:如果是一个follower节点挂了(过会又好了),导致这个follower数据延迟较多,这种情况怎么补数据?也是通过节点提供的内部接口。

 

四、Learner

我们加了 Learner 这个角色,Learner 的功能也是我们贡献给 etcd 这个项目的。有了 Learner 之后,我们在扩容时不会先去加一个 Follower,而是增加一个 Learner 的角色,它不是 Follower,所以它只会同步数据不会投票,所以无论在做数据写入还是成员变更的时候都不会算上它。当同步完所有数据时(因为数据量大的时候同步时间会比较长),拿到所有数据之后,再把它变成一个 Follower,同时再把另一个我们想下线的 Follower 下掉就好了。这样就能极大的缩短同时存在 4 个 Follower 的时间,整个 Raft Group 的可用性就得到了提升。

 

 

 

 

 

© 著作权归作者所有

浮躁的码农

浮躁的码农

粉丝 77
博文 919
码字总数 181795
作品 0
松江
程序员
私信 提问
自动化部署运维工具 - TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

TiDB
2018/08/23
3.6K
0
PingCAP 开源 TiDB 自动化部署运维工具 TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,目前,TiDB Operator 已经正式开源。 借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 ...

TiDB
2018/08/23
2.7K
2
TiDB Binlog 源码阅读系列文章(一)序

作者:黄佳豪 TiDB Binlog 组件用于收集 TiDB 的 binlog,并准实时同步给下游,如 TiDB、MySQL 等。该组件在功能上类似于 MySQL 的主从复制,会收集各个 TiDB 实例产生的 binlog,并按事务提...

TiDB
06/18
44
0
开源 TiDB Operator 让 TiDB 成为真正的 Cloud-Native 数据库

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

CSDN资讯
2018/08/23
0
0
TiDB Executive Summary

一、重要文档 ● 【TiDB 中文文档】 https://pingcap.com/docs-cn ● 【FAQ】 https://pingcap.com/doc-FAQ-zh ● 【OPS】https://www.tidb.cc 二、TiDB 的技术原理 ● 【TiDB 技术内幕】 ○...

易野
2018/10/27
85
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部