--- title: "每节点恢复连接数配置" date: 2026-02-21 lastmod: 2026-02-21 description: "控制每节点恢复连接数量的配置项说明" tags: ["传输配置", "性能优化", "数据恢复"] summary: "配置项作用 # 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." --- ## 配置项作用 `transport.connections_per_node.recovery` 配置项控制集群中每个节点之间用于恢复(Recovery)操作的并发连接数。恢复操作包括分片恢复、副本同步等数据传输操作。增加此值可以提高恢复速度,但也会消耗更多资源。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` 2 ``` ## 是否必需 **可选配置项**(有默认值) ## 取值范围 ``` 1 ~ 正整数 ``` ## 配置格式 ```yaml # 默认配置 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. 默认配置(推荐) ```yaml transport.connections_per_node.recovery: 2 ``` 适用于大多数集群配置,平衡性能和资源使用。 ### 2. 快速恢复场景 ```yaml transport.connections_per_node.recovery: 4 ``` **适用场景:** - 需要快速恢复分片 - 网络带宽充足 - 节点性能强大 - 紧急恢复操作 ### 3. 资源受限环境 ```yaml transport.connections_per_node.recovery: 1 ``` **适用场景:** - 网络带宽有限 - 节点资源紧张 - 小规模集群 - 低优先级恢复 ### 4. 大规模集群 ```yaml 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 ``` ## 配置示例 ```yaml # 场景 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 * 连接数 * 每连接内存 ``` ## 监控建议 ```bash # 查看当前配置 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 瓶颈 → 增加连接数可能无效 ``` ## 注意事项 1. **静态配置**:修改需要重启节点 2. **双向连接**:每个方向的连接数 3. **资源消耗**:增加连接会增加内存和线程使用 4. **网络带宽**:确保网络带宽足够 5. **集群规模**:大规模集群需要谨慎调整 6. **与恢复配置配合**:与 indices.recovery.max_concurrent_file_chunks 等配置配合使用