Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

ElasticSearch 数据备份

内容:快照机制、冷/热备份、S3/HDFS/NFS、全量/增量、恢复策略。

一、Elasticsearch 数据备份概念

Elasticsearch 备份不是直接复制数据目录,而是使用 Snapshot(快照)机制。

  • Snapshot:将索引数据和元数据导出到 可持久化存储(如 NFS、S3、HDFS)
  • Restore:从 Snapshot 恢复索引

特点:

  • 可跨集群恢复
  • 支持全量和增量
  • 对集群在线操作影响小
  • 冷备热备可结合

二、Snapshot 原理

  1. Elasticsearch 分片级快照

    • 每个 shard 的 segment 文件被检查点记录
    • 使用 增量方式:已有 segment 不会重复备份
  2. Snapshot 只读操作

    • 不影响集群写入和搜索
    • 只占用少量 CPU 和 IO
  3. 元数据快照

    • 包括 mapping、settings、alias 等
    • 用于恢复索引结构

三、快照存储类型

类型 说明 场景
NFS / 本地共享目录 文件系统 小型集群,局域网
AWS S3 / MinIO / OSS 对象存储 公有云 / 跨地域
HDFS Hadoop 集群 大数据生态
GCS / Azure Blob 云平台 云原生备份

四、Snapshot 操作

1️⃣ 注册快照仓库

PUT _snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mnt/es_backup",
    "compress": true
  }
}
  • type: fs, s3, hdfs, gcs, azure
  • location: 文件系统路径或桶名
  • compress: 是否压缩(建议 true)

2️⃣ 创建快照

全量快照(可选指定索引)

PUT _snapshot/my_backup/snapshot_20251220?wait_for_completion=true
{
  "indices": "logstash-*",
  "ignore_unavailable": true,
  "include_global_state": true
}
  • indices: 需要备份的索引(* 表示全部)
  • include_global_state: 是否包含 cluster 元数据
  • 增量备份:ES Snapshot 天然增量(未变 segment 不会重复备份)

3️⃣ 查看快照状态

GET _snapshot/my_backup/_all

4️⃣ 恢复快照

POST _snapshot/my_backup/snapshot_20251220/_restore
{
  "indices": "logstash-*",
  "rename_pattern": "logstash-(.*)",
  "rename_replacement": "restored-logstash-$1",
  "include_global_state": false
}
  • rename_pattern + rename_replacement 用于重命名索引
  • 可选择性恢复某些索引
  • 不影响在线集群(可并行)

五、备份策略

  1. 冷热结合

    • 热数据快照频繁(每天/每 6 小时)
    • 冷数据快照周期长(每周/每月)
  2. 增量 + 全量

    • ES Snapshot 是增量存储
    • 可结合全量周期策略(例如每月一次全量)
  3. 多地冗余

    • S3 + NFS 双存储
    • 避免单点故障
  4. 自动化

    • 使用 ILM + Snapshot Lifecycle Management(SLM)
    • 自动创建、保留和删除快照

六、Snapshot Lifecycle Management(SLM)

  • ES 7.7+ 内置管理
  • 示例策略:每日快照,保留 7 天
PUT _slm/policy/daily-snapshot
{
  "schedule": "0 2 * * *",
  "name": "<daily-snap-{now/d}>",
  "repository": "my_backup",
  "config": {
    "indices": ["logstash-*"],
    "ignore_unavailable": true,
    "include_global_state": false
  },
  "retention": {
    "expire_after": "7d",
    "min_count": 3,
    "max_count": 10
  }
}
  • 自动管理快照周期和清理过期快照

七、其它重点

  1. 为什么不能直接复制 / rsync 数据目录?

    • 因为数据目录在 ES 运行时存在 segment、事务不一致
    • Snapshot 才能保证可恢复性
  2. 快照对性能影响大吗?

    • 小,增量,读 shard 文件,不锁写入
    • 大型集群建议在低峰期
  3. Snapshot 是否是增量备份?

    • ✅ 对 segment 增量备份
    • 每次创建 snapshot 都可以称为全量,但底层存储是增量
  4. SLM 与 Cron 有什么区别?

    • SLM 是 ES 内置策略,能管理快照生命周期、删除过期数据
    • Cron 只是调度,不管理 retention
  5. ES 备份策略如何规划?

    • 热数据:每日快照 -> 保留 7 天
    • 冷数据:每周或每月快照 -> 保留 1 年
    • 多地存储,提高灾备能力

八、生产最佳实践

  1. 使用 对象存储(S3 / MinIO / OSS)跨集群恢复
  2. 使用 SLM 自动管理
  3. 快照定时在低峰时间执行
  4. 结合 冷热分离 ILM -> 热数据频繁快照,冷数据归档快照
  5. 测试恢复流程 -> 灾难恢复演练必做

九、总结

Elasticsearch 备份主要使用 Snapshot 机制,将索引和元数据增量导出到文件系统或对象存储。

Snapshot 是分片级增量备份,不影响在线写入和搜索。

生产中我们会结合 SLM 设置自动快照和过期清理策略,冷热数据分层备份,保证快速恢复和存储成本最优。