【赵渝强老师】TiDB PD集群存储的信息

TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(Hybrid Transactional and Analytical Processing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时HTAP、云原生的分布式数据库、兼容MySQL协议和MySQL生态等重要特性。目标是为用户提供一站式OLTP(Online Transactional Processing)、OLAP(Online Analytical Processing)、HTAP解决方案。TiDB适合高可用、强一致要求较高、数据规模较大等各种应用场景。

一、 TiDB的体系架构

在内核设计上,TiDB分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的TiDB系统。对应的架构图如下:

通过使用TiKV存储引擎支持OLTP的应用场景,而通过使用TiFlash存储引擎支持OLAP的应用场景。在TiDB数据库分布式集群中主要包含三个子集群:

  • 1、存储集群:

该子集群负责数据的存储,其中又有行存引擎和列存引擎两种不同的存储方式:行存引擎指的是TiKV节点,它最终将数据存入底层的RocksDB中;列存引擎指的是TiFlash节点,它从TiKV节点中实时同步数据,这样的TiFlash节点也可以有多个。

  • 2、调度集群:

调度集群中的每个节点叫做PD Instance,也叫做PD实例。存储集群会将数据存储位置等元信息存入调度集群中。

  • 3、计算集群:

该子集群中可以包含多个TiDB Instance,即:TiDB实例。计算集群负责接收客户端发送的SQL语句,并访问PD集群获取数据存储位置和集群的时间戳TSO等信息,最终将SQL语句转换成Key-Value的键值操作,从而访问存储在存储集群中的数据。

二、 TiDB PD集群存储的信息

Placement Driver(简称PD)是TiDB里面全局中心总控节点,是整个集群的管理模块,负责整个集群的调度。TiDB作为一个分布式高可用存储系统,系统需要具备多副本容错,动态扩容、缩容,容忍节点掉线以及自动错误恢复的功能。为了满足这些功能,TiDB就需要收集足够的信息,比如每个节点的状态、每个Raft Group的信息等。PD根据这些信息以及调度的策略,制定出尽量满足这些需求的调度计划,并提供基本操作来完成这个计划。PD的主要工作体现在以下三个方面:

  • 存储集群的元信息,例如:Region存储在哪个TiKV节点;
  • 对TiKV集群进行调度和负载均衡,如:数据的迁移、Raft Group Leader的选举等;
  • 分配全局唯一且递增的事务ID。
视频讲解如下
【赵渝强老师】TiDB PD集群存储的信息

PD的调度功能依赖于整个集群信息的收集,简单来说,PD需要知道每个TiKV节点的状态以及每个Region的状态。TiKV集群会向PD汇报以下两类消息:

  • 每个TiKV节点会定期向PD汇报节点的状态信息

TiKV节点(也叫Store)与PD之间存在心跳包,一方面PD通过心跳包检测每个Store是否存活,以及是否有新加入的Store;另一方面,心跳包中也会携带这个Store的状态信息,主要包括:

(1)总磁盘容量

(2)可用磁盘容量

(3)承载的Region数量

(4)数据写入/读取速度

(5)发送/接受的Snapshot数量(副本之间可能会通过Snapshot同步数据)

(6)Store是否过载

(7)labels标签信息(标签是具备层级关系的一系列Tag,能够感知拓扑信息)

通过使用命令行工具pd-ctl可以查看到TiKV Store的状态信息。

  • 每个Raft Group的Leader会定期向PD汇报Region的状态信息

每个Raft Group的Leader和PD之间存在心跳包,用于汇报这个Region的状态,主要包括下面几点信息:

(1)Leader的位置

(2)Followers的位置

(3)掉线副本的个数

(4)数据写入/读取的速度

相关推荐
_ziva_11 分钟前
MAC-SQL 多智能体协作框架解析
数据库·oracle
最贪吃的虎11 分钟前
Redis其实并不是线程安全的
java·开发语言·数据库·redis·后端·缓存·lua
代码不停17 分钟前
MySQL事务
android·数据库·mysql
山峰哥18 分钟前
数据库工程与SQL调优实战:从原理到案例的深度解析
java·数据库·sql·oracle·性能优化·编辑器
OpsEye19 分钟前
Redis 内存碎片的隐形消耗——如何用 memory purge 命令释放空间?
运维·网络·数据库·redis·缓存·内存·监控
施嘉伟1 小时前
一次典型的 SQL 性能问题排查:临时表导致的隐藏性能陷阱
数据库·sql
IT_Octopus1 小时前
java 实体属性 Map 解决 mybatis-plus wrapper selectone 查mysql json类型为null 问题
java·mysql·mybatis
IT 乔峰1 小时前
分享一个负载均衡的NDB高可用集群架构+部署详细说明
数据库·架构·负载均衡
丁丁点灯o1 小时前
oracle中基于正则表达式匹配规则提取子串的函数REGEXP_SUBSTR
数据库·oracle·正则表达式
木风小助理1 小时前
Android 数据库实操指南:从 SQLite 到 Realm,不同场景精准匹配
jvm·数据库·oracle