配置项作用 #
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_recoveries | 2 | 总体并发恢复数量 |
cluster.routing.allocation.node_concurrent_incoming_recoveries | 2 | 入站恢复数量 |
cluster.routing.allocation.node_concurrent_outgoing_recoveries | 2 | 出站恢复数量 |
工作原理 #
出站恢复并发控制机制:
┌─────────────────────────────────────────────────────────────────┐
│ 出站恢复并发控制 │
└─────────────────────────────────────────────────────────────────┘
需要从此节点发送分片数据
│
▼
检查当前出站恢复数量
│
├── 当前数量 < 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
推荐设置建议 #
| 节点角色 | 入站值 | 出站值 | 说明 |
|---|---|---|---|
| 通用节点 | 2 | 2 | 平衡配置 |
| 数据源节点 | 2 | 6-8 | 优化数据分发 |
| 数据接收节点 | 6-8 | 2 | 优化数据同步 |
| 只读节点 | 0-1 | 6-8 | 主要提供数据 |
| 写入密集节点 | 4-6 | 1-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
}
}
数据迁移慢 #
- 检查网络上行带宽
- 检查磁盘读取性能
- 考虑增加出站恢复数量
- 检查目标节点的入站恢复限制
影响查询性能 #
出站恢复会消耗磁盘读取 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
}
}
注意事项 #
- 动态更新:此配置为动态配置,可在线修改
- 继承机制:如果未显式设置,继承
node_concurrent_recoveries的值 - 双向控制:恢复受入站节点和出站节点双方限制
- 资源消耗:出站恢复会消耗磁盘读取 I/O 和网络上行带宽
- 生产影响:过高的出站恢复可能影响查询性能
- 临时调整:可在数据迁移时临时调高,完成后恢复





