ElasticSearch 数据备份
内容:快照机制、冷/热备份、S3/HDFS/NFS、全量/增量、恢复策略。
Elasticsearch 备份不是直接复制数据目录,而是使用 Snapshot(快照)机制。
- Snapshot:将索引数据和元数据导出到 可持久化存储(如 NFS、S3、HDFS)
- Restore:从 Snapshot 恢复索引
特点:
- 可跨集群恢复
- 支持全量和增量
- 对集群在线操作影响小
- 冷备热备可结合
-
Elasticsearch 分片级快照
- 每个 shard 的 segment 文件被检查点记录
- 使用 增量方式:已有 segment 不会重复备份
-
Snapshot 只读操作
- 不影响集群写入和搜索
- 只占用少量 CPU 和 IO
-
元数据快照
- 包括 mapping、settings、alias 等
- 用于恢复索引结构
| 类型 | 说明 | 场景 |
|---|---|---|
| NFS / 本地共享目录 | 文件系统 | 小型集群,局域网 |
| AWS S3 / MinIO / OSS | 对象存储 | 公有云 / 跨地域 |
| HDFS | Hadoop 集群 | 大数据生态 |
| GCS / Azure Blob | 云平台 | 云原生备份 |
PUT _snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mnt/es_backup",
"compress": true
}
}
- type: fs, s3, hdfs, gcs, azure
- location: 文件系统路径或桶名
- compress: 是否压缩(建议 true)
全量快照(可选指定索引)
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 不会重复备份)
GET _snapshot/my_backup/_all
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 用于重命名索引
- 可选择性恢复某些索引
- 不影响在线集群(可并行)
-
冷热结合
- 热数据快照频繁(每天/每 6 小时)
- 冷数据快照周期长(每周/每月)
-
增量 + 全量
- ES Snapshot 是增量存储
- 可结合全量周期策略(例如每月一次全量)
-
多地冗余
- S3 + NFS 双存储
- 避免单点故障
-
自动化
- 使用 ILM + 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
}
}
- 自动管理快照周期和清理过期快照
-
为什么不能直接复制 / rsync 数据目录?
- 因为数据目录在 ES 运行时存在 segment、事务不一致
- Snapshot 才能保证可恢复性
-
快照对性能影响大吗?
- 小,增量,读 shard 文件,不锁写入
- 大型集群建议在低峰期
-
Snapshot 是否是增量备份?
- ✅ 对 segment 增量备份
- 每次创建 snapshot 都可以称为全量,但底层存储是增量
-
SLM 与 Cron 有什么区别?
- SLM 是 ES 内置策略,能管理快照生命周期、删除过期数据
- Cron 只是调度,不管理 retention
-
ES 备份策略如何规划?
- 热数据:每日快照 -> 保留 7 天
- 冷数据:每周或每月快照 -> 保留 1 年
- 多地存储,提高灾备能力
- 使用 对象存储(S3 / MinIO / OSS)跨集群恢复
- 使用 SLM 自动管理
- 快照定时在低峰时间执行
- 结合 冷热分离 ILM -> 热数据频繁快照,冷数据归档快照
- 测试恢复流程 -> 灾难恢复演练必做
Elasticsearch 备份主要使用 Snapshot 机制,将索引和元数据增量导出到文件系统或对象存储。
Snapshot 是分片级增量备份,不影响在线写入和搜索。
生产中我们会结合 SLM 设置自动快照和过期清理策略,冷热数据分层备份,保证快速恢复和存储成本最优。