--- title: "分片恢复速率限制配置" date: 2026-03-22 lastmod: 2026-03-22 description: "控制分片恢复时网络传输速率限制的配置项说明" tags: ["分片恢复", "速率限制", "网络配置"] summary: "配置项作用 # indices.recovery.max_bytes_per_sec 配置项限制分片恢复(Recovery)过程中的网络传输速率,用于控制节点间数据恢复的带宽使用,防止恢复过程占用过多网络资源影响正常业务。 配置项类型 # 该配置项为动态配置,可以在运行时通过集群设置 API 进行修改。 默认值 # 40mb 是否必需 # 可选配置项(有默认值) 取值范围 # 0b(无限制)~ 无最大值 工作原理 # 恢复速率限制器控制分片恢复时的数据传输速度: ┌─────────────────────────────────────────────────────────┐ │ 分片恢复请求 │ │ (节点故障、新节点加入、副本分配) │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ │ 启用限速 禁用限速 max_bytes_per_sec > 0 max_bytes_per_sec = 0b │ │ ▼ ▼ 按配置速率传输 无限制传输 (受控恢复) (可能影响业务) 速率限制机制: 每秒传输量 │ ├─→ 未达限制 → 继续传输 │ └─→ 达到限制 → 等待下一秒 配置格式 # # 默认配置 indices." --- ## 配置项作用 `indices.recovery.max_bytes_per_sec` 配置项限制分片恢复(Recovery)过程中的网络传输速率,用于控制节点间数据恢复的带宽使用,防止恢复过程占用过多网络资源影响正常业务。 ## 配置项类型 该配置项为**动态配置**,可以在运行时通过集群设置 API 进行修改。 ## 默认值 ``` 40mb ``` ## 是否必需 **可选配置项**(有默认值) ## 取值范围 ``` 0b(无限制)~ 无最大值 ``` ## 工作原理 恢复速率限制器控制分片恢复时的数据传输速度: ``` ┌─────────────────────────────────────────────────────────┐ │ 分片恢复请求 │ │ (节点故障、新节点加入、副本分配) │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌───────┴────────┐ │ │ 启用限速 禁用限速 max_bytes_per_sec > 0 max_bytes_per_sec = 0b │ │ ▼ ▼ 按配置速率传输 无限制传输 (受控恢复) (可能影响业务) ``` **速率限制机制:** ``` 每秒传输量 │ ├─→ 未达限制 → 继续传输 │ └─→ 达到限制 → 等待下一秒 ``` ## 配置格式 ```yaml # 默认配置 indices.recovery.max_bytes_per_sec: 40mb # 提高恢复速度 indices.recovery.max_bytes_per_sec: 100mb # 降低恢复速度 indices.recovery.max_bytes_per_sec: 20mb # 禁用限制(不推荐) indices.recovery.max_bytes_per_sec: 0b # 无限速(业务低峰期) indices.recovery.max_bytes_per_sec: 500mb ``` ## 使用场景 **1. 节点故障恢复** ``` 主节点故障 → 副本提升为主节点 → 新副本分配 → 数据恢复 ``` **2. 新节点加入** ``` 新节点加入集群 → 分片重新平衡 → 数据恢复 ``` **3. 副本数调整** ``` 增加副本 → 新副本分配 → 数据恢复 ``` **4. 集群重启** ``` 节点重启 → 分片恢复 → 数据恢复 ``` ## 推荐设置建议 **生产环境建议**:根据网络带宽和业务特点设置 | 场景 | 推荐配置 | 说明 | |-----|---------|------| | 默认 | 40mb | 通用场景 | | 千兆网络 | 100-200mb | 充分利用带宽 | | 万兆网络 | 500mb-1gb | 高速恢复 | | 网络敏感 | 10-20mb | 保护业务 | | 业务低峰 | 无限制 | 加快恢复 | | 业务高峰 | 20-40mb | 保证业务 | ## 网络带宽计算 **带宽占用估算:** ``` 网络带宽: 1Gbps = 125MB/s 恢复限速: 40MB/s 实际占用: 40MB/s / 125MB/s = 32% 建议: 保留 30-50% 带宽给业务 恢复限速: 60-80MB/s ``` **示例配置:** ```yaml # 1Gbps 网络,保留 50% 给业务 indices.recovery.max_bytes_per_sec: 60mb # 10Gbps 网络,保留 30% 给业务 indices.recovery.max_bytes_per_sec: 800mb ``` ## 动态修改 ```bash # 业务低峰期,提高恢复速度 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "200mb" } } # 业务高峰期,降低恢复速度 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "20mb" } } # 节点维护完成后,恢复正常 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "40mb" } } ``` ## 查看恢复状态 ```bash # 查看正在进行的恢复 GET /_cat/recovery?v # 查看特定索引的恢复 GET /_cat/recovery/my_index?v # 查看恢复详细统计 GET /_nodes/stats/indices/recovery?pretty # 查看恢复速率 GET /_cat/recovery?v&h=index,shard,stage,bytes_recovered,bytes_recovered_per_sec ``` **输出字段说明:** | 字段 | 说明 | |-----|------| | index | 索引名称 | | shard | 分片编号 | | stage | 恢复阶段 | | bytes_recovered | 已恢复字节数 | | bytes_recovered_per_sec | 恢复速率 | ## 常见问题 **问题 1:恢复速度慢** **可能原因:** 1. 速率限制设置过低 2. 网络带宽不足 3. 磁盘 I/O 瓶颈 **解决方案:** 1. **提高速率限制** ```bash PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "100mb" } } ``` 2. **增加并发数** ```bash PUT /_cluster/settings { "transient": { "indices.recovery.max_concurrent_file_chunks": 4 } } ``` 3. **选择业务低峰期** ```bash # 在业务低峰期提高限制 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "500mb" } } ``` **问题 2:恢复影响业务性能** **症状:** - 查询响应变慢 - 读写延迟增加 **解决方案:** 1. **降低恢复速度** ```bash PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "20mb" } } ``` 2. **限制并发恢复数** ```bash PUT /_cluster/settings { "transient": { "cluster.routing.allocation.node_concurrent_recoveries": 2 } } ``` 3. **使用分片 allocation 过滤** ```bash # 控制恢复分片的节点 PUT /_cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": "recovering_node" } } ``` **问题 3:恢复超时** ``` RecoveryFailedException[recovery failed on ...] ``` **解决方案:** 1. **增加超时时间** ```bash PUT /_cluster/settings { "transient": { "indices.recovery.internal_action_timeout": "30m" } } ``` 2. **提高速率限制** ```bash PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "100mb" } } ``` ## 相关配置项 | 配置项 | 默认值 | 说明 | |-------|-------|------| | `indices.recovery.max_concurrent_file_chunks` | 2 | 并发文件块数 | | `indices.recovery.max_concurrent_operations` | 1 | 并发操作数 | | `indices.recovery.internal_action_timeout` | 15m | 内部操作超时 | | `indices.recovery.retry_delay_network` | 5s | 网络重试延迟 | | `cluster.routing.allocation.node_concurrent_recoveries` | 2 | 节点并发恢复数 | ## 性能优化建议 **1. 根据时间段动态调整** ```bash # 业务低峰期(凌晨) 0 2 * * * curl -XPUT 'localhost:9200/_cluster/settings' -d '{ "transient": { "indices.recovery.max_bytes_per_sec": "500mb" } }' # 业务高峰期(早上) 0 8 * * * curl -XPUT 'localhost:9200/_cluster/settings' -d '{ "transient": { "indices.recovery.max_bytes_per_sec": "20mb" } }' ``` **2. 配合并发恢复数** ```yaml # 平衡速率和并发 indices.recovery.max_bytes_per_sec: 100mb cluster.routing.allocation.node_concurrent_recoveries: 4 ``` **3. 监控恢复进度** ```bash # 持续监控恢复状态 watch -n 5 'curl -s localhost:9200/_cat/recovery?v' # 设置告警 # 当恢复时间过长时告警 ``` ## 不同场景的配置策略 **场景 1:节点故障快速恢复** ```yaml # 最大化恢复速度 indices.recovery.max_bytes_per_sec: 500mb indices.recovery.max_concurrent_file_chunks: 4 cluster.routing.allocation.node_concurrent_recoveries: 4 ``` **场景 2:新节点加入** ```yaml # 中等恢复速度,平衡业务 indices.recovery.max_bytes_per_sec: 100mb cluster.routing.allocation.node_concurrent_recoveries: 2 ``` **场景 3:计划维护** ```yaml # 业务低峰期加快恢复 indices.recovery.max_bytes_per_sec: 200mb # 维护完成后恢复 indices.recovery.max_bytes_per_sec: 40mb ``` **场景 4:网络敏感环境** ```yaml # 低速恢复 indices.recovery.max_bytes_per_sec: 20mb cluster.routing.allocation.node_concurrent_recoveries: 1 ``` ## 监控建议 ```bash # 持续监控恢复速率 GET /_cat/recovery?v&h=index,bytes_recovered_per_sec # 计算预计完成时间 预计时间 = 剩余字节数 / 当前速率 ``` **健康阈值:** | 指标 | 健康 | 警告 | 严重 | |-----|------|------|------| | 恢复速率 | > 配置的 50% | 10-50% | < 10% | | 恢复时间 | < 30min | 30-60min | > 60min | ## 注意事项 1. **动态更新**:此配置为动态配置,可在线修改 2. **网络影响**:高恢复速率可能影响正常业务 3. **磁盘 I/O**:恢复过程也消耗磁盘 I/O 资源 4. **并发控制**:需配合并发恢复数配置 5. **时段选择**:建议在业务低峰期进行大规模恢复