es数据备份

文章目录


前言

es数据备份


Elasticsearch 数据备份完整指南

根据我们的实际操作,以下是你成功配置的 ES 单节点备份方案。


一、环境信息

项目
ES 节点 IP 192.168.0.110
ES 版本 9.2.6
集群名称 bztc-elasticsearch
备份目录 /home/elasticsearch/es-back
仓库名称 es_backup_repo

二、配置步骤(已完成)

1. 修改 ES 配置

编辑 /etc/elasticsearch/elasticsearch.yml,添加:

yaml 复制代码
path.repo: ["/home/elasticsearch/es-back"]

重启 ES:

bash 复制代码
sudo systemctl restart elasticsearch

2. 设置目录权限

bash 复制代码
sudo chown -R elasticsearch:elasticsearch /home/elasticsearch/es-back
sudo chmod 755 /home/elasticsearch/es-back

3. 注册快照仓库

bash 复制代码
curl -X PUT "http://192.168.0.110:9200/_snapshot/es_backup_repo" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "/home/elasticsearch/es-back",
    "compress": true
  }
}'

4. 验证仓库

bash 复制代码
curl -X POST "http://192.168.0.110:9200/_snapshot/es_backup_repo/_verify"

三、手动创建快照

备份所有 bztc_cloud_* 开头的索引(推荐)

bash 复制代码
curl -X PUT "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423" -H 'Content-Type: application/json' -d'
{
  "indices": "bztc_cloud_*",
  "ignore_unavailable": true,
  "include_global_state": false
}'

备份指定索引

bash 复制代码
curl -X PUT "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423" -H 'Content-Type: application/json' -d'
{
  "indices": "index1,index2,index3",
  "ignore_unavailable": true,
  "include_global_state": false
}'

等待备份完成

?wait_for_completion=true 参数会等待直到备份完成:

bash 复制代码
curl -X PUT "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423?wait_for_completion=true" -H 'Content-Type: application/json' -d'
{
  "indices": "bztc_cloud_*",
  "ignore_unavailable": true,
  "include_global_state": false
}'

四、设置每天凌晨1点自动备份

bash 复制代码
curl -X PUT "http://192.168.0.110:9200/_slm/policy/daily_backup" -H 'Content-Type: application/json' -d'
{
  "schedule": "0 0 1 * * ?",
  "name": "<daily-backup-{now/d}>",
  "repository": "es_backup_repo",
  "config": {
    "indices": ["bztc_cloud_*"],
    "ignore_unavailable": true,
    "include_global_state": false
  },
  "retention": {
    "expire_after": "30d",
    "min_count": 7,
    "max_count": 50
  }
}'

策略说明

参数 含义
schedule 0 0 1 * * ? 每天凌晨1点执行
indices ["bztc_cloud_*"] 备份所有以 bztc_cloud_ 开头的索引
expire_after 30d 30天后自动删除
min_count 7 至少保留7个快照
max_count 50 最多保留50个快照

自动备份生成的文件命名规则

复制代码
daily-backup-2026.04.23
daily-backup-2026.04.24
daily-backup-2026.04.25
...

五、常用管理命令

查看操作

bash 复制代码
# 查看所有快照
curl -X GET "http://192.168.0.110:9200/_snapshot/es_backup_repo/_all"

# 查看指定快照详情
curl -X GET "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423"

# 查看自动备份策略
curl -X GET "http://192.168.0.110:9200/_slm/policy/daily_backup"

# 查看策略执行统计
curl -X GET "http://192.168.0.110:9200/_slm/stats"

# 查看索引列表
curl -X GET "http://192.168.0.110:9200/_cat/indices?v"

手动操作

bash 复制代码
# 手动执行自动备份策略(测试用)
curl -X POST "http://192.168.0.110:9200/_slm/policy/daily_backup/_execute"

# 删除快照
curl -X DELETE "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423"

# 暂停自动备份
curl -X POST "http://192.168.0.110:9200/_slm/policy/daily_backup/_stop"

# 恢复自动备份
curl -X POST "http://192.168.0.110:9200/_slm/policy/daily_backup/_start"

# 删除备份策略
curl -X DELETE "http://192.168.0.110:9200/_slm/policy/daily_backup"

六、恢复数据

恢复所有备份的索引

bash 复制代码
curl -X POST "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423/_restore"

恢复指定索引

bash 复制代码
curl -X POST "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "bztc_cloud_qa_record",
  "ignore_unavailable": true
}'

