配置项作用 #
transport.connections_per_node.recovery 配置项控制集群中每个节点之间用于恢复(Recovery)操作的并发连接数。恢复操作包括分片恢复、副本同步等数据传输操作。增加此值可以提高恢复速度,但也会消耗更多资源。
配置项类型 #
该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。
默认值 #
2
是否必需 #
可选配置项(有默认值)
取值范围 #
1 ~ 正整数
配置格式 #
# 默认配置
transport.connections_per_node.recovery: 2
# 增加恢复连接数
transport.connections_per_node.recovery: 4
# 减少恢复连接数
transport.connections_per_node.recovery: 1
# 大规模集群
transport.connections_per_node.recovery: 6
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
transport.connections_per_node.recovery | 2 | 恢复连接数 |
transport.connections_per_node.bulk | 3 | 批量操作连接数 |
transport.connections_per_node.reg | 6 | 常规操作连接数 |
transport.connections_per_node.state | 1 | 状态操作连接数 |
transport.connections_per_node.ping | 1 | 心跳连接数 |
工作原理 #
节点连接管理机制:
┌─────────────────────────────────────────────────────────────────┐
│ 节点间连接池管理 │
└─────────────────────────────────────────────────────────────────┘
节点 A 和节点 B 之间的连接
┌────────────────────────────────────┐
│ 节点 A → 节点 B │
├────────────────────────────────────┤
│ 恢复连接: 2 个 (recovery) │ ← 用于分片恢复
│ 批量连接: 3 个 (bulk) │ ← 用于批量操作
│ 常规连接: 6 个 (reg) │ ← 用于常规请求
│ 状态连接: 1 个 (state) │ ← 用于状态更新
│ 心跳连接: 1 个 (ping) │ ← 用于心跳检测
└────────────────────────────────────┘
总连接数 = (recovery + bulk + reg + state + ping) * 2(双向)
连接类型说明 #
连接类型详解:
1. recovery (恢复连接)
用途: 分片恢复、副本同步
特点: 大数据量传输
默认: 2 个
2. bulk (批量连接)
用途: 批量索引、批量操作
特点: 中等数据量
默认: 3 个
3. reg (常规连接)
用途: 普通搜索、索引请求
特点: 小数据量、高并发
默认: 6 个
4. state (状态连接)
用途: 集群状态更新
特点: 小数据、低频
默认: 1 个
5. ping (心跳连接)
用途: 故障检测
特点: 极小数据、定期
默认: 1 个
使用场景 #
1. 默认配置(推荐) #
transport.connections_per_node.recovery: 2
适用于大多数集群配置,平衡性能和资源使用。
2. 快速恢复场景 #
transport.connections_per_node.recovery: 4
适用场景:
- 需要快速恢复分片
- 网络带宽充足
- 节点性能强大
- 紧急恢复操作
3. 资源受限环境 #
transport.connections_per_node.recovery: 1
适用场景:
- 网络带宽有限
- 节点资源紧张
- 小规模集群
- 低优先级恢复
4. 大规模集群 #
transport.connections_per_node.recovery: 6
适用场景:
- 大数据量恢复
- 高性能网络
- 需要最大化吞吐量
推荐设置建议 #
| 集群规模 | 网络条件 | 推荐值 | 说明 |
|---|---|---|---|
| 小型(3-5节点) | 千兆 | 2-3 | 默认即可 |
| 中型(6-20节点) | 千兆 | 2-4 | 根据负载调整 |
| 大型(20+节点) | 万兆 | 4-6 | 提高吞吐量 |
| 跨地域 | 百兆 | 1-2 | 节省带宽 |
| 资源受限 | 任意 | 1 | 最小化资源使用 |
性能影响分析 #
连接数对性能的影响:
增加连接数 (例如从 2 增加到 4):
优点:
✓ 提高恢复吞吐量
✓ 减少恢复时间
✓ 更好利用网络带宽
✓ 支持更多并发恢复
缺点:
✗ 增加内存使用
✗ 增加线程开销
✗ 可能影响其他操作
✗ 增加连接管理复杂度
减少连接数 (例如从 2 减少到 1):
优点:
✓ 减少资源使用
✓ 简化连接管理
✓ 降低开销
缺点:
✗ 降低恢复速度
✗ 延长恢复时间
✗ 可能成为瓶颈
恢复场景分析 #
常见恢复场景:
1. 新节点加入
- 需要同步大量分片
- 建议增加连接数: 4-6
2. 节点故障恢复
- 需要重建副本
- 建议使用默认: 2
3. 副本数增加
- 需要创建新副本
- 建议使用默认: 2
4. 集群再平衡
- 分片迁移
- 建议使用默认: 2
5. 快速扩容
- 大量新节点加入
- 建议临时增加: 4-6
配置示例 #
# 场景 1: 标准生产集群
cluster.name: prod-cluster
transport.connections_per_node.recovery: 2
transport.connections_per_node.bulk: 3
transport.connections_per_node.reg: 6
# 场景 2: 高性能集群
cluster.name: high-perf-cluster
transport.connections_per_node.recovery: 6
transport.connections_per_node.bulk: 6
transport.connections_per_node.reg: 12
# 场景 3: 资源受限集群
cluster.name: small-cluster
transport.connections_per_node.recovery: 1
transport.connections_per_node.bulk: 2
transport.connections_per_node.reg: 4
资源消耗估算 #
资源消耗估算 (假设每个连接使用约 1MB 内存):
默认配置 (recovery: 2):
每对节点: 2 * 1MB = 2MB
10 节点集群: 45 * 2MB ≈ 90MB
增加配置 (recovery: 6):
每对节点: 6 * 1MB = 6MB
10 节点集群: 45 * 6MB ≈ 270MB
公式:
总内存 = 节点数 * (节点数 - 1) / 2 * 连接数 * 每连接内存
监控建议 #
# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.transport.connections_per_node
# 查看恢复状态
GET /_cat/recovery?v
# 查看节点连接统计
GET /_nodes/stats/transport
# 监控恢复进度
GET /_cat/nodes?v&h=name,*,recovery*
动态调整建议 #
临时增加恢复速度:
1. 临时修改配置(需要重启)
transport.connections_per_node.recovery: 6
2. 等待恢复完成
3. 恢复默认配置(需要重启)
transport.connections_per_node.recovery: 2
注意: 此配置需要重启节点才能生效
建议在维护窗口进行
故障排查 #
恢复速度慢问题排查:
1. 检查当前连接数配置
GET /_nodes/settings?filter_path=*.transport.connections_per_node
2. 检查恢复状态
GET /_cat/recovery?v
3. 检查网络带宽
iftop, nethogs 等工具
4. 检查磁盘 IO
iostat, iotop 等工具
5. 根据瓶颈调整配置
- 网络瓶颈 → 增加连接数
- 磁盘瓶颈 → 连接数无效
- CPU 瓶颈 → 增加连接数可能无效
注意事项 #
- 静态配置:修改需要重启节点
- 双向连接:每个方向的连接数
- 资源消耗:增加连接会增加内存和线程使用
- 网络带宽:确保网络带宽足够
- 集群规模:大规模集群需要谨慎调整
- 与恢复配置配合:与 indices.recovery.max_concurrent_file_chunks 等配置配合使用





