TiDB学习4:Placement Driver

news2024/9/8 23:45:43

目录

1. PD架构

2. 路由功能

2. TSO

2.1 TSO 概念

2.2 TSO分配过程

2.3 TSO时间窗口

3. 调度

3.1 信息收集

3.2 生成调度(operator)

3.3 执行调度

4. Label 与高可用

4.1 Label 的配置

5. 小结


1. PD架构

PD是整个TiDB的总控,相当于集群的大脑

PD集成了etcd,支持故障转移,无需担心单点故障

PD通过etcd raft,保证数据强一致性

一个TiKV Node(一个TiKV实例)就是一个store

 一个Region的一个副本叫一个peer,一个Region包含多个peer

一个Region的多个副本构成raft group

多个raft group构成multi raft

PD主要功能

  • 整个集群 TiKV 的元数据存储
  • 分配全局 ID 和事务 ID(table id、index id)
  • 生成全局时间戳 TSO
  • 收集集群信息进行调度
  • 提供 label,支持高可用
  • 提供 TiDB Dashboard

2. 路由功能

执行sql时,想要读取的数据的Leader在哪个TiKV,需要问PD

执行计划传到executor,然后把请求发给TiKv Client,然后去PD上找在哪个TIKV上的Region取数据,然后PD告诉TiKV Client去哪个TiKV上去数据,就发送请求到TiKV把数据读出来,如果每次都用Key这样去读数据网络压力就会大,那么将读取出来的位置(在哪个TiKV)缓存到TiKV Client(Region Cache)中,比如Key=100缓存到Region Cache中,下一次就不用去PD中找Key=100在哪个region,直接在Region Cache读取,如果要读Leader发生了改变,比如从TIKV node1变到TiKVnode 2去了,TIKV node1会说我不是Leader了,要到TiKV node 2去读取,这叫back off,back off越多,读取延迟越高。

2. TSO

2.1 TSO 概念

TSO(int64) = physical time(unix物理时间,精确到毫秒) logical time(逻辑时间,能把1ms分成262144个TSO)

2.2 TSO分配过程

  1. 发送请求TSO给PD Client
  2. PD Client立即返回一个对象tsFuture(内存中的一个对象,标识了什么时刻请求了一个TSO)给TSO请求者,TSO请求者可以接着做解析编译生成执行计划
  3. 异步到PD Leader节点请求TSO,在PD Leader节点排队分配TSO,做完之后把TSO传回给PD Client
  4. 在请求的TSO来之前,如果解析编译完成了,tsFuture会调用tsFuture.wait方法等待TSO到来,如果PD Client在解析编译完成前就拿到了TSO则会时不时去看有没有调用tsFuture.wait方法,有的话就给TSO
  5. PD Client拿到TSO后,看见tsFuture.wait已经在等了,就立即把TSO给出来,这样一条sql语句既解析编译好了也拿到了TSO就可以开始执行了

        每条sql每次都去请求PD拿TSO会造成性能下降,批处理可以解决,比如1ms内有100个会话去请求TSO,这时候PD Client就会把这100个会话的sql请求变成一个批处理请求。PD会有一个批处理的限定时间段,比如5ms所有的会话为一个批处理,如果这个5ms之内只有一条sql,也会去PD请求。

2.3 TSO时间窗口

 

        PD生成的TSO会存在PD的持久化存储中,会产生IO,会话sql越多,PD的IO压力越大。

        为了解决IO压力大的问题,PD会先分配一段TSO在缓存中,比如分配3秒钟700~703在缓存中,此时持久化存储中TSO的开始时间是存的703,TiDB Server就到缓存中排队获取TSO,3秒都获取完了,再分配3秒706,所以时间窗口就是将一段TSO先分配到缓存供TiDB Server获取,减少PD IO压力。

        假设此时TiDB Server最新一次请求获取的TSO是704,刚好Leader PD宕机了,缓存里面的703~706都丢了 ,选出的新Leader PD会从706开始分配706~709到缓存中,704~706的都丢了,会产生一个小的断层,这是TSO的高可用性。

3. 调度

 总流程

3.1 信息收集

 

TiKV节点会周期性的去向PD报心跳,有两种心跳信息

  • store hearbeat:当前的容量、剩余空间、读写流量
  • region hearbeat:副本的分布状态、region读写流量

