PD的架构与功能

简介:

pd集成了etcd,支持自动故障转移,不用担心单点故障。也通过etcd的raft保证了数据强一致性,不用担心数据丢失。一般3个节点,有个leader。

大体功能:

1.元数据的存储,执行计划、执行语句知道去哪个region找数据需要通过元数据。

2.全局时钟。

3.某些tikv的region过多,产生热点,pd把部分调度到其他tikv。

名词:

store  一个个的tikv节点、实例。

peer  每个region副本都叫peer。

主要功能

1.整个集群tikv的元数据存储

2.分配全局id和事务id

3.生成全局时间戳TSO

4.收集集群信息进行调度

5.提供label,支持高可用

6.提供tidb dashboard

1.整个集群tikv的元数据存储

region的leader在哪个tikv节点上,全局上只有pd知道

region cache

多次重复访问某个key,pd就会把元数据放到tikv client中的region cache中,减少网络消耗。

back off

back off的本质就是region cache的信息过旧。

存着的region leader换了,不再是leader了,会返回信息告诉我,现在leader是在哪个节点上。region分裂,也会造成back off。也可能重新去pd找新的元数据存到region cache里。

2.分配全局id和事务id

table id,index id,事务id,pd统一分配

3.生成全局时间戳TSO

查询时间、事务开始时间、事务结束时间 由pd分发。

tso是int64的整形数

1ms分成262144个tso

tso的分配:过程

1.tso请求者(事务、sql)发出请求给pd client(tidb server的模块)

2.pd client立即返回tsFuture(标识了什么时候请求的)给tso请求者,请求者继续解析、编译、生成执行计划、准备执行

3.pd client通过网络,发送请求给pd的leader

4.tso请求者等待tso

5.pd分配tso给到pd client

6.pd client把tso给请求者

或者:

4.pd分配tso给到pd client

5.pd client试探tso请求者有没有完成解析编译,试探多次

6.解析编译完成,开始wait了,pd client把tso给到请求者

tso请求量大,pd client批处理,限定时间段。

pd的tso申请会持久化到本地,所以申请越多,pd io压力越大。

tso的分配:时间窗口

阶段性申请tso

在缓存中,记录了700—703中3秒内的全部申请tso,不同tidb server先到先得抢tso

在存储中,记录703

这样磁盘io就变成3秒一次。

tso的分配:高可用

流程:

正常pd leader 700-703 703-706,在704的时候pd leader宕了,缓存中的全没了(703-706),选举出了新的leader,新leader并不知道是到哪了,但是他知道是703-706中,所以直接整段不要了,重新从706-709再来,满足了高可用,但是满足不了连贯性。

4.收集集群信息进行调度

收集region在tikv信息,某个tikv上region过多,会将region调度到其他节点上去,缓解热点。

调度:信息收集

pd知道全局的region的分布,2个心跳,心跳定期自己上报信息给pd

store heartbeat

tikv节点的心跳,当前容量、剩余空间、读写流量等等,可以得出哪个tikv节点忙。

region heartbeat

region的心跳,副本分布、副本状态、数据量、读写流量等等,可以得出哪些region比较繁忙。

从2个心跳可得知region分布是否均匀。

调度:生成调度

根据收集来的信息,进行关注点的分析,生成operator(生成调度,对症下药)

关注点

-balance

    -leader

    -region

-hot region

-集群拓扑

-缩容

-故障恢复

-region merge

调度:执行调度

pd将operator发送给region,region再进行相应的动作。

5.提供label,支持高可用

通过打标签的方式实现更合理的高可用。

3中心,6机柜,12主机

region  3个节点坏2个则不能用了。

可以为每个tikv实例打个标签,知道在哪个中心、哪个机柜、哪个主机,以及可控放置tikv。。

label的配置

打标签需要在tikv和pd上都进行设置。

解释:

zone   中心

rack    机柜

host    服务器

tikv设置:

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

1中心2机柜3服务器

pd设置:

location-labels=["zone","rack","host"]            --隔离级别,可以自己增减

[replication]

isolation-level="zone"                                         --必须在zone层隔离(同层没有peer即可)

6.提供tidb dashboard

监控

  • 44
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪灵骅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值