存储集群全局元信息:PD 保存了 TiKV 集群的整体拓扑结构、每个 TiKV 节点的状态、以及数据在各个节点上的分布情况(即 Region 分布)等关键元数据。 维护 Region 信息:Region 是 TiKV 中数据的最小分布单位,PD 负责记录每个 Region 的键值范围、副本位置、Leader 信息等,并动态调解 Region 分布以实现数据平衡。
1.2 调度决策
数据平衡:PD 根据预设的战略(如 Region 大小、副本数、地域分布等)定期进行数据平衡操作,通过迁移 Region 的副本来避免数据热点、保证资源利用率,并确保在节点故障时有足够的副本可用。 故障恢复:当 TiKV 节点发生故障或网络隔离时,PD 负责检测并触发故障转移流程,重新推举 Leader,确保数据的高可用性。 Region Split/Merge:根据数据增长和查询需求,PD 自动触发 Region 的分裂(Split)和合并(Merge)操作,以维持合理的 Region 大小,优化查询性能。
1.3 全局服务
全局唯一时间戳(Timestamp Oracle, TSO):PD 提供全局单调递增的时间戳服务,用于协调分布式事务中的时间顺序,确保事务的 ACID 特性。 全局唯一 ID 分配:PD 分配全局唯一的 Region ID、Table ID、Index ID 等,确保在整个集群内标识符的唯一性。
1.4 集群设置与管理
TiKV Store 的状态具体分为 Up,Disconnect,Offline,Down,Tombstone。各状态的关系如下:
Up:表示当前的 TiKV Store 处于提供服务的状态。
Disconnect:当 PD 和 TiKV Store 的心跳信息丢失超过 20 秒后,该 Store 的状态会变为 Disconnect 状态,其时间超过 max-store-down-time 指定的时间后,该 Store 会变为 Down 状态。
Down:表示该 TiKV Store 与集群失去毗连的时间已经超过了 max-store-down-time 指定的时间,默认 30 分钟。超过该时间后,对应的 Store 会变为 Down,而且开始在存活的 Store 上补足各个 Region 的副本。
Offline:当对某个 TiKV Store 通过 PD Control 进行手动下线操作,该 Store 会变为 Offline 状态。该状态只是 Store 下线的中心状态,处于该状态的 Store 会将其上的全部 Region 搬离至其它满足搬迁条件的 Up 状态 Store。当该 Store 的 leader_count 和 region_count (在 PD Control 中获取) 均表现为 0 后,该 Store 会由 Offline 状态变为 Tombstone 状态。在 Offline 状态下,克制关闭该 Store 服务以及其所在的物理服务器。下线过程中,如果集群里不存在满足搬迁条件的其它目标 Store(比方没有足够的 Store 能够继续满足集群的副本数目要求),该 Store 将一直处于 Offline 状态。
Tombstone:表示该 TiKV Store 已处于完全下线状态,可以利用 remove-tombstone 接口安全地清算该状态的 TiKV。
每个 Raft Group 的 Leader 会定期向 PD 汇报 Region 状态。每个 Raft Group 的 Leader 和 PD 之间存在心跳包,用户汇报 Region 状态,主要包括以下信息:
Leader的位置
Follwers的位置
掉线副本个数
数据写入读取速率
PD 不停的通过这两类心跳消息网络整个集群的信息,再以这些信息作为决策的依据。
除此之外,PD 还可以通过扩展的接口担当额外的信息,用来做更准确的决策。比如当某个 Store 的心跳包制止的时间,PD 并不能判断这个节点是临时失效照旧永久失效,只能经过一段时间的等候(默认是 30 分钟),如果一直没故意跳包,就以为该 Store 已经下线,再决定须要将这个 Store 上面的 Region 都调度走。
三、TiDB server 管理
PD 怎样管理和监控 TiDB Server,一下是主要内容:
元数据管理:PD 维护整个 TiDB 集群的元数据信息,包括 TiDB Server 节点的列表、状态、设置等。这些信息用于确保 PD 能够准确地知道哪些 TiDB Server 正在运行,以及它们的网络地址、角色(如平常 TiDB Server、TiFlash 服务等)等属性。
调度决策:PD 根据网络到的集群状态信息进行智能调度,如负载平衡、故障转移等。如果发现某个 TiDB Server 负载过高或出现故障,PD 会触发相应的调度战略,如将部分 SQL 查询重定向到其他负载较低的 TiDB Server,或者在故障恢复后重新分配 Region 到恢复的节点上。
设置推送:PD 可以向 TiDB Server 推送全局或局部的设置变更,如系统参数调解、新功能开关等。TiDB Server 会定期从 PD 获取并应用这些设置更新,确保整个集群的设置一致性。
心跳检测与康健查抄:TiDB Server 定期向 PD 发送心跳信息,报告自己的存活状态和负载情况。PD 通过接收和剖析这些心跳消息来监控 TiDB Server 的康健状态。如果某个 TiDB Server 在一段时间内未发送心跳,PD 会以为该节点可能存在题目,并采取相应步伐(如标记为下线、重新调度其负责的负载等)。
全局事务协调:PD 分配全局唯一且递增的事务ID给 TiDB Server,用于协调分布式事务。TiDB Server 在发起事务时须要从 PD 获取 事务ID,确保事务的全局唯一性和时间顺序。