简介:
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
监控