灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • 高性能KV

  • TiDB

  • Elasticsearch

    • Elasticsearch 运维知识地图:从安装配置到排障加速恢复
    • Elasticsearch 集群安装:RPM 裸机生产部署 vs docker-compose 快速起集群
    • 给Elasticsearch集群添加用户密码
    • Elasticsearch 分片和副本:容量怎么规划,改分片数为什么这么麻烦
    • Elasticsearch集群节点磁盘使用分配不均解决办法
    • Elasticsearch 索引模板与映射:Composable 模板、mapping 与动态模板
    • Elasticsearch 分页查询三种方案:from/size、search_after、scroll 怎么选
    • Elasticsearch字符串搜索方式
    • Elasticsearch使用wildcard字段模糊匹配
    • Elasticsearch 数据迁移方案对比:esm vs Logstash
    • Nginx Mirror 模块实现三套ES写入网关
    • ES排障两件套:慢查询日志阈值配置 + tcpdump 抓包看真实请求
    • ES 集群恢复太慢?三个参数加速节点/分片恢复
      • 1. 为什么恢复会慢
      • 2. node_concurrent_recoveries:单节点并发恢复的分片数
      • 3. cluster_concurrent_rebalance:集群级并发再均衡分片数
      • 4. indices.recovery.max_bytes_per_sec:单次恢复的限速带宽
      • 5. peer recovery vs translog recovery
      • 5. 验证
      • 6. 坑
      • 7. 可复用要点
    • Elasticsearch 常用 DSL 语句(速查表)
    • ES 集群 Yellow 复盘:1023 个副本永远分配不出去,问题不在磁盘
  • 数据管道

  • 其他数据库

  • 数据库
  • Elasticsearch
灯下哥谭
2024-03-30
目录

ES 集群恢复太慢?三个参数加速节点/分片恢复

# 1. 为什么恢复会慢

节点重启、新节点加入、副本重新分配这些场景下,ES 需要把分片数据从一个节点搬到另一个节点(recovery)。默认配置是偏保守的——ES 假设你的集群网络/磁盘 I/O 资源紧张,宁可恢复慢一点也不要抢占正常读写请求的资源。但如果你的集群硬件本身有富余(比如内网万兆网络、SSD),保守的默认值反而会让一次节点重启后的恢复过程拖上几个小时,期间集群处于 yellow/red 状态,风险窗口被人为拉长。

版本说明

以下参数在 Elasticsearch 7.x/8.x 均有效,均为集群级 persistent 设置。

三个参数分别控制恢复过程的并发度和限速,需要配合调整才有效。

# 2. node_concurrent_recoveries:单节点并发恢复的分片数

默认值:2

PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "routing": {
        "allocation.node_concurrent_recoveries": 8
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10

控制每个节点同时能作为源或目标参与恢复的分片数量。调大它可以让一个节点同时并行搬运更多分片,但要注意:并发恢复的分片越多,该节点在恢复期间要分担的磁盘 I/O 和网络带宽也越多——调得过大反而会因为资源争抢导致每个分片恢复得更慢。

# 3. cluster_concurrent_rebalance:集群级并发再均衡分片数

默认值:2

PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "routing": {
        "allocation.cluster_concurrent_rebalance": 8
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10

控制整个集群同时进行 rebalance(数据在节点间重新分布,不同于故障恢复但机制类似)的分片数量上限。这个是全局限制,node_concurrent_recoveries 是单节点限制,两者需要一起放大才能让恢复真正提速。

# 4. indices.recovery.max_bytes_per_sec:单次恢复的限速带宽

默认值:40MB

PUT _cluster/settings
{
  "persistent": {
    "indices.recovery.max_bytes_per_sec": "500mb"
  }
}
1
2
3
4
5
6

限制恢复过程占用的带宽上限。如果集群网络是内网万兆且当前业务压力不大,可以放大到几百 MB/s 大幅缩短恢复时间;但这个值调得越大,恢复期间业务查询/写入争抢到的带宽就越少。

# 5. peer recovery vs translog recovery

类型 触发场景 可提速手段
Peer Recovery 副本分片恢复、新节点加入分片迁移 调大 node_concurrent_recoveries、max_bytes_per_sec
Translog Recovery 主分片重启、未刷盘的 translog 回放 主要受 index.translog.sync_interval 和刷盘策略影响,上述三参数影响较小

# 5. 验证

调整后,观察恢复进度和速度是否明显提升:

# 查看活跃恢复任务(关注 bytes_percent、translog_ops_percent)
GET _cat/recovery?v&active_only=true

# 关键字段说明:
# - source_node / target_node: 迁移的源和目标
# - bytes_percent: 已恢复字节百分比(peer recovery)
# - translog_ops_percent: translog 回放进度(translog recovery)
1
2
3
4
5
6
7

关注 bytes_percent(已恢复字节的百分比)随时间的增长速度,以及集群整体状态:

GET _cluster/health
1

status 从 red/yellow 变为 green 且 relocating_shards/initializing_shards 归零,说明恢复已完成。

# 6. 坑

  • 这三个参数是"加速旋钮"而非"免费午餐"——恢复期间集群会消耗更多 CPU/内存/磁盘 I/O/网络带宽,如果此时业务查询压力也很大,调得过猛可能导致恢复没结束、正常查询先超时了。建议在业务低峰期做这类临时调优,恢复完成后视情况改回默认值,而不是把加速参数当成永久配置。
  • 三个参数必须配合调整:只调 max_bytes_per_sec 不调并发数,或者只调并发数不放开带宽限速,实际提速效果都有限,因为总有一个维度会先成为瓶颈。
  • 物理网卡限速:max_bytes_per_sec 超过物理网卡带宽无意义,且可能挤占业务流量;建议预留 20-30% 带宽给正常查询。

# 7. 可复用要点

  1. ES 恢复慢的默认值是刻意保守的,硬件有富余时可以主动调优,而不是被动等待。
  2. 并发度(node/cluster 两级)和带宽限速要一起调,单独调一个容易被另一个卡住。
  3. 加速配置是临时手段,恢复完成后应视业务压力决定是否改回默认值,避免长期占用过多资源。
  4. 区分 peer recovery(可调参数加速)和 translog recovery(主要受刷盘策略影响)。
#性能优化#Elasticsearch
上次更新: 9/11/2026

← ES排障两件套:慢查询日志阈值配置 + tcpdump 抓包看真实请求 Elasticsearch 常用 DSL 语句(速查表)→

最近更新
01
DeepSeek Harness 实战 06|学习笔记:插件、工具、技能不在同一个维度上 原创
09-11
02
DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
09-09
03
DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
09-08
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式