GIS开发 | 空间分析 | 软硬件技术
🌿 绿水青山就是金山银山 🌿

Elasticsearch 7.x 生产极简运维手册(日常够用版)

前置统一地址

http://192.168.20.89:9200,下文统一简写为 ES_HOST

一、集群健康监控(每日必查)

1. 集群整体健康(最常用)

curl ES_HOST/_cluster/health?pretty

状态说明:

  • green:全部主副本正常,安全
  • yellow:主分片正常、副本未分配(你当前 eiptest 状态)
  • red:主分片丢失,业务不可用,紧急处理

2. 查看所有分片分布(排查 UNASSIGNED/INITIALIZING)

curl ES_HOST/_cat/shards?v

字段释义:

  • p:primary 主分片;r:replica 副本
  • STARTED:正常;INITIALIZING:同步中;UNASSIGNED:未分配

3. 查看所有节点资源、磁盘、内存

curl ES_HOST/_cat/nodes?v

4. 查看各节点磁盘占用

curl ES_HOST/_cat/allocation?v

5. 查看正在执行任务(同步 / 删除 /forcemerge)

curl ES_HOST/_tasks?pretty

6. 查看分片同步实时进度(你现在同步副本专用)

curl ES_HOST/_recovery?pretty

重点看:bytes_total 总分片、bytes_recovered 已同步、percent 进度

二、索引基础管理

1. 查看全部索引大小、文档数、副本配置

curl ES_HOST/_cat/indices?v

2. 查看单索引副本数(区分集群同步参数和副本配置)

curl ES_HOST/eiptest/_settings?flat_settings&pretty

关键字段 index.number_of_replicas:1=1 主 1 副本,2=1 主 2 副本

3. 修改索引副本数(同步完成后再执行)

# 改成1主2副本(三台机器各存一份完整数据)
curl -XPUT ES_HOST/eiptest/_settings -H "Content-Type:application/json" -d'
{
  "number_of_replicas": 2
}'

4. 新建索引指定分片副本

curl -XPUT ES_HOST/log-202607 -H "Content-Type:application/json" -d'
{
  "settings":{
    "number_of_shards":1,
    "number_of_replicas":1
  }
}'

5. 删除过期索引(谨慎)

curl -XDELETE ES_HOST/log-202601

三、分片同步 / 恢复控制(你当前在用核心模块)

1. 调低同步限速、单节点仅 1 个同步任务(超大分片防 IO 打满)

curl -XPUT ES_HOST/_cluster/settings -H "Content-Type:application/json" -d'
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_recoveries": 1,
    "indices.recovery.max_bytes_per_sec": "20mb"
  }
}'

2. 同步完成后恢复默认不限速

curl -XPUT ES_HOST/_cluster/settings -H "Content-Type:application/json" -d'
{
  "persistent": {
    "cluster.routing.allocation.node_concurrent_recoveries": null,
    "indices.recovery.max_bytes_per_sec": null
  }
}'

3. 重置失败分片,重新尝试分配

curl -XPOST ES_HOST/_cluster/reroute?retry_failed=true

4. 手动强制分配副本(修复 UNASSIGNED 分片)

curl -XPOST ES_HOST/_cluster/reroute -H "Content-Type:application/json" -d'
{
  "commands": [
    {
      "allocate_replica": {
        "index": "eiptest",
        "shard": 0,
        "node": "ehV_EmwmQIGEz7kYbaxYsw"
      }
    }
  ]
}'

5. 临时关闭分片自动平衡(业务高峰防 IO 冲击)

curl -XPUT ES_HOST/_cluster/settings -H "Content-Type:application/json" -d'
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}'
# 恢复自动平衡
curl -XPUT ES_HOST/_cluster/settings -H "Content-Type:application/json" -d'
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}'

四、数据清理 & 磁盘释放(生产慎用,同步期间禁止)

1. 按条件批量删除旧数据(scroll 延长超时防上下文丢失)

curl -XPOST ES_HOST/eiptest/_delete_by_query?scroll=10m&requests_per_second=100 -H "Content-Type:application/json" -d'
{
  "query": {
    "range": {
      "time": {
        "lte": "2026-01-01"
      }
    }
  }
}'
  • scroll=10m:延长查询快照存活时间
  • requests_per_second=100:限速,避免磁盘 IO 打爆

2. 删除后强制合并段文件,真正释放磁盘(低峰执行)

curl -XPOST ES_HOST/eiptest/_forcemerge?max_num_segments=1

⚠️ IO 消耗极大,副本同步中绝对不能执行

3. 查看删除任务状态、终止卡住的删除任务

# 查看所有任务
curl ES_HOST/_tasks?pretty
# 终止任务(替换task_id)
curl -XPOST ES_HOST/_tasks/-erF9CAzRU-byFTGenYvqA:6708210/_cancel

五、故障排查常用命令

1. 查看分片未分配的详细原因(锁超时 / 磁盘满 / 节点离线)

curl ES_HOST/_cluster/allocation/explain?pretty

2. 查看节点热点线程(CPU/IO 高负载定位)

curl ES_HOST/_nodes/hot_threads

3. 清空索引缓存(查询异常、内存高时)

curl -XPOST ES_HOST/eiptest/_cache/clear

4. 延迟分片自动恢复(节点短暂重启,避免全量重同步)

curl -XPUT ES_HOST/_all/_settings -H "Content-Type:application/json" -d'
{
  "index.unassigned.node_left.delayed_timeout": "5m"
}'

六、生产运维红线规则(避坑重点,适配你的 500G 单分片)

  1. 单分片不要超过 100G,500G 超大分片极易同步失败、故障恢复极慢,建议按天分拆索引
  2. 副本处于INITIALIZING同步阶段:禁止批量删除、forcemerge、重启节点,会从头重传几百 G
  3. 集群yellow(仅副本丢失):优先低速同步副本,不要直接删数据(当前只有单份主分片,丢数据无法恢复)
  4. 磁盘使用率超 85% 会触发 ES 只读保护,定期清理旧索引 / 过期数据
  5. 3 节点集群标准配置:副本数 = 1 或 2,1 主 2 副本实现三节点完整容灾
  6. persistent参数永久生效,集群重启不丢失;transient临时生效,重启重置

七、日常运维流程模板

  1. 早间巡检:_cluster/health + _cat/shards,确认无 UNASSIGNED 分片
  2. 磁盘告警:低峰执行_delete_by_query删除过期数据,再_forcemerge释放空间
  3. 副本同步失败:调低 recovery 限速 20mb/s、单节点并发 1,手动 allocate_replica 重建副本
  4. 业务高峰:关闭分片自动 balance,避免同步抢占业务 IO
  5. 月度优化:拆分超大索引,控制单分片 30-80G,降低后续同步故障概率