跳到主要内容
版本:1.1

Region Balancer

Region Balancer 是 Autopilot 的一个调度策略,用于自动平衡 Datanode 之间的 Region 写入负载。当某些 Datanode 持续处于高负载状态时,Region Balancer 会选择合适的 Region,并提交 Region Migration 操作,将 Region 迁移到负载较低的 Datanode。

Region Balancer 运行在 Metasrv 中,并依赖 Autopilot 共享的运行时和集群统计信息。关于 Autopilot 的整体说明,请参考 Autopilot。

什么时候使用 Region Balancer​

Region Balancer 适合以下场景:

  • 部分 Datanode 的写入负载长期高于其他 Datanode;
  • 希望减少手动分析热点节点和手动执行 Region Migration 的运维成本。

限制​

Region Balancer 要求可调度的 Region 数量大于活跃 Datanode 数量。如果 Region 数量不多于活跃 Datanode 数量,即使迁移 Region,也无法让 Datanode 之间的负载变得均衡。

配置​

Region Balancer 依赖 Autopilot 运行时和集群统计信息。下面的示例同时包含共享配置和 Region Balancer 配置:

[[plugins]]
[plugins.autopilot]
tick_interval = "45s"

[[plugins]]
[plugins.cluster_stat]
sampling_window = "45s"
max_history_windows = 5
ewma_alpha = 0.2

[[plugins]]
[plugins.region_balancer]
acceptable_load_ratio = 0.12
min_load_threshold = "4MB"
region_migration_cooldown_period = "1h"
window_stability_threshold = 2

其中:

  • plugins.autopilot 控制 Autopilot 的调度周期;
  • plugins.cluster_stat 控制 Datanode 和 Region 写入统计信息的采样与平滑;
  • plugins.region_balancer 控制 Region Balancer 的触发条件、冷却时间和迁移数量。

共享配置项的详细说明请参考 Autopilot 配置。

核心配置项​

配置项默认值说明
acceptable_load_ratio0.12Datanode 写负载超过平均负载的比例阈值。例如默认值 0.12 表示当某个 Datanode 的写负载超过平均负载 12% 以上时,可能被视为高负载 Datanode。
min_load_threshold"4MB"触发平衡的最小 Datanode 写负载。该配置表示写入速率,单位为 bytes/s;配置值使用 bytes 表示,例如 "4MB" 表示 4MB/s。低于该阈值时,即使负载不均衡,也不会触发迁移,避免低流量场景下频繁调度。
region_migration_cooldown_period"1h"Region 迁移后的冷却时间。在冷却时间内,同一个 Region 不会再次被迁移,避免频繁迁移。
window_stability_threshold2连续多少个历史统计窗口都满足高负载条件后,才会触发迁移。较大的值可以减少短期波动造成的误触发。

高级配置项​

以下配置通常不需要调整,建议仅在明确了解负载特征和调度行为后修改。

配置项默认值说明
region_min_load_threshold"10KB"可迁移 Region 的最小写负载。该配置表示写入速率,单位为 bytes/s;配置值使用 bytes 表示,例如 "10KB" 表示 10KB/s。低于该阈值的 Region 不会作为迁移候选。
scorer_var_bound0.5评分器的负载边界,用于计算迁移候选的收益。该值必须大于 acceptable_load_ratio。
min_samples3判断 Region 写入稳定性所需的最少历史样本数。
max_region_history_cv0.2Region 写入历史的最大变异系数。超过该值的 Region 会被视为写入不稳定。
datanode_max_unstable_or_unknown_count_ratio0.5Datanode 上写入不稳定或未知的 Region 数量的最大比例。超过该比例的 Datanode 不会参与调度。
datanode_max_unstable_or_unknown_load_ratio0.5Datanode 上写入不稳定或未知的 Region 负载的最大比例。超过该比例的 Datanode 不会参与调度。
max_actions_per_tick2每个调度周期最多提交的迁移动作数。
max_actions_per_source_datanode2每个源 Datanode 在一个调度周期内最多迁出的 Region 数。
max_actions_per_target_datanode1每个目标 Datanode 在一个调度周期内最多迁入的 Region 数。

兼容旧配置​

旧版本中,Region Balancer 支持直接在 plugins.region_balancer 中配置以下参数:

  • tick_interval
  • window_size
  • ewma_alpha

这些配置仍然兼容,但不建议在新配置中继续使用。新配置建议使用:

  • plugins.autopilot.tick_interval 配置 Autopilot 调度周期;
  • plugins.cluster_stat.sampling_window 配置统计窗口;
  • plugins.cluster_stat.ewma_alpha 配置 EWMA 平滑系数。