TIDB学习总结

2020-03-14  本文已影响0人  知而乐者

TIDB介绍

1、什么是TIDB

1.1 TIDB介绍

TiDB 是一个数据库,是一个开源分布式数据库,由PingCAP 公司设计开发,TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性(支持事务)。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

1.2 TIDB特性

    1、兼容MYSQL
    2、水平弹性扩展
    3、支持事务
    4、其他(一站式 HTAP(Hybrid Transactional/Analytical Processing,混合事务/分析处理) 解决方案,云原生 SQL 数据库)

2、TIDB架构

tidb架构图


tidb.png

2.1 TIKV

    1、TiKV 负责存储数据,存储数据基本单位是 Region,每个 TiKV 节点负责管理多个 Region。
    2、TiKV 使用 Raft 协议做复制,保证数据一致性和容灾。   
    3、使用RocksDB来进行落盘
    4、 数据在多个 TiKV 之间的负载均衡由 PD 调度,以 Region 为单位调度。

底层用一个全局有序的分布式 Key-Value 引擎(LSM tree)
架构图:


tikv.png

持久化示意图:


持久化.png
存储规则
 1、TiDB 对每个表分配一个 TableID,每一个索引都会分配一个 IndexID,每一行分配一个 RowID(如果表有整数型的 Primary Key,那么会用 Primary Key 的值当做 RowID),
 2、其中 TableID 在整个集群内唯一,IndexID/RowID 在表内唯一,这些 ID 都是 int64 类型 
 3、每行数据按照如下规则进行编码成 Key-Value pair: 
           Key: tablePrefix{tableID}_recordPrefixSep{rowID} Value: [col1, col2, col3, col4]
 4、对于 Index 数据,会按照如下规则编码成 Key-Value pair: 
   Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue  Value: rowID

示例
原数据:
1, "TiDB", "SQL Layer", 10
2, "TiKV", "KV Engine", 20
3, "PD", "Manager", 30
主键索引:
t10_r1 --> ["TiDB", "SQL Layer", 10]
t10_r2 --> ["TiKV", "KV Engine", 20]
t10_r3 --> ["PD", "Manager", 30]
唯一索引
t10_i1_10 --> 1
t10_i1_20 --> 2
t10_i1_30 --> 3

2.2 PDServer

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:

 *   一是存储集群元信息(某个 Key 存储在哪个 TiKV 节点,维护的示region的信息,开始和结束节点,通过心跳来更新);
 *   二是对 TiKV 集群进行调度和负载均衡(数据迁移、Raft group leader 迁移等);
 *   三是分配全局唯一且递增的事务 ID。

常用的命令

 设置pd路径,减少在命令参数    
 export PD_ADDR=[http://172.16.14.100:2379](http://172.16.14.100:2379/)

查看集群信息和健康状态

./pd-ctl cluster 与 ./pd-ctl health

查看和修改配置信息(包括备份数量等)

./pd-ctl config show all (./pd-ctl config show replication ) 与 ./pd-ctl config set max-replicas 2

  查看有哪些tikv节点与有哪些region

./pd-ctl store 与 ./pd-ctl region

 下线tikv节点

   ./pd-ctl store delete 1(下线tikv1)

新增副本

./pd-ctl operator add add-peer 1 2 (在 store 2 上新增 Region 1 的一个副本)

 设置权重 

  ./pd-ctl store weight 1 5 10

2.3 TIDB

 1、负责接收 SQL 请求,处理 SQL 相关逻辑,通过 PD 找到所需数据的 TiKV 地址。
 2、TiDB Server 是无状态的,本身不存储数据,只负责计算,可以无限水平扩展。
 3、TiDB 节点可以通过负载均衡组件 (如 LVS、HAProxy 或者 F5)对外提供统一入口

TIDB SQL 层架构:


架构.png

执行流程

3.1查询语句

查询语句执行流程,如上。 注意:

    1、通过sql解析,得到查询的startKey和endKey,将一次查询分成多个task。
                具体为:SQL->多个dissql ->多个coprocessor(对region) -> 对应一个coprocessor task
    2、tidb中会缓存region的信息,每次取回从缓存中取,没有的话才回去PD中寻找,会维持多个与tikv的链接
    3、缓存是有默认失效时间的,默认是600秒超过600秒后会从PD中找
    4、只会从leader中去查找数据
    5、如果查询失败(region分裂或leader变化),则会更新缓存重新生成task查

3.2DDL语句执行流程

流程图:


流程图.png

注:

   1、添加列时,不会修改tikv中的数据,在每次取值的时候赋值
   2、删除列时,会异步执行job删除

3.3代码查看

基于2.3

1、regionCache,与startKey和endKey的查询,已经region失效时间长(table_reader.go  192   region_cache.go 665)
2、读region数据的时候选择的是leader还是replica(region_cache.go 298)
3、DDLWork的执行(ddl.go 442,domain.go 667)
4、添加字段之后的数据变化,及tikv中数据存储的结构(tablecodec.go 377)   
5、获取key对应的TIKV,从TIKV中获取数据(region_cache.go 665,client.go 274)
6、一台tikv宕机后的情况
7、建立链接的过程

4、其他

整体架构.png

TiDB Binlog(导出、恢复)

TiDB Binlog 是一个用于收集 TiDB 的 binlog,需要部署Pump(收集sql信息) 和 Drainer(分析sql到下游渠道(kafka,mysql等))

TiDB Binlog 支持以下功能场景:

参考:
[https://pingcap.com/docs-cn/v3.0/how-to/deploy/tidb-binlog/]
[https://pingcap.com/docs-cn/v3.0/reference/tidb-binlog-overview/](简介)

数据导入支持

Syncer 是一个数据导入工具,能方便地将 MySQL 的数据增量导入到 TiDB。
Syncer 可以部署在任一台可以连通对应的 MySQL 和 TiDB 集群的机器上。


syncer.png

参考:https://pingcap.com/docs-cn/v3.0/reference/tools/syncer/(问题)

TiSpark

TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。

TiDB Operator

TiDB Operator 提供在主流云基础设施(Kubernetes)上部署管理 TiDB 集群的能力。它结合云原生社区的容器编排最佳实践与 TiDB 的专业运维知识,集成一键部署、多集群混部、自动运维、故障自愈等能力,极大地降低了用户使用和管理 TiDB 的门槛与成本。

Mysql兼容

不支持的特性

tidb生产服务器配置:

在Kubernetes上部署:https://pingcap.com/docs-cn/v3.0/tidb-in-kubernetes/deploy/prerequisites/

官方配置参考:https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendations/

配置.png

学习文档地址:https://pingcap.com/docs-cn/

美团使用案例:https://tech.meituan.com/2018/11/22/mysql-pingcap-practice.html

Mobike使用案例:https://zhuanlan.zhihu.com/p/32350453

Explain介绍:https://pingcap.com/docs-cn/v3.0/reference/performance/understanding-the-query-execution-plan/

上一篇下一篇

猜你喜欢

热点阅读