首页/数据/NoSQL 速查/_cat/recovery 查看分片恢复进度
Elasticsearch89 条

_cat/recovery 查看分片恢复进度

分片恢复(副本初始化、节点回归后的数据补齐)是磁盘与网络密集型操作;_cat/recovery 显示每个分片恢复的阶段、字节进度与耗时。

NoSQL 速查数据更新于 2026-10-13

分片恢复是什么

分片恢复指把一份分片数据复制到另一个节点:副本首次分配、节点重启后数据补齐、快照恢复后重新分配都会触发,属于磁盘与网络密集型操作。恢复期间该分片仍可搜索,但集群整体 IO 与带宽会被分走,_cat/recovery 就是观察这一过程的窗口。

为什么恢复会拖慢集群

恢复要读源分片的段文件、经网络传到目标节点并写入磁盘,单节点上并发恢复数过多时这些操作会互相争抢 IO,表现就是集群整体响应变慢。控制手段有两个:每节点并发恢复数(cluster.routing.allocation.node_concurrent_recoveries)与恢复带宽上限(indices.recovery.max_bytes_per_sec),两者都是集群级动态设置,调大前先确认宿主机磁盘还有余量。

基本信息

接口GET /_cat/recovery?v 或 /_cat/recovery/<index>?v
常用列stage、source/target、files、bytes_recovered、bytes_percent、time
参数active_only=true 只看进行中的恢复;h= 指定列
相关设置indices.recovery.max_bytes_per_sec、node_concurrent_recoveries
适用版本Elasticsearch 5.x 起接口与列名稳定

示例

示例
# 只看进行中的恢复
GET /_cat/recovery?v&active_only=true

# 指定列,便于脚本采集
GET /_cat/recovery/logs-2024.01?v&h=index,shard,stage,files_percent,bytes_percent,time

# 临时限制恢复带宽,避免把磁盘 IO 打满
PUT /_cluster/settings
{ "persistent": { "indices.recovery.max_bytes_per_sec": "80mb" } }

# 恢复结束后确认分片状态
GET /_cat/shards?v&s=state

典型使用场景

  • 扩容后确认新节点上的分片是否在正常恢复
  • 节点重启回归:判断数据补齐还要多久,能否进入维护窗口
  • 快照恢复后跟踪分片分配与恢复进度
  • 集群变慢时确认是否有大量恢复在抢占磁盘与带宽
  • 采集恢复耗时数据,作为恢复目标与容量规划的依据

输出逐列读法

列含义正常与异常
stage恢复阶段依次经过 index、translog、finalize,长期停在某一步要排查
source / target源节点与目标节点正常情况下两者不会是同一节点
files_percent文件数完成百分比文件多而数据小,涨得快,容易高估进度
bytes_recovered已恢复字节数结合 bytes_percent 看真实进度
bytes_percent字节完成百分比长时间不动说明卡住或带宽被挤占
time已耗时与数据量一起看,判断是否需要限速
恢复速度上限由 indices.recovery.max_bytes_per_sec 控制,宿主机磁盘 IO 已经吃紧时不宜再调大,否则恢复与在线查询会互相拖慢。
两个百分比列要一起看:files_percent 先涨、bytes_percent 后涨是正常现象,只盯文件数会严重高估恢复进度。

易错点

  • 只看 time 判断恢复是否卡住会误判,要结合两个百分比的增长速度与阶段变化
  • 恢复卡在某个阶段不动时先排查目标节点的磁盘空间、IO 与网络,而不是直接重启节点
  • 大量分片同时恢复会把带宽摊薄,扩容时建议按批次滚动加入节点
  • 调大恢复带宽或并发数前先确认宿主机 IO 余量,否则会拖垮正在服务的查询

数据来源与参考

  • Elasticsearch Guide: cat recovery API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