恢复到临时索引(用于查看内容)

bash 复制代码
curl -X POST "http://192.168.0.110:9200/_snapshot/es_backup_repo/snapshot_20260423/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "bztc_cloud_qa_record",
  "rename_pattern": "(.+)",
  "rename_replacement": "restored_$1",
  "include_global_state": false
}'

查看恢复后的数据

bash 复制代码
# 查看文档数量
curl -X GET "http://192.168.0.110:9200/restored_bztc_cloud_qa_record/_count"

# 查看前10条文档
curl -X GET "http://192.168.0.110:9200/restored_bztc_cloud_qa_record/_search?pretty&size=10"

删除临时索引

bash 复制代码
curl -X DELETE "http://192.168.0.110:9200/restored_bztc_cloud_qa_record"

七、查看备份文件

bash 复制代码
# 查看备份目录
ls -lh /home/elasticsearch/es-back/

# 输出示例:
# index-0              # 索引文件
# index.latest         # 最新索引指针
# indices/             # 各索引的分片目录
# meta-xxx.dat         # 元数据文件
# snap-xxx.dat         # 快照数据文件

八、重要概念说明

1. 增量备份

  • 第一次快照:全量备份
  • 后续快照:只备份变化的部分(增量)
  • 恢复时只需最新的快照即可恢复全部数据

2. 快照保留策略

  • 快照会保留 30 天
  • 30 天前的快照被自动删除
  • 至少保留 7 个,最多保留 50 个

3. 恢复时选择哪个快照?

  • 使用最新的快照(日期最大的)即可恢复全部数据
  • 不需要逐个恢复中间的快照
  • 但中间的快照不能被删除(否则增量链会断)

4. 查看快照包含的内容

快照是物理备份,不能直接查看文档内容。需要:

  1. 恢复到临时索引
  2. _search API 查看
  3. 查看完后删除临时索引

九、添加新索引到备份

由于使用了通配符 bztc_cloud_*,任何以 bztc_cloud_ 开头的新索引都会被自动备份,无需修改配置。

例如以下索引会自动被备份:

  • bztc_cloud_user_log
  • bztc_cloud_order_info
  • bztc_cloud_new_feature

十、验证备份成功

成功标志:

  • 快照状态为 "state":"SUCCESS"
  • "shards":{"total":N,"failed":0,"successful":N}
  • 备份目录下生成文件

实际成功示例:

json 复制代码
{
  "snapshot": {
    "snapshot": "snapshot_20260423",
    "state": "SUCCESS",
    "shards": {"total": 6, "failed": 0, "successful": 6}
  }
}

十一、注意事项

  1. _verify 接口必须使用 POST 方法(全大写)
  2. 快照命名:手动创建用固定名称,自动策略用带日期的动态名称
  3. 恢复时如果索引已存在,需要先删除或使用 rename_pattern 重命名
  4. 通配符 bztc_cloud_* 只匹配该前缀的索引,不会备份系统索引

Elasticsearch 自动备份定时任务执行问题总结

一、问题现象

设置每天凌晨1点自动备份,但实际没有在预期时间执行。

二、根本原因

Elasticsearch 的 SLM(快照生命周期管理)使用的 Cron 表达式基于 UTC 时区,不支持修改时区。

  • UTC 时间凌晨 1 点 = 北京时间上午 9 点
  • 所以设置 "schedule": "0 0 1 * * ?" 会在北京时间上午 9 点执行,而不是凌晨 1 点

三、检查步骤

1. 检查 SLM 服务状态

bash 复制代码
curl -X GET "http://192.168.0.110:9200/_slm/status"
  • "operation_mode":"RUNNING" 表示正常运行
  • 如果返回 "STOPPED",执行 curl -X POST "http://192.168.0.110:9200/_slm/start" 启动

2. 查看策略详情和执行历史

bash 复制代码
curl -X GET "http://192.168.0.110:9200/_slm/policy/daily_backup"

关键返回字段:

字段 说明
last_success 上次成功执行的信息(含快照名称、时间)
next_execution_millis 下次计划执行的时间戳
snapshots_taken 已创建的快照数量
snapshots_failed 失败数量

3. 查看执行统计

bash 复制代码
curl -X GET "http://192.168.0.110:9200/_slm/stats"

4. 查看所有快照

bash 复制代码
curl -X GET "http://192.168.0.110:9200/_snapshot/es_backup_repo/_all"