3.2 生成调度(operator)

  • Balance
    • Leader(主要是读写,是不是均衡分布在所有的TIKV上)
    • Region(主要是存储压力,不要让某一个TiKV过多存储Region)
  • Hot Region(打散热点Leader region,让其分布在多个节点)
  • 集群拓扑
  • 缩容
  • 故障恢复Region merge(drop、delete、truncate等操作后,region较空,可以将空的regio进行合并)

3.3 执行调度

        PD直接将operator发送给想要改动的region(有一个等待队列,从这个队列中按照设定的速度将operator发送给region) ,region接到operator后做相应的调整(分裂、合并,调到其他节点等等)。

4. Label 与高可用

        DC1、DC2、DC3是3个独立的数据中心,Rack是机柜,Rack中是TiKV服务器。

        如果rack4或者DC2出问题了,Region1就可能不可用了(多数派不可用),如果DC1出问题了,Region2可能也不可用了,不管是坏一个机柜或者是坏一个数据中心都不影响Region3

        如果元数据存在某个Region中,刚好这个Region不可用了,那么整个数据库就不可用了,PD节点只能保证同一个TiKV节点上不能有同时有一个Region的两个peer,不能保证其他分布,PD是通过Label来知道哪一个TiKV在哪一个DC和在哪一个Rack,Label是为了让PD感知集群的拓扑结构。

4.1 Label 的配置

TiKV设置标签

server.labels: { zone: "1", rack: "2", host: "3" }

zone代表DC,rack代表Rack(机柜),host代表服务器

在PD这儿设置隔离级别参数

location-labels = ["zone", "rack", "host" ]

[replication]

isolation-level = "zone"(Region相同的副本在zone的这一层隔离)

5. 小结

  • PD 的架构与原理
  • TSO 的分配
  • 调度的原理与实现
  • label 与高可用的关系

来自TiDB官方资料 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1697425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

易备数据备份软件: 快速备份 MySQL\SQL Server\Oracle\泛微 OA 数据库

易备数据备份软件支持对 SQL Server、Oracle、MySQL、PostgreSQL、MariaDB、泛微 OA 等数据库进行快速备份,备份过程不会对任何服务造成中断。 使用一份授权,可以备份无限量的数据库,不管数据库服务器是否在本机、本地网络、或是远程网络。可…

用LabVIEW进行CAN通信开发流程

本文详细介绍了在LabVIEW中开发CAN(Controller Area Network)通信的流程,包括硬件配置、软件编程和调试步骤。重点讨论了开发过程中需要注意的问题,如节点配置、数据帧格式和错误处理等,为开发高效可靠的CAN通信应用提…

可以在搜索结果中屏蔽指定网站的插件

可以在搜索结果中屏蔽指定网站的插件 | LogDict背景 在搜索引擎中搜索问题, 往往充斥各种无效内容 比如搜个技术类的问题, 前几页CSDN, 百度百家号, 百度经验, 百度知道, 腾讯云各类云爬的水文 CSDN基本都是复制粘贴的, 甚至格式都乱码了, 虽然我以前也干过 要复制粘贴无所谓, …

Java语法篇-易错

文章目录 类型转换switch case类之间关系及UMLtry catch finally 类型转换 隐式类型转换,不同数值类型参与计算时,低精度会转化为高精度参与运算 byte,short,char参与整数运算时会转成int float,int 参与浮点数运算时会转成double 强制类型转换 高精…

Hadoop概览以及编译hadoop说明

一、Hadoop概述 Hadoop 是一个用于跨计算机集群存储和处理大型数据集的软件框架。它旨在处理大数据,即传统数据库无法有效管理的极其庞大和复杂的数据集。Hadoop不是传统意义上的数据仓库,因为它们的用途不同,架构也不同。Hadoop 是一个跨分布…

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

OS复习笔记ch6-2

死锁的解决 死锁的预防(打疫苗)死锁的避免(戴口罩)死锁的检测(做核酸) 死锁的预防 前面我们提到了死锁的四个必要条件 防止前三个必要条件,就是间接预防防止最后一个必要条件–循环等待&…

每日一题23:统计文本中单词出现的次数

