# 调度: 生成调度

__*生成调度*__

+ Balance
  + leader
  + region
+ Hot region
+ 集群拓扑
+ 缩容
+ 故障恢复
+ Region merge
-------------------------------------------------------------
不同的调度器从自身的逻辑和需求出发,考虑各种限制和约束后生成待执行的 Operator。先让我们来解释一下什么是 Operator,Operator 是应用于一个 Region 的,服务于某个调度目的一系列操作的集合。例如"将 Region 2 的 Leader 迁移至 Store 5","将 Region 2 的副本迁移到 Store 1, 4, 5" 等。
Operator 可以是由 PD 通过计算生成的,也可以是由外部 API 手动创建的。

比较有代表性的调度有:

1. Balance
将 Region 均匀地分散在集群中的所有 Store 上。可以分为 2 种:
  1. leader关注 Region 的 Leader,可以认为目的是分散处理客户端请求的压力。
  2. region关注 Region 的各个 Peer,目的是分散存储的压力,同时避免出现磁盘满。

2. Hot region
对于写热点,热点调度会同时尝试打散热点 Region 的 Peer 和 Leader；对于读热点,由于只有 Leader 承载读压力,热点调度会尝试将热点 Region 的 Leader 打散。详细内容请参考后面章节。

3. 集群拓扑
让 PD 感知不同节点分布的拓扑是为了通过调度使不同 Region 的各个副本尽可能分散,保证高可用和容灾。例如集群有 3 个数据中心,最安全的调度方式就是把 Region 的 3 个 Peer 分别放置在不同的数据中心,这样任意一个数据中心故障时,都能继续提供服务。

4. 缩容
缩容是指预备将某个 Store 下线,通过命令将该 Store 标记为 Offline 状态,此时 PD 通过调度将待下线节点上的 Region 迁移至其他节点。

5. 故障恢复
故障恢复是指当有 Store 发生故障且无法恢复时,有 Peer 分布在对应 Store 上的 Region 会产生缺少副本的状况,此时 PD 需要在其他节点上为这些 Region 补副本。

6. Region merge
Region merge 指的是为了避免删除数据后大量小 Region 甚至空 Region 消耗系统资源,通过调度把相邻的小 Region 合并的过程。