四、解决方案

方案一:接受 UTC 时间(不修改)

  • 保持现有配置 "schedule": "0 0 1 * * ?"
  • 备份会在北京时间上午 9 点执行
  • 无需任何修改

方案二:转换为北京时间凌晨1点执行(推荐)

由于 ES 不支持改时区,通过计算时间差实现:

  • 北京时间凌晨 1 点 = UTC 时间前一天的 17 点
  • 设置 Cron 表达式为 "0 0 17 * * ?"
bash 复制代码
# 删除旧策略
curl -X DELETE "http://192.168.0.110:9200/_slm/policy/daily_backup"

# 重新创建,使用 UTC 17:00(北京时间次日 01:00)
curl -X PUT "http://192.168.0.110:9200/_slm/policy/daily_backup" -H 'Content-Type: application/json' -d'
{
  "schedule": "0 0 17 * * ?",
  "name": "<daily-backup-{now/d}>",
  "repository": "es_backup_repo",
  "config": {
    "indices": ["bztc_cloud_*"],
    "ignore_unavailable": true,
    "include_global_state": false
  },
  "retention": {
    "expire_after": "30d",
    "min_count": 7,
    "max_count": 50
  }
}'

五、时间对照表

目标执行时间(北京时间) 需设置的 UTC Cron
凌晨 00:00 0 0 16 * * ?
凌晨 01:00 0 0 17 * * ?
凌晨 02:00 0 0 18 * * ?
凌晨 03:00 0 0 19 * * ?
凌晨 04:00 0 0 20 * * ?
凌晨 05:00 0 0 21 * * ?
凌晨 06:00 0 0 22 * * ?
上午 09:00 0 0 1 * * ?(当前配置)

六、验证修改结果

bash 复制代码
# 查看策略,确认下次执行时间
curl -X GET "http://192.168.0.110:9200/_slm/policy/daily_backup"

# 手动执行一次测试
curl -X POST "http://192.168.0.110:9200/_slm/policy/daily_backup/_execute"

七、重要原则

  1. ES 的 Cron 调度统一使用 UTC 时区,无法修改
  2. 业务预期时间需通过转换对应的 UTC 时间来实现
  3. 存储的时间字段(如 @timestamp)也以 UTC 存储,查询时由 Kibana 等工具自动转换显示
  4. 如需更复杂的时区调度(如按美国时间执行),建议使用 Logstash 的调度插件(支持时区参数)

八、常见问题排查表

问题 可能原因 解决方法
策略不执行 SLM 服务未启动 _slm/start
时间不对 时区误解 按 UTC 重新计算
执行失败 仓库不可用 _verify 验证仓库
快照未生成 策略配置错误 检查 config.indices 是否正确
第二天没看到新快照 检查 next_execution_millis 确认时间是否已过

总结

相关推荐
IT研究所25 分钟前
AI 时代下的知识管理:从 Claude 的“复盘”能力看生成式 AI价值
大数据·运维·数据库·人工智能·科技·低代码·自然语言处理
云边云科技_云网融合1 小时前
企业出海的 “数字丝绸之路“:SD-WAN 如何重构全球网络竞争力
大数据·运维·网络·人工智能
JZC_xiaozhong1 小时前
2026年深圳企业如何统一管理ERP、MES、OA权限?身份识别与访问管理高效方案
大数据·运维·自动化·企业数据安全·数据集成与应用集成·权限治理·多系统权限管理
189228048612 小时前
NV243美光MT29F32T08GWLBHD6-24QJES:B
大数据·服务器·人工智能·科技·缓存
2601_958548482 小时前
利川避暑民宿舒适化运营:客流增长策略深度解析
大数据
明明跟你说过2 小时前
Kafka 与 Elasticsearch 的集成应用案例深度解析
大数据·elk·elasticsearch·kafka·big data·bigdata
拾-光2 小时前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
醉颜凉2 小时前
Elasticsearch 实战:数据自动化清理完全指南(ILM + 定时删除 + 最佳实践)
elasticsearch·自动化·jenkins
2301_816997882 小时前
性能调优(基于 Elasticsearch 8.x)
大数据·elasticsearch·搜索引擎
易知微EasyV数据可视化3 小时前
数序重构・智启新生|袋鼠云发布Data+AI智能飞轮战略,2026春季发布会圆满落幕
大数据·人工智能·经验分享·数字孪生·空间智能