TiDB学习4:Placement Driver

目录

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官方资料 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Overleaf中出现文字越界、越下届、没有正确分页、换页的原因和解决方法

在使用overleaf中,我偶尔会遇到如标题所说的情况,也如图所示: 后来发现,是因为这一页前面是一个表格,所以怀疑是表格的格式导致的。所以让chatgpt帮我更换了表格的格式,成功解决问题。 对于问题可能的成因…

20232803 2023-2024-2 《网络攻防实践》实践十报告

目录 1. 实践内容1.1 SEED SQL注入攻击与防御实验1.2 SEED XSS跨站脚本攻击实验(Elgg) 2. 实践过程2.1 SEED SQL注入攻击与防御实验2.1.1 熟悉SQL语句2.1.2 对SELECT语句的SQL注入攻击2.1.3 对UPDATE语句的SQL注入攻击2.1.4 SQL对抗 2.2 SEED XSS跨站脚本攻击实验(Elgg)2.2.1 发…

视频拼接融合产品的产品与架构设计(四)分布式GPU运算合并单元

上一篇如下 视频拼接融合产品的产品与架构设计(三)内存和显存单元数据迁移 视频合并单元说明 对下面这张图做些说明,视频接入是比较常见,可以说是普通,但是做到接入后随即进行比较重的算法运算,这个在视频领域并不多…

探索PyImGui:高效可交互图形界面的Python实现

简介 Pyimgui 是一个基于 Cython 的 Python 绑定层,它将功能强大的用户界面库 Dear ImGui 无缝集成到 Python 环境中。它使 Python 开发人员能够轻松地创建交互式图形用户界面 (GUI),同时充分利用 Dear ImGui 的丰富功能集。 下图为用Dear ImGui开的GU…

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中,申请权限的步骤有些繁琐,需要用到:ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数,今天就借助 ActivityResultLauncher 来简化书写。 步骤1:创…

2024年5月26日 (周日) 叶子游戏新闻

资深开发者:3A游戏当前处于一种尴尬的中间地带游戏行业整体,尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出,广受好评,但居高不下的游戏开发成本(传闻《漫威蜘蛛侠2》的制作成本高达3亿美元)正严重…

提高Java编程效率:ArrayList类的使用技巧

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

虹科Pico汽车示波器 | 免拆诊断案例 | 2012 款雪佛兰科鲁兹车偶尔多个故障灯异常点亮

故障现象 一辆2012款雪佛兰科鲁兹车,搭载1.8 L 发动机,累计行驶里程约为9.6万km。该车组合仪表上的发动机故障灯、ABS故障灯及动力转向故障灯偶尔异常点亮,同时发动机转速表和发动机冷却液温度表的指针会突然归零,严重时发动机无…

【Linux 网络】网络基础(三)(网络层协议:IP 协议)

在复杂的网络环境中确定一个合适的路径。 一、TCP 与 IP 的关系 IP 层的核心作用是定位主机,具有将数据从主机 A 发送到主机 B 的能力,但是能力并不能保证一定能够做到,所以这时就需要 TCP 起作用了,TCP 可以通过超时重传、拥塞控…

[Vulnhub]Vulnix 通过NFS挂载+SSH公钥免密登录权限提升

端口扫描 Server IP AddressPorts Open192.168.8.103TCP:22/tcp, 25/tcp, 79/tcp, 110/tcp, 111/tcp, 143/tcp, 512/tcp, 513/tcp, 514/tcp, 993/tcp, 995/tcp, 2049/tcp, 37522/tcp, 42172/tcp, 43219/tcp, 47279/tcp, 54227/tcp $ nmap -p- 192.168.8.103 -sV -sC --min-ra…

Nginx实战(安装部署、常用命令、反向代理、负载均衡、动静分离)

文章目录 1. nginx安装部署1.1 windows安装包1.2 linux-源码编译1.3 linux-docker安装 2. nginx介绍2.1 简介2.2 常用命令2.3 nginx运行原理2.3.1 mater和worker2.3.3 Nginx 的工作原理 2.4 nginx的基本配置文件2.4.1 location指令说明 3. nginx案例3.1 nginx-反向代理案例013.…

python基于深度学习的聊天机器人设计

python基于深度学习的聊天机器人设计 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录注册功能 用户在没有登录自己的用户名之前只能浏览本网站的首页,想要使用其他功能都…

ROCm上来自Transformers的双向编码器表示(BERT)

14.8. 来自Transformers的双向编码器表示(BERT) — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2l#save def get_tokens_and_segments(tokens_a, tokens_bNone):""&qu…

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&#…

CTF之Web_python_block_chain

这种题对于我来说只能看大佬的wp&#xff08;但是这一题是wp都看不懂&#xff0c;只能表达一下我的理解了&#xff09; &#xff08;最后有简单方法&#xff0c;前面一种没看懂没关系&#xff09; 下面这一部分是首页的有用部分 访问/source_code,得到源码&#xff1a; # -*-…

mysql之递归sql

mysql之递归sql 递归sql在一些公司是不允许使用的&#xff0c;会涉及数据库压力&#xff0c;所以会在代码里递归查询&#xff0c;但有些公司开发流程没有规定&#xff0c;且数据库数据量不大&#xff0c;之前写过好几遍了&#xff0c;老是记不住&#xff0c;记录一下 通过父级…

LiveGBS流媒体平台GB/T28181用户手册-版本信息:查看机器码、切换查看流媒体服务

LiveGBS流媒体平台GB/T28181用户手册--版本信息:查看机器码、切换查看流媒体服务 1、版本信息1.1、查看机器码1.2、多个流媒体服务1.3、提交激活 2、搭建GB28181视频直播平台 1、版本信息 版本信息页面&#xff0c;可以查看到信令服务 流媒体服务相关信息&#xff0c;包含硬件…

MySQL--存储引擎

一、存储引擎介绍 1.介绍 存储引擎相当于Linux的文件系统&#xff0c;以插件的模式存在&#xff0c;是作用在表的一种属性 2.MySQL中的存储引擎类型 InnoDB、MyISAM、CSV、Memory 3.InnoDB核心特性的介绍 聚簇索引、事务、MVCC多版本并发控制、行级锁、外键、AHI、主从复制特…

网络安全等级保护:正确配置 Linux

正确配置 Linux 对Linux安全性的深入审查确实是一项漫长的任务。原因之一是Linux设置的多样性。用户可以使用Debian、Red Hat、Ubuntu或其他Linux发行版。有些可能通过shell工作&#xff0c;而另一些则通过某些图形用户界面&#xff08;例如 KDE 或 GNOME&#xff09;工作&…

零基础学Java第二十三天之网络编程Ⅱ

1. InetAddress类 用来表示主机的信息 练习&#xff1a; C:\Windows\system32\drivers\etc\ hosts 一个主机可以放多个个人网站 www.baidu.com/14.215.177.37 www.baidu.com/14.215.177.38 www.taobao.com/183.61.241.252 www.taobao.com/121.14.89.253 2. Socket 3.…