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

配置项作用 #

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: 3
    backoff_millis: 100

建议: 设置为 3-5。网络不稳定或资源暂时不足时使用。

高可用要求 #

index_state_management:
  coordinator:
    backoff_count: 5
    backoff_millis: 50

建议: 设置为 5-8。需要确保操作最终成功时使用。

快速失败场景 #

index_state_management:
  coordinator:
    backoff_count: 0  # 立即失败
    backoff_millis: 50

建议: 保持为 0。需要快速检测和处理问题时使用。

代码示例 #

easysearch.yml 基础配置 #

index_state_management:
  coordinator:
    backoff_count: 0

启用重试配置 #

index_state_management:
  coordinator:
    backoff_count: 3
    backoff_millis: 100

高重试次数配置 #

index_state_management:
  coordinator:
    backoff_count: 8
    backoff_millis: 50

动态更新配置 #

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. 监控建议: 监控重试事件,评估是否需要调整配置。