Elasticsearch备份与恢复 #

一、快照概述 #

1.1 快照特点 #

text
快照特点
├── 增量备份
│   └── 只备份变更数据
├── 一致性
│   └── 保证数据一致性
├── 可恢复
│   └── 恢复到任意快照点
└── 跨集群
    └── 支持跨集群复制

1.2 快照流程 #

text
快照流程
├── 1. 注册仓库
├── 2. 创建快照
├── 3. 验证快照
├── 4. 恢复快照
└── 5. 验证恢复

二、注册仓库 #

2.1 共享文件系统仓库 #

bash
PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup",
    "compress": true
  }
}

2.2 S3仓库 #

bash
PUT /_snapshot/s3_backup
{
  "type": "s3",
  "settings": {
    "bucket": "my-elasticsearch-backups",
    "region": "us-east-1",
    "base_path": "snapshots",
    "compress": true
  }
}

2.3 Azure仓库 #

bash
PUT /_snapshot/azure_backup
{
  "type": "azure",
  "settings": {
    "container": "backup-container",
    "base_path": "snapshots"
  }
}

2.4 GCS仓库 #

bash
PUT /_snapshot/gcs_backup
{
  "type": "gcs",
  "settings": {
    "bucket": "my-elasticsearch-backups",
    "base_path": "snapshots"
  }
}

2.5 查看仓库 #

bash
GET /_snapshot

GET /_snapshot/my_backup

2.6 验证仓库 #

bash
POST /_snapshot/my_backup/_verify

2.7 删除仓库 #

bash
DELETE /_snapshot/my_backup

三、创建快照 #

3.1 创建所有索引快照 #

bash
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

3.2 创建指定索引快照 #

bash
PUT /_snapshot/my_backup/snapshot_2
{
  "indices": "products,orders",
  "ignore_unavailable": true,
  "include_global_state": false
}

3.3 快照参数 #

参数 说明
indices 索引列表
ignore_unavailable 忽略不存在的索引
include_global_state 包含集群状态
partial 允许部分快照
wait_for_completion 等待完成

3.4 查看快照 #

bash
GET /_snapshot/my_backup/snapshot_1

GET /_snapshot/my_backup/_all

3.5 查看快照状态 #

bash
GET /_snapshot/my_backup/snapshot_1/_status

GET /_snapshot/my_backup/_status

3.6 取消快照 #

bash
DELETE /_snapshot/my_backup/snapshot_1

四、恢复快照 #

4.1 恢复所有索引 #

bash
POST /_snapshot/my_backup/snapshot_1/_restore

4.2 恢复指定索引 #

bash
POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "products",
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "(.+)",
  "rename_replacement": "restored_$1"
}

4.3 恢复参数 #

参数 说明
indices 索引列表
ignore_unavailable 忽略不存在的索引
include_global_state 包含集群状态
rename_pattern 重命名模式
rename_replacement 重命名替换
include_aliases 包含别名

4.4 查看恢复状态 #

bash
GET /_recovery

GET /products/_recovery

4.5 取消恢复 #

bash
DELETE /restored_products

五、快照生命周期管理 #

5.1 使用ILM管理快照 #

bash
PUT /_ilm/policy/snapshot_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb",
            "max_age": "1d"
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

5.2 使用Slm(Snapshot Lifecycle Management) #

bash
PUT /_slm/policy/nightly-snapshots
{
  "schedule": "0 30 1 * * ?",
  "name": "<nightly-snap-{now/d}>",
  "repository": "my_backup",
  "config": {
    "indices": ["*"],
    "ignore_unavailable": true,
    "include_global_state": false
  },
  "retention": {
    "expire_after": "30d",
    "min_count": 5,
    "max_count": 50
  }
}

5.3 执行SLM策略 #

bash
POST /_slm/policy/nightly-snapshots/_execute

5.4 查看SLM状态 #

bash
GET /_slm/policy

GET /_slm/status

六、跨集群复制 #

6.1 配置远程集群 #

bash
PUT /_cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "remote_cluster": {
          "seeds": ["remote_host:9300"]
        }
      }
    }
  }
}

6.2 创建复制 #

bash
PUT /_ccr/auto_follow/my_pattern
{
  "remote_cluster": "remote_cluster",
  "leader_index_patterns": ["products*"],
  "follow_index_pattern": "{{leader_index}}_follower"
}

6.3 查看复制状态 #

bash
GET /_ccr/stats

GET /_ccr/info

6.4 暂停/恢复复制 #

bash
POST /products_follower/_ccr/pause_follow

POST /products_follower/_ccr/resume_follow

七、备份策略 #

7.1 备份频率 #

text
备份频率建议
├── 全量备份
│   └── 每周一次
├── 增量备份
│   └── 每天一次
├── 关键数据
│   └── 每小时一次
└── 配置备份
    └── 每次变更后

7.2 保留策略 #

text
保留策略
├── 每日快照
│   └── 保留7天
├── 每周快照
│   └── 保留4周
├── 每月快照
│   └── 保留12月
└── 年度快照
    └── 保留3年

7.3 存储位置 #

text
存储建议
├── 本地存储
│   └── 快速恢复
├── 云存储
│   └── 异地容灾
└── 多副本
    └── 多地存储

八、恢复测试 #

8.1 定期测试 #

text
恢复测试
├── 每月测试
│   └── 验证快照可用性
├── 恢复演练
│   └── 模拟故障恢复
└── 文档记录
    └── 记录恢复步骤

8.2 恢复验证 #

bash
GET /restored_products/_count

GET /restored_products/_search
{
  "query": { "match_all": {} }
}

九、最佳实践 #

9.1 备份建议 #

text
备份建议
├── 自动化
│   └── 使用SLM自动备份
├── 多地存储
│   └── 异地容灾
├── 定期测试
│   └── 验证可恢复性
└── 监控告警
    └── 备份失败告警

9.2 恢复建议 #

text
恢复建议
├── 先验证快照
│   └── 检查快照完整性
├── 使用重命名
│   └── 避免覆盖现有数据
├── 分批恢复
│   └── 大索引分批处理
└── 验证数据
    └── 恢复后验证数据

十、总结 #

本章介绍了Elasticsearch备份与恢复:

  1. 快照是增量备份,节省空间
  2. 支持多种存储后端
  3. SLM自动化快照管理
  4. 跨集群复制实现数据同步
  5. 定期测试验证可恢复性
  6. 多地存储实现容灾

下一步,我们将学习性能优化。

最后更新:2026-03-27