配置项作用 #
cluster.routing.allocation.node_concurrent_incoming_recoveries 配置项控制每个节点上允许同时进行的入站分片恢复操作的最大数量。入站恢复是指节点作为目标节点,从其他节点接收分片数据的过程。
配置项类型 #
该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。
默认值 #
2(继承自 cluster.routing.allocation.node_concurrent_recoveries)
是否必需 #
可选配置项(有默认值)
取值范围 #
0 ~ 正整数
配置格式 #
# 默认配置(继承 node_concurrent_recoveries)
# 不需要显式设置
# 覆盖默认值,增加入站恢复数量
cluster.routing.allocation.node_concurrent_incoming_recoveries: 6
# 限制入站恢复
cluster.routing.allocation.node_concurrent_incoming_recoveries: 1
# 平衡入站和出站
cluster.routing.allocation.node_concurrent_incoming_recoveries: 4
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 2
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
cluster.routing.allocation.node_concurrent_recoveries | 2 | 总体并发恢复数量 |
cluster.routing.allocation.node_concurrent_incoming_recoveries | 2 | 入站恢复数量 |
cluster.routing.allocation.node_concurrent_outgoing_recoveries | 2 | 出站恢复数量 |
工作原理 #
入站恢复并发控制机制:
┌─────────────────────────────────────────────────────────────────┐
│ 入站恢复并发控制 │
└─────────────────────────────────────────────────────────────────┘
分片分配到此节点
│
▼
检查当前入站恢复数量
│
├── 当前数量 < node_concurrent_incoming_recoveries
│ │
│ └── 检查源节点出站恢复限制
│ │
│ ├── 源节点未达上限
│ │ │
│ │ └── 开始恢复
│ │
│ └── 源节点已达上限
│ │
│ └── 节流,等待源节点可用
│
└── 当前数量 >= node_concurrent_incoming_recoveries
│
└── 节流,拒绝新的入站恢复
入站恢复场景 #
1. 副本分片创建 #
新创建的副本分片需要从主分片复制数据:
主分片节点 ──────────────────> 副本分片节点(入站恢复)
2. 分片迁移 #
分片从其他节点迁移到此节点:
源节点 ──────────────────────> 目标节点(入站恢复)
3. 节点故障恢复 #
其他节点故障后,分片重新分配到此节点:
故障节点 ───────────────────> 恢复节点(入站恢复)
使用场景 #
1. 默认配置(推荐) #
# 使用继承的默认值
cluster.routing.allocation.node_concurrent_recoveries: 2
大多数场景下不需要单独配置。
2. 增加接收能力 #
cluster.routing.allocation.node_concurrent_incoming_recoveries: 6
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 2
适用场景:
- 新节点加入集群快速同步数据
- 数据迁移目标节点
- 高存储写入性能
3. 限制入站流量 #
cluster.routing.allocation.node_concurrent_incoming_recoveries: 1
适用场景:
- 避免影响正在运行的服务
- 网络带宽有限
- 存储写入性能较低
4. 不对称配置 #
# 入站多,出站少
cluster.routing.allocation.node_concurrent_incoming_recoveries: 8
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 2
# 入站少,出站多
cluster.routing.allocation.node_concurrent_incoming_recoveries: 2
cluster.routing.allocation.node_concurrent_outgoing_recoveries: 8
推荐设置建议 #
| 节点角色 | 入站值 | 出站值 | 说明 |
|---|---|---|---|
| 通用节点 | 2 | 2 | 平衡配置 |
| 数据接收节点 | 6-8 | 2 | 优化数据同步 |
| 数据提供节点 | 2 | 6-8 | 优化数据分发 |
| 低性能节点 | 1-2 | 1-2 | 避免过载 |
| 高性能节点 | 4-8 | 4-8 | 充分利用资源 |
监控建议 #
# 查看当前配置
GET /_cluster/settings?filter_path=*.cluster.routing.allocation.node_concurrent_incoming_recoveries
# 查看正在进行的入站恢复
GET /_cat/recovery?v&h=i,s,t,bytes,bytes_percent
# 查看详细恢复信息
GET /_cat/recovery?v&active_only=true
# 查看节点网络使用情况
GET /_nodes/stats/transport
故障排查 #
入站恢复被节流 #
# 检查当前入站恢复数量
GET /_cat/allocation?v
# 临时增加入站恢复限制
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.node_concurrent_incoming_recoveries": 6
}
}
恢复速度慢 #
- 检查网络带宽
- 检查磁盘写入性能
- 考虑临时增加入站恢复数量
- 检查是否有大量出站恢复限制了源节点
注意事项 #
- 动态更新:此配置为动态配置,可在线修改
- 继承机制:如果未显式设置,继承
node_concurrent_recoveries的值 - 双向控制:恢复受入站节点和出站节点双方限制
- 资源消耗:入站恢复会消耗磁盘写入 I/O 和网络带宽
- 临时调整:可在数据迁移时临时调高,完成后恢复





