diff --git a/best-practices/pd-scheduling-best-practices.md b/best-practices/pd-scheduling-best-practices.md index 2b9681d151c0..26dbcd3c1265 100644 --- a/best-practices/pd-scheduling-best-practices.md +++ b/best-practices/pd-scheduling-best-practices.md @@ -297,7 +297,9 @@ Region Merge 速度慢也很有可能是受到 limit 配置的限制(`merge-sc 实践中,如果能确定这个节点的故障是不可恢复的,可以立即做下线处理,这样 PD 能尽快补齐副本,降低数据丢失的风险。与之相对,如果确定这个节点是能恢复的,但可能半小时之内来不及,则可以把 `max-store-down-time` 临时调整为比较大的值,这样能避免超时之后产生不必要的副本补充,造成资源浪费。 -自 v5.2.0 起,TiKV 引入了慢节点检测机制。通过对 TiKV 中的请求进行采样,计算出一个范围在 1~100 的分数。当分数大于等于 80 时,该 TiKV 节点会被设置为 slow 状态。可以通过添加 [`evict-slow-store-scheduler`](/pd-control.md#scheduler-show--add--remove--pause--resume--config--describe) 来针对慢节点进行对应的检测和调度。当检测到有且只有一个 TiKV 节点为慢节点,并且该 TiKV 的 slow score 到达限定值(默认 80)时,将节点上的 Leader 驱逐(其作用类似于 `evict-leader-scheduler`)。 +自 v5.2.0 起,TiKV 引入了磁盘的慢节点检测机制。通过对 TiKV 中的请求进行采样,计算出一个范围在 1~100 的分数。当分数大于等于 80 时,该 TiKV 节点会被设置为 slow 状态。可以通过添加 [`evict-slow-store-scheduler`](/pd-control.md#scheduler-show--add--remove--pause--resume--config--describe) 来针对慢节点进行对应的调度。当检测到有且只有一个 TiKV 节点为慢节点,并且该 TiKV 的 slow score 到达限定值(默认 80)时,将节点上的 Leader 驱逐(其作用类似于 `evict-leader-scheduler`)。 + +自 v8.5.5 和 v9.0.0 起,TiKV 引入了网络的慢节点检测机制。与磁盘慢节点检测类似,该机制通过在 TiKV 节点之间进行网络延时探测并计算分数,来判断节点的网络是否出现异常。可以通过 [`enable-network-slow-store`](/pd-control.md#scheduler-config-evict-slow-store-scheduler) 来开启该机制。 > **注意:** > diff --git a/pd-control.md b/pd-control.md index a87acc586f1e..4823f1235436 100644 --- a/pd-control.md +++ b/pd-control.md @@ -1158,7 +1158,7 @@ pd-ctl resource-manager config controller set ltb-max-wait-duration 30m >> scheduler config evict-leader-scheduler // v4.0.0 起,展示该调度器具体在哪些 store 上 >> scheduler config evict-leader-scheduler add-store 2 // 为 store 2 添加 leader 驱逐调度 >> scheduler config evict-leader-scheduler delete-store 2 // 为 store 2 移除 leader 驱逐调度 ->> scheduler add evict-slow-store-scheduler // 当有且仅有一个 slow store 时将该 store 上的所有 Region 的 leader 驱逐出去 +>> scheduler add evict-slow-store-scheduler // 自动检测磁盘或网络慢节点,并在满足条件时将该 store 上的所有 Region leader 驱逐出去 >> scheduler remove grant-leader-scheduler-1 // 把对应的调度器删掉,`-1` 对应 store ID >> scheduler pause balance-region-scheduler 10 // 暂停运行 balance-region 调度器 10 秒 >> scheduler pause all 10 // 暂停运行所有的调度器 10 秒 @@ -1182,6 +1182,44 @@ pd-ctl resource-manager config controller set ltb-max-wait-duration 30m - `pending`:表示当前调度器无法产生调度。`pending` 状态的调度器,会返回一个概览信息,来帮助用户诊断。概览信息包含了 store 的一些状态信息,解释了它们为什么不能被选中进行调度。 - `normal`:表示当前调度器无需进行调度。 +### `scheduler config evict-slow-store-scheduler` + +`evict-slow-store-scheduler` 用于在 TiKV 节点出现磁盘 I/O 或网络抖动时,限制 PD 向异常节点调度 Leader,并在必要时主动驱逐 Leader,以降低慢节点对集群的影响。 + +#### 磁盘慢节点 + +从 v6.2.0 开始,TiKV 会在 store 心跳中向 PD 上报 `SlowScore`,该分值基于磁盘 I/O 情况计算得出。分值范围为 1~100,数值越大表示该节点越可能存在磁盘性能异常。 + +对于磁盘慢节点,TiKV 侧的探测以及 PD 侧基于 `evict-slow-store-scheduler` 的调度处理默认开启,无需额外配置。 + +#### 网络慢节点 + +从 v8.5.5 和 v9.0.0 起,TiKV 支持在 store 心跳中上报 `NetworkSlowScore`,该分值基于网络探测结果计算得出,用于识别网络抖动导致的慢节点。分值范围为 1~100,数值越大表示网络异常的可能性越高。 + +出于兼容性和资源消耗的考虑,网络慢节点的探测与调度默认关闭。如需启用,你需要同时完成以下配置: + +1. 在 PD 侧开启调度器对网络慢节点的处理: + + ```bash + scheduler config evict-slow-store-scheduler set enable-network-slow-store true + ``` + +2. 在 TiKV 侧将 [`raftstore.inspect-network-interval`](/tikv-configuration-file.md#inspect-network-interval) 配置项设置为大于 `0` 的值,以启用网络探测。 + +#### 恢复时间控制 + +你可以通过 `recovery-duration` 参数控制慢节点在被判定为恢复正常前需要保持稳定状态的时间。 + +示例如下: + +```bash +>> scheduler config evict-slow-store-scheduler +{ + "recovery-duration": "1800" // 30 分钟 +} +>> scheduler config evict-slow-store-scheduler set recovery-duration 600 +``` + ### `scheduler config balance-leader-scheduler` 用于查看和控制 `balance-leader-scheduler` 策略。 diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index 21882da94e5b..289f9d6a2fe7 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -283,6 +283,13 @@ TiKV 配置文件比命令行参数支持更多的选项。你可以在 [etc/con + 设置服务与转发请求的连接池大小。设置过小会影响请求的延迟和负载均衡。 + 默认值:4 +### `inspect-network-interval` 从 v8.5.5 和 v9.0.0 版本开始引入 + ++ 控制 TiKV HealthChecker 主动向 PD 以及其他 TiKV 节点发起网络探测的周期,用于计算 `NetworkSlowScore` 并向 PD 上报慢节点的网络状态。 ++ 设置为 `0` 表示关闭网络探测。数值越小,探测频率越高,有助于更快发现网络抖动,但也会消耗更多网络与 CPU 资源。 ++ 默认值:100ms ++ 取值范围:0 或 `[10ms, +∞)` + ## readpool.unified 统一处理读请求的线程池相关的配置项。该线程池自 4.0 版本起取代原有的 storage 和 coprocessor 线程池。