--- title: "ISM 协调器重试间隔配置" date: 2026-01-05 lastmod: 2026-01-05 description: "index_state_management.coordinator.backoff_millis 配置项用于控制 ISM 协调器重试操作之间的等待时间。" tags: ["索引状态管理", "ISM", "重试策略", "协调器"] summary: "配置项作用 # index_state_management.coordinator.backoff_millis 配置项用于控制索引状态管理(ISM)协调器在操作失败后重试之前的等待时间。 当协调器执行批量操作失败时(如遇到 429 Too Many Requests 错误),系统会等待此配置指定的时间后进行重试。 配置项属性 # 配置路径: index_state_management.coordinator.backoff_millis 数据类型: TimeValue(时间值) 默认值: 50ms(50毫秒) 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(支持动态更新) 配置项详解 # 工作机制 # 重试间隔时间流程 操作执行失败 ❌ │ ↓ 检查 backoff_count > 0 │ ↓ yes 等待 backoff_millis │ ↓ 重新执行操作 │ ├─────── 成功 ✅ ──→ 完成 │ └─────── 失败 ❌ ↓ backoff_count - 1 │ ↓ 检查是否还有重试次数 │ ├──── yes ──→ 继续等待 backoff_millis │ └──── no ──→ 放弃重试 恒定退避策略 # Constant Backoff 时序图 backoff_count = 3 backoff_millis = 100ms 尝试1 ──→ 失败 ──→ [等待 100ms] ──→ 尝试2 │ ↓ 失败 ──→ [等待 100ms] ──→ 尝试3 │ ↓ 失败 ──→ [等待 100ms] ──→ 尝试4 │ ↓ 失败 ──→ 放弃 总重试时间: 3 × 100ms = 300ms 批量操作中的应用 # 批量操作重试场景 批量更新索引元数据 │ ↓ BulkRequest │ ↓ 429 Too Many Requests ❌ │ ↓ 等待 backoff_millis (50ms) │ ↓ 重新发送 BulkRequest │ ├─────── 成功 ✅ ──→ 元数据更新完成 │ └─────── 仍然 429 ──→ 继续重试 配置建议 # 生产环境(默认) # index_state_management: coordinator: backoff_millis: 50ms # 默认值 backoff_count: 0 建议: 保持默认值 50ms。适用于大多数场景。" --- ## 配置项作用 `index_state_management.coordinator.backoff_millis` 配置项用于控制**索引状态管理(ISM)协调器在操作失败后重试之前的等待时间**。 当协调器执行批量操作失败时(如遇到 429 Too Many Requests 错误),系统会等待此配置指定的时间后进行重试。 ## 配置项属性 - **配置路径**: `index_state_management.coordinator.backoff_millis` - **数据类型**: `TimeValue`(时间值) - **默认值**: `50ms`(50毫秒) - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 是(支持动态更新) ## 配置项详解 ## 工作机制 ``` 重试间隔时间流程 操作执行失败 ❌ │ ↓ 检查 backoff_count > 0 │ ↓ yes 等待 backoff_millis │ ↓ 重新执行操作 │ ├─────── 成功 ✅ ──→ 完成 │ └─────── 失败 ❌ ↓ backoff_count - 1 │ ↓ 检查是否还有重试次数 │ ├──── yes ──→ 继续等待 backoff_millis │ └──── no ──→ 放弃重试 ``` ## 恒定退避策略 ``` Constant Backoff 时序图 backoff_count = 3 backoff_millis = 100ms 尝试1 ──→ 失败 ──→ [等待 100ms] ──→ 尝试2 │ ↓ 失败 ──→ [等待 100ms] ──→ 尝试3 │ ↓ 失败 ──→ [等待 100ms] ──→ 尝试4 │ ↓ 失败 ──→ 放弃 总重试时间: 3 × 100ms = 300ms ``` ## 批量操作中的应用 ``` 批量操作重试场景 批量更新索引元数据 │ ↓ BulkRequest │ ↓ 429 Too Many Requests ❌ │ ↓ 等待 backoff_millis (50ms) │ ↓ 重新发送 BulkRequest │ ├─────── 成功 ✅ ──→ 元数据更新完成 │ └─────── 仍然 429 ──→ 继续重试 ``` ## 配置建议 ## 生产环境(默认) ```yaml index_state_management: coordinator: backoff_millis: 50ms # 默认值 backoff_count: 0 ``` **建议**: 保持默认值 `50ms`。适用于大多数场景。 ## 高负载环境 ```yaml index_state_management: coordinator: backoff_millis: 200ms # 增加等待时间 backoff_count: 3 ``` **建议**: 增加到 `100-200ms`。集群负载较高时使用。 ## 快速恢复场景 ```yaml index_state_management: coordinator: backoff_millis: 20ms # 减少等待时间 backoff_count: 5 ``` **建议**: 减少到 `20-30ms`。需要快速重试时使用。 ## 不稳定网络 ```yaml index_state_management: coordinator: backoff_millis: 150ms backoff_count: 5 ``` **建议**: 增加到 `100-200ms`。网络不稳定时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml index_state_management: coordinator: backoff_millis: 50ms ``` ## 启用重试配置 ```yaml index_state_management: coordinator: backoff_millis: 100ms backoff_count: 3 ``` ## 高负载配置 ```yaml index_state_management: coordinator: backoff_millis: 200ms backoff_count: 5 ``` ## 动态更新配置 ```json PUT /_cluster/settings { "transient": { "index_state_management.coordinator.backoff_millis": "100ms" } } ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `index_state_management.coordinator.backoff_millis` | 重试间隔(毫秒) | 50ms | | `index_state_management.coordinator.backoff_count` | 重试次数 | 0 | ## 总重试时间计算 ``` 总重试时间估算 总时间 ≈ backoff_count × backoff_millis 配置示例: 1. backoff_count = 0, backoff_millis = 50 总时间 = 0(不重试) 2. backoff_count = 3, backoff_millis = 50 总时间 ≈ 3 × 50ms = 150ms 3. backoff_count = 5, backoff_millis = 100 总时间 ≈ 5 × 100ms = 500ms 4. backoff_count = 8, backoff_millis = 200 总时间 ≈ 8 × 200ms = 1600ms = 1.6s ``` ## 使用场景 ## 推荐使用默认值的场景 - **标准环境**: 集群负载正常 - **快速恢复**: 需要快速完成重试 - **默认重试**: 配合非零的 backoff_count 使用 ## 推荐增加间隔的场景 - **高负载集群**: 给集群更多恢复时间 - **频繁限流**: 经常遇到 429 错误 - **资源竞争**: 多个操作竞争资源 ## 推荐减少间隔的场景 - **低延迟要求**: 需要尽快完成操作 - **高性能集群**: 集群资源充足 - **快速失败**: 希望快速知道最终结果 ## 常见错误处理 ``` 可重试的错误类型 1. 429 Too Many Requests └── 集群过载,需要等待 └── backoff_millis 给集群恢复时间 2. 503 Service Unavailable └── 节点暂时不可用 └── 重试可能成功 3. 网络异常 └── 连接超时、网络中断 └── 等待后网络可能恢复 4. 资源锁定 └── 索引被其他操作锁定 └── 等待后锁可能释放 ``` ## 性能影响分析 | backoff_millis 设置 | 优点 | 缺点 | |---------------------|------|------| | 20ms | 快速重试 | 可能仍然过载 | | 50ms(默认) | 平衡速度和恢复 | 标准设置 | | 100ms | 给集群更多恢复时间 | 总耗时较长 | | 200ms | 显著减轻集群压力 | 操作延迟明显 | ## 与重试次数的配合 ``` 配置组合建议 场景 1: 轻微过载 backoff_millis: 50ms backoff_count: 3 总耗时: ~150ms 场景 2: 中度过载 backoff_millis: 100ms backoff_count: 5 总耗时: ~500ms 场景 3: 严重过载 backoff_millis: 200ms backoff_count: 8 总耗时: ~1.6s ``` ## 注意事项 1. **默认值**: 默认值为 `50ms`,是一个合理的折中值。 2. **与 backoff_count 配合**: 两个配置需要同时考虑。 3. **恒定策略**: 使用恒定退避,每次重试等待相同时间。 4. **动态更新**: 支持动态更新,修改后立即生效。 5. **总耗时**: `backoff_count × backoff_millis` 约为总重试时间。 6. **适用操作**: 主要用于批量元数据操作。 7. **429 错误**: 最常见的重试场景是集群限流。 8. **资源考虑**: 重试会消耗额外资源。 9. **监控建议**: 监控重试成功率,评估配置效果。 10. **版本兼容**: 此配置在新旧版本中一致。