📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

cluster.routing.allocation.node_concurrent_outgoing_recoveries 配置项控制每个节点上允许同时进行的出站分片恢复操作的最大数量。出站恢复是指节点作为源节点,向其他节点发送分片数据的过程。

配置项类型 #

该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。

默认值 #

2(继承自 cluster.routing.allocation.node_concurrent_recoveries)

是否必需 #

可选配置项(有默认值)

取值范围 #

0 ~ 正整数

配置格式 #

# 默认配置(继承 node_concurrent_recoveries)
# 不需要显式设置

# 覆盖默认值,增加出站恢复数量
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 6

# 限制出站恢复
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 1

# 平衡入站和出站
cluster.routing.allocation.node_concurrent_incoming_recoveries: 2
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 6

相关配置项 #

配置项默认值说明
cluster.routing.allocation.node_concurrent_recoveries2总体并发恢复数量
cluster.routing.allocation.node_concurrent_incoming_recoveries2入站恢复数量
cluster.routing.allocation.node_concurrent_outgoing_recoveries2出站恢复数量

工作原理 #

出站恢复并发控制机制:

┌─────────────────────────────────────────────────────────────────┐
│                    出站恢复并发控制                              │
└─────────────────────────────────────────────────────────────────┘

需要从此节点发送分片数据
    │
    ▼
检查当前出站恢复数量
    │
    ├── 当前数量 < node_concurrent_outgoing_recoveries
    │   │
    │   └── 检查目标节点入站恢复限制
    │       │
    │       ├── 目标节点未达上限
    │       │   │
    │       │   └── 开始发送数据
    │       │
    │       └── 目标节点已达上限
    │           │
    │           └── 节流,等待目标节点可用
    │
    └── 当前数量 >= node_concurrent_outgoing_recoveries
        │
        └── 节流,拒绝新的出站恢复

出站恢复场景 #

1. 副本分片创建 #

主分片节点向副本节点发送数据:

主分片节点(出站恢复) ──────────────────> 副本分片节点

2. 分片迁移 #

分片从此节点迁移到其他节点:

源节点(出站恢复) ──────────────────────> 目标节点

3. 节点下线 #

节点下线前,分片迁移到其他节点:

下线节点(出站恢复) ───────────────────> 接收节点

使用场景 #

1. 默认配置(推荐) #

# 使用继承的默认值
cluster.routing.allocation.node_concurrent_recoveries: 2

大多数场景下不需要单独配置。

2. 增加发送能力 #

cluster.routing.allocation.node_concurrent_incoming_recoveries: 2
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 8

适用场景:

  • 数据源节点
  • 高磁盘读取性能
  • 高网络上传带宽
  • 数据迁移源节点

3. 限制出站流量 #

cluster.routing.allocation.node_concurrent_outgoing_recoveries: 1

适用场景:

  • 保护生产服务性能
  • 网络上行带宽有限
  • 磁盘读取性能较低
  • 避免影响查询响应

4. 节点下线前加速 #

# 节点下线前临时增加出站恢复
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 10

推荐设置建议 #

节点角色入站值出站值说明
通用节点22平衡配置
数据源节点26-8优化数据分发
数据接收节点6-82优化数据同步
只读节点0-16-8主要提供数据
写入密集节点4-61-2优先处理写入

监控建议 #

# 查看当前配置
GET /_cluster/settings?filter_path=*.cluster.routing.allocation.node_concurrent_outgoing_recoveries

# 查看正在进行的出站恢复
GET /_cat/recovery?v&h=i,s,t,bytes,bytes_percent

# 查看节点作为源的恢复
GET /_cat/recovery?v&h=i,s,t,bytes&source_node=*node-1*

# 查看节点网络使用情况
GET /_nodes/stats/transport

故障排查 #

出站恢复被节流 #

# 检查出站恢复限制
GET /_cluster/settings

# 临时增加出站恢复限制
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": 6
  }
}

数据迁移慢 #

  1. 检查网络上行带宽
  2. 检查磁盘读取性能
  3. 考虑增加出站恢复数量
  4. 检查目标节点的入站恢复限制

影响查询性能 #

出站恢复会消耗磁盘读取 I/O:

  • 临时降低出站恢复数量
  • 在低峰期进行数据迁移
  • 考虑使用专用的数据迁移节点

节点下线最佳实践 #

# 1. 排空节点
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "node-to-remove"
  }
}

# 2. 增加出站恢复限制加速迁移
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": 10
  }
}

# 3. 监控迁移进度
GET /_cat/recovery?v

# 4. 迁移完成后恢复默认值
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": null
  }
}

注意事项 #

  1. 动态更新:此配置为动态配置,可在线修改
  2. 继承机制:如果未显式设置,继承 node_concurrent_recoveries 的值
  3. 双向控制:恢复受入站节点和出站节点双方限制
  4. 资源消耗:出站恢复会消耗磁盘读取 I/O 和网络上行带宽
  5. 生产影响:过高的出站恢复可能影响查询性能
  6. 临时调整:可在数据迁移时临时调高,完成后恢复