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

配置项作用 #

indices.replication.retry_timeout 配置项控制副本复制操作失败后重试的总超时时间。当向副本节点执行操作(如索引、删除、更新等)失败时,系统会在指定时间内进行重试,超过此时间后将停止重试并返回错误。

配置项类型 #

该配置项为动态配置,可以在运行时通过索引设置 API 进行修改。

默认值 #

60s

是否必需 #

可选配置项(有默认值)

取值范围 #

0 ~ 正无穷

配置格式 #

# 默认配置
indices.replication.retry_timeout: 60s

# 增加重试时间
indices.replication.retry_timeout: 120s

# 减少重试时间
indices.replication.retry_timeout: 30s

# 快速失败
indices.replication.retry_timeout: 10s

相关配置项 #

配置项默认值说明
indices.replication.retry_timeout60s重试总超时时间
indices.replication.initial_retry_backoff_bound50ms初始重试退避上限

工作原理 #

副本复制重试机制:

┌─────────────────────────────────────────────────────────────────┐
│                    副本复制重试流程                              │
└─────────────────────────────────────────────────────────────────┘

操作执行到副本
    │
    ├── 成功 → 完成
    │
    └── 失败
         │
         ▼
    检查重试时间
         │
         ├── 已用时间 < retry_timeout
         │   │
         │   └── 指数退避后重试
         │       │
         │       ├── 50ms, 100ms, 200ms, 400ms...
         │       └── 继续重试直到成功或超时
         │
         └── 已用时间 >= retry_timeout
             │
             └── 放弃重试,返回错误

指数退避机制 #

重试延迟计算:

初始退避上限: 50ms
第1次重试: random(0, 50ms]
第2次重试: random(0, 100ms]
第3次重试: random(0, 200ms]
第4次重试: random(0, 400ms]
...
持续增长直到 retry_timeout

示例(retry_timeout = 60s):
0s: 首次尝试失败
0.05s: 第1次重试
0.15s: 第2次重试
0.35s: 第3次重试
0.75s: 第4次重奏
1.55s: 第5次重试
...
60s: 超时,放弃重试

使用场景 #

1. 默认配置(推荐) #

indices.replication.retry_timeout: 60s

适用于大多数集群配置。

2. 不稳定网络 #

indices.replication.retry_timeout: 120s

适用场景:

  • 跨地域部署
  • 网络不稳定
  • 高延迟网络

3. 快速失败 #

indices.replication.retry_timeout: 30s

适用场景:

  • 需要快速响应
  • 不希望长时间等待
  • 自动重试机制在客户端

4. 复制关键数据 #

indices.replication.retry_timeout: 180s

适用场景:

  • 关键业务数据
  • 不能容忍复制失败
  • 网络条件不佳

推荐设置建议 #

网络环境推荐超时说明
稳定内网30-60s快速失败
同地域60s默认配置
跨地域120-180s考虑延迟
不稳定网络120s更多重试机会

动态配置示例 #

# 更新现有索引
PUT /my_index/_settings
{
  "index.replication.retry_timeout": "90s"
}

# 设置为所有索引
PUT /_template/default_replication
{
  "index_patterns": ["*"],
  "settings": {
    "index.replication.retry_timeout": "60s"
  }
}

监控建议 #

# 查看当前配置
GET /my_index/_settings?filter_path=*.replication.retry_timeout

# 查看副本状态
GET /_cat/shards?v&h=index,shard,prirep,state,node

# 查看复制延迟
GET /_cat/pending_tasks?v

故障排查 #

复制频繁失败 #

  1. 检查网络连接
  2. 检查副本节点状态
  3. 增加重试超时时间
  4. 检查副本节点磁盘空间

响应时间过长 #

  1. 检查重试日志
  2. 考虑减少重试超时
  3. 优化网络连接
  4. 检查副本节点负载

与 initial_retry_backoff_bound 配合 #

# 快速重试策略
indices.replication.retry_timeout: 30s
indices.replication.initial_retry_backoff_bound: 100ms

# 慢速重试策略
indices.replication.retry_timeout: 120s
indices.replication.initial_retry_backoff_bound: 200ms

注意事项 #

  1. 动态更新:此配置为动态配置,可在线修改
  2. 指数退避:重试延迟呈指数增长
  3. 影响响应时间:重试期间操作不会返回
  4. 与网络相关:网络延迟大的环境需要更长超时
  5. 不影响主分片:主分片操作不受重试影响
  6. 写一致性:配合 wait_for_active_shards 使用