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

配置项作用 #

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.recovery2恢复连接数
transport.connections_per_node.bulk3批量操作连接数
transport.connections_per_node.reg6常规操作连接数
transport.connections_per_node.state1状态操作连接数
transport.connections_per_node.ping1心跳连接数

工作原理 #

节点连接管理机制:

┌─────────────────────────────────────────────────────────────────┐
│                    节点间连接池管理                               │
└─────────────────────────────────────────────────────────────────┘

节点 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 瓶颈 → 增加连接数可能无效

注意事项 #

  1. 静态配置:修改需要重启节点
  2. 双向连接:每个方向的连接数
  3. 资源消耗:增加连接会增加内存和线程使用
  4. 网络带宽:确保网络带宽足够
  5. 集群规模:大规模集群需要谨慎调整
  6. 与恢复配置配合:与 indices.recovery.max_concurrent_file_chunks 等配置配合使用