# PD的在TiDB集群中的角色

![`smart`](PDArchitecture_aa_002_20220509.png)

------------------------------------------------------------------------------
PD 是 TiDB 集群的中控，被称为整个集群的“大脑”。

在TiDB集群中，它负责存储元数据（主要提供TiDB服务器的路由等）；分配全局ID、事务ID和全局时间戳；生成TSO；发现服务；收集集群拓扑、实时数据分布和热点度量等信息。此外，它还负责在TiKV节点中调度数据。

PD本身由至少3个节点组成，并且PD通过集成etcd实现自动故障转移，因此不必担心单点故障。同时，PD也通过etcd的Raft确保强一致性，因此不必担心数据丢失。在生产环境中，建议部署奇数个PD节点。

最后，在PD集群中，一个具有Leader角色的节点向外部提供无状态服务。即使PD节点挂掉，在PD选举机制的帮助下，新选出的PD Leader可以立即服务于外部，而无需考虑任何中间状态。

我们需要首先为进一步研究定义以下术语：

PD中的Store指的是集群中的存储节点，即TiKV实例。注意Store和TiKV实例是严格一对一的；即使在同一个主机上部署了多个TiKV实例，或者甚至在同一块磁盘上，这些实例也将对应不同的Store实例。

每个区域负责维护集群数据的连续段（默认配置下平均约为96 MB），每个副本存储多份不同存储的副本（默认配置为3份），每个副本称为对等点。同一区域的多个对等点通过Raft协议同步数据，因此对等点也用来指Raft实例中的成员。TiKV使用多Raft模型来管理数据，即每个区域对应一个独立运行的Raft实例。我们也称这样的Raft实例为Raft组。

领导者、追随者和学习者：它们分别对应于三个对等角色。其中，领导者负责响应客户端的读写请求；追随者被动地从领导者同步数据，并在领导者失败时选举新的领导者。

而且，Learner是一个特殊的角色，只参与同步Raft日志，不参与投票。

分区：TiKV 集群中的 Region 一开始不是分割出来的，随着数据的写入会逐渐产生更多的 Region。这个分割过程称为分区。其机制是，当集群初始化时，会构建一个初始 Region 来覆盖整个键空间，然后在运行过程中，每当 Region 数据达到一定数量时，就会通过分割产生一个新的 Region。

`Pending`和`Down`是两种特殊的可能的Peer状态。
- `Pending`表明Follower或Learner和Leader之间Raft Log中存在较大差距。而且，处于`Pending`状态的Follower不能被选为Leader。
- `Down`指的是领导者长时间未收到相应的对等消息，通常表明相应的节点已经崩溃或被隔离于网络之外。

此外，TiDB 仪表盘服务默认在 PD 节点上提供。