一、每日一题 解答: import pandas as pd def count_occurrences(files: pd.DataFrame) -> pd.DataFrame:bull_cnt len(files[files[content].str.contains(r\sbull\s)])bear_cnt len(files[files[content].str.contains(r\sbear\s)])res_df pd.DataFrame({…

【Text2SQL 论文】SeaD:使用 Schema-aware 去噪训练的 end2end 的 Text2SQL

论文:SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising ⭐⭐ NAACL 2022, arXiv:2105.07911 本论文提出 SeaD 模型,使用 schema-aware 的去噪方法来训练一个 end2end、seq2seq 的 Transformer 模型来实现 Text2SQL。 一、论文速读…

【LeetCode刷题记录】207.课程表

207 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 b…

第20届文博会:“特别呈现”—周瑛瑾雷米·艾融双个展,著名美术评论家,批评家彭德教授对周瑛瑾作品进行评论

周瑛瑾不是学院派艺术家,但在彩墨画领域的天赋超出中国八大美院的同类型画家。相比具有批判意识的当代艺术,他的彩墨艺术如同我们这个苦难世界的创可贴和安慰剂。当我面对他的彩墨画,首先是惊艳,随之想到屈原的离骚,还…

淘工厂订单导出自动化工具

目录 下载安装与运行 主要目的 其他工具的弊端 本工具的优势 视频演示 下载新版后的注意事项 支持的导出项 什么叫一单多拍 常见问题 如何实现快捷登录 导出卡住时如何操作 如何精确导出 下载安装与运行 下载、安装与运行 语雀 主要目的 导出订单信息&#xf…

【数据结构】哈希表的原理及其实现

文章目录 哈希表的概念哈希函数的设计常见的哈希函数 哈希冲突1. 闭散列代码实现 2. 开散列拉链法的优点 针对开散列哈希的扩展基于开散列拉链法封装哈希表MyHash.h 基于哈希表实现unordered_map类Myunordered_map.h 基于哈希表实现unordered_set类Myunordered_map.h 哈希表的概…

Ethercat总线学习:CAN、CANopen、EtherCAT、PDO与SDO

各种XoE CoE是什么 CoE CAN application protocol Over EtherCAT,是EtherCAT应用层协议的一种,根据CiA402协议编写,使用对象和对象字典的功能来实现邮箱通讯。 PDO与SDO是常用的数据传输方式,他们在实现高效数据传输、同步方面发…

html中被忽略的简单标签

1&#xff1a; alt的作用是在图片不能显示时的提示信息 <img src"https://img.xunfei.cn/mall/dev/ifly-mall-vip- service/business/vip/common/202404071019208761.jp" alt"提示信息" width"100px" height"100px" /> 2&#…

Vue2基础及其进阶面试(二)

vue2的生命周期 删除一些没用的 App.vue 删成这个样子就行 <template><router-view/></template><style lang"scss"></style>来到路由把没用的删除 import Vue from vue import VueRouter from vue-router import HomeView from .…

Java进阶学习笔记25——Objects类

为啥比较两个对象是否相等&#xff0c;要用Objects的equals方法&#xff0c;而不是用对象自己的equals方法来解决呢&#xff1f; Objects&#xff1a; Objects类是一个工具类&#xff0c;提供了很多操作对象的静态方法供我们使用。 package cn.ensource.d14_objects;import ja…

无货源抖店怎么起店?教你两种起店方法,记得收藏!

大家好&#xff0c;我是喷火龙。 开通抖音小店之后最重要的一步就是起店了&#xff0c;今天就给大家分享两种起店方法。 大家都知道&#xff0c;产品是做店的核心&#xff0c;品不行&#xff0c;就算平台给你免费的流量&#xff0c;那你也承接不住。 第一个&#xff0c;商品卡…

Steam在连接至服务器发生错误/连接服务器遇到问题解决办法

Steam作为全球最大的数字游戏分发平台&#xff0c;构建了一个活跃的玩家社区&#xff0c;用户可以创建个人资料&#xff0c;添加好友&#xff0c;组建群组&#xff0c;参与讨论&#xff0c;甚至直播自己的游戏过程。通过创意工坊&#xff0c;玩家还能分享自制的游戏模组、地图、…

【古董技术】ms-dos应用程序的结构

序 制定一个MS-DOS应用程序计划需要认真分析程序的大小。这种分析可以帮助程序员确定MS-DOS支持的两种程序风格中哪一种最适合该应用程序。.EXE程序结构为大型程序提供了好处&#xff0c;因为所有.EXE文件之前都有额外的512字节&#xff08;或更多&#xff09;的文件头。另一方…