--- title: "ISM 协调器重试次数配置" date: 2026-03-09 lastmod: 2026-03-09 description: "index_state_management.coordinator.backoff_count 配置项用于控制 ISM 协调器操作失败后的重试次数。" tags: ["索引状态管理", "ISM", "重试策略", "协调器"] summary: "配置项作用 # index_state_management.coordinator.backoff_count 配置项用于控制索引状态管理(ISM)协调器在操作失败后的最大重试次数。 当协调器执行批量操作失败时(如遇到 429 Too Many Requests 错误),系统会根据此配置进行重试。 配置项属性 # 配置路径: index_state_management.coordinator.backoff_count 数据类型: Integer(整数) 默认值: 0(不重试) 最小值: 0 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(支持动态更新) 配置项详解 # 工作机制 # 重试策略工作流程 协调器执行操作 │ ↓ 操作成功 ✅ │ └────→ 完成 操作失败 ❌ │ ↓ 检查 backoff_count │ ├──────── backoff_count = 0 │ ↓ │ 立即失败,不重试 │ ↓ │ 返回错误 │ └──────── backoff_count > 0 ↓ 等待 backoff_millis │ ↓ 重新尝试操作 │ ├─────── 成功 ✅ ──→ 完成 │ └─────── 失败 ❌ │ ↓ 重试次数 - 1 │ ├──── > 0 ──→ 继续重试 │ └──── = 0 ──→ 放弃,返回错误 恒定退避策略 # Constant Backoff 策略 backoff_count = 3 backoff_millis = 50ms 时间线: 0ms ────→ 50ms ────→ 100ms ────→ 150ms │ │ │ │ 尝试1 等待 尝试2 等待 失败 50ms 失败 50ms │ ↓ 100ms ────→ 150ms ────→ 200ms │ │ 尝试3 等待 失败 50ms │ ↓ 尝试4 (最后) │ └───→ 失败 ↓ 返回错误 总耗时: 约 200ms 配置建议 # 生产环境(默认) # index_state_management: coordinator: backoff_count: 0 # 默认值,不重试 建议: 保持默认值 0。让上层应用处理失败,现代集群通常有自我修复能力。" --- ## 配置项作用 `index_state_management.coordinator.backoff_count` 配置项用于控制**索引状态管理(ISM)协调器在操作失败后的最大重试次数**。 当协调器执行批量操作失败时(如遇到 429 Too Many Requests 错误),系统会根据此配置进行重试。 ## 配置项属性 - **配置路径**: `index_state_management.coordinator.backoff_count` - **数据类型**: `Integer`(整数) - **默认值**: `0`(不重试) - **最小值**: `0` - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: 是(支持动态更新) ## 配置项详解 ## 工作机制 ``` 重试策略工作流程 协调器执行操作 │ ↓ 操作成功 ✅ │ └────→ 完成 操作失败 ❌ │ ↓ 检查 backoff_count │ ├──────── backoff_count = 0 │ ↓ │ 立即失败,不重试 │ ↓ │ 返回错误 │ └──────── backoff_count > 0 ↓ 等待 backoff_millis │ ↓ 重新尝试操作 │ ├─────── 成功 ✅ ──→ 完成 │ └─────── 失败 ❌ │ ↓ 重试次数 - 1 │ ├──── > 0 ──→ 继续重试 │ └──── = 0 ──→ 放弃,返回错误 ``` ## 恒定退避策略 ``` Constant Backoff 策略 backoff_count = 3 backoff_millis = 50ms 时间线: 0ms ────→ 50ms ────→ 100ms ────→ 150ms │ │ │ │ 尝试1 等待 尝试2 等待 失败 50ms 失败 50ms │ ↓ 100ms ────→ 150ms ────→ 200ms │ │ 尝试3 等待 失败 50ms │ ↓ 尝试4 (最后) │ └───→ 失败 ↓ 返回错误 总耗时: 约 200ms ``` ## 配置建议 ## 生产环境(默认) ```yaml index_state_management: coordinator: backoff_count: 0 # 默认值,不重试 ``` **建议**: 保持默认值 `0`。让上层应用处理失败,现代集群通常有自我修复能力。 ## 不稳定网络环境 ```yaml index_state_management: coordinator: backoff_count: 3 backoff_millis: 100 ``` **建议**: 设置为 `3-5`。网络不稳定或资源暂时不足时使用。 ## 高可用要求 ```yaml index_state_management: coordinator: backoff_count: 5 backoff_millis: 50 ``` **建议**: 设置为 `5-8`。需要确保操作最终成功时使用。 ## 快速失败场景 ```yaml index_state_management: coordinator: backoff_count: 0 # 立即失败 backoff_millis: 50 ``` **建议**: 保持为 `0`。需要快速检测和处理问题时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml index_state_management: coordinator: backoff_count: 0 ``` ## 启用重试配置 ```yaml index_state_management: coordinator: backoff_count: 3 backoff_millis: 100 ``` ## 高重试次数配置 ```yaml index_state_management: coordinator: backoff_count: 8 backoff_millis: 50 ``` ## 动态更新配置 ```json PUT /_cluster/settings { "transient": { "index_state_management.coordinator.backoff_count": 5 } } ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `index_state_management.coordinator.backoff_count` | 重试次数 | 0 | | `index_state_management.coordinator.backoff_millis` | 重试间隔(毫秒) | 50 | ## 重试场景分析 ``` 典型需要重试的场景 1. 429 Too Many Requests └── 集群暂时过载,稍后重试可能成功 2. 503 Service Unavailable └── 节点暂时不可用,可能很快恢复 3. 网络超时 └── 网络暂时拥塞,重试可能成功 4. 资源锁定 └── 索引暂时被锁定,等待后可重试 ``` ## 总重试时间计算 ``` 总重试时间估算 总时间 ≈ backoff_count × backoff_millis 示例 1: backoff_count = 3, backoff_millis = 50 总时间 ≈ 3 × 50ms = 150ms 示例 2: backoff_count = 5, backoff_millis = 100 总时间 ≈ 5 × 100ms = 500ms 示例 3: backoff_count = 0 总时间 = 0(不重试,立即失败) ``` ## 使用场景 ## 推荐不重试的场景 - **默认行为**: 保持默认值 `0` - **快速失败**: 需要立即知道操作结果 - **集群健康**: 集群状态良好,很少失败 - **上层处理**: 有上层应用处理失败情况 ## 推荐启用重试的场景 - **网络波动**: 网络连接不稳定 - **高负载**: 集群经常处于高负载状态 - **跨地域**: 节点分布在不同地域 - **云环境**: 云服务可能有临时限流 ## 注意事项 1. **默认不重试**: 默认值为 `0`,表示不进行任何重试。 2. **与 backoff_millis 配合**: 两个配置需要合理搭配。 3. **恒定退避**: 使用恒定退避策略,每次重试等待相同时间。 4. **动态更新**: 支持动态更新,修改后立即生效。 5. **总耗时考虑**: 重试次数过多会增加操作总耗时。 6. **资源消耗**: 重试会消耗额外资源,需要平衡。 7. **错误日志**: 所有重试失败会记录错误日志。 8. **适用操作**: 主要用于批量操作(如元数据更新)。 9. **版本变化**: 旧版本默认值为 `2`,新版本改为 `0`。 10. **监控建议**: 监控重试事件,评估是否需要调整配置。