概述
官方推荐的ElasticSearch备份方案为Snapshot,对运行中集群做全量 + 增量备份,不影响读写。
Snapshot也就是快照,在某一时间点的集群一致性镜像。其原理为:
- 基于文件系统块级快照:
- 首次快照:复制所有分片数据块。可以理解成首次快照为全量备份
- 后续快照:只复制新增 / 修改的块,共享未变块(节省空间)。可以理解成后续快照就是增量备份。
- 快照存储在独立仓库,与集群数据目录分离。
- 一致性保证:快照过程中,分片数据冻结时间点,新写入不影响已拍快照。
数据存储仓库
ES集群数据备份存储支持以下几种存储类型
| 存储类型 | 适用场景 | 要求 |
|---|---|---|
| 共享文件系统(NFS/NAS/CephFS) | 自建机房、私有云集群 | 所有ES节点必须挂载同一个共享路径,且elasticsearch.yml中配置path.repo允许该路径 |
| 对象存储(S3/OSS/COS/OBS) | 云原生集群、容灾备份 | 安装对应repository插件(如repository-s3/repository-oss) |
| HDFS | 大数据生态集群 | 安装repository-hdfs插件 |
集群备份之NFS存储
节点设计
选3节点中的任意一个闲置节点(生产环境建议使用独立本地服务器)作为NFS存储服务器,另外两个节点通过NFS协议挂载共享目录,实现3节点统一访问备份路径:
| 角色 | IP地址 | 备份路径 | 说明 |
|---|---|---|---|
| NFS服务器(节点1) | 192.168.1.10 | /data00/nfs/es_backup | 本地物理磁盘,作为共享存储源 |
| ES节点2 | 192.168.1.11 | /data00/nfs/es_backup | 挂载节点1的NFS共享目录 |
| ES节点3 | 192.168.1.12 | /data00/nfs/es_backup | 挂载节点1的NFS共享目录 |
备份基础配置
1.1 NFS服务端配置(节点1执行)
# 下载nfs
root@master:~# apt install nfs-kernel-server rpcbind -y
# 创建备份目录
root@master:~# mkdir -p /data00/nfs/es_backup
root@master:~# chown -R elasticsearch:elasticsearch /data00/nfs/es_backup
root@master:~# chmod 777 /data00/nfs/es_backup
# 3. 配置NFS共享规则,允许3节点网段访问
# anongid和anongid为你集群elasticsearch用户的UID和GID,用id elasticsearch命令查看
root@master:~# echo "/data00/nfs/es_backup 10.37.0.0/16(rw,sync,no_root_squash,all_squash,anonuid=2002,anongid=2002,no_subtree_check)" >> /etc/exports
root@master:~# exportfs -ra
root@master:~# systemctl restart nfs-kernel-server
1.2 NFS客户端配置(节点2、3执行)
# 下载nfs
root@node01:~# apt install -y nfs-common
# 创建共享目录,es集群的节点中,路径都需要保持一致
root@node01:~# mkdir -p /data00/nfs/es_backup
root@node01:~# chown elasticsearch:elasticsearch -R /data00/nfs/es_backup
# 挂载
root@node01:~# mount -t nfs 10.37.97.56:/data00/nfs/es_backup /data00/nfs/es_backup
# 验证
root@node01:~# df -h | grep es_backup
# 写一个文件
10.37.97.56:/data00/nfs/es_backup 492G 13G 454G 3% /data00/nfs/es_backup
1.2 NFS客户端配置(节点2、节点3执行)
root@node01:~# apt install -y nfs-common
root@node01:~# mkdir -p /data00/nfs/es_backup
root@node01:~# chown elasticsearch:elasticsearch -R /data00/nfs/es_backup
# 挂载
root@node01:~# mount -t nfs 10.37.97.56:/data00/nfs/es_backup /data00/nfs/es_backup
# 检查
root@node01:~# df -h | grep es_backup
修改ES的配置文件(所有节点执行)
编辑每个节点的config/elasticsearch.yml,添加备份路径白名单:
root@master:~# vim /usr/local/elasticsearch/config/elasticsearch.yml
# 添加以下配置,路径必须和挂载路径完全一致,三个节点的路径必须完全相同,否则快照创建直接失败
path.repo: ["/data00/nfs/es_backup"]
滚动重启所有ES节点
先重启节点2,等待集群状态变绿后再重启节点3,最后重启节点1,保证业务不受影响
检查三个节点的配置是否生效
GET _nodes/settings?pretty
# 查看以下的响应
....
"path" : {
"data" : "/data00/data/elasticsearch",
"logs" : "/var/log/elasticsearch",
"home" : "/usr/local/elasticsearch",
"repo" : [
"/data00/nfs/es_backup"
]
}
....
备份案例实战测试
第一步:创建快照存储库
PUT _snapshot/nfs_es_backup
{
"type": "fs",
"settings": {
"location": "/data00/nfs/es_backup",
"compress": true,
"max_snapshot_bytes_per_sec": "50mb",
"max_restore_bytes_per_sec": "200mb",
"chunk_size": "1gb",
"readonly": false
}
}
# 参数详细解释
local_es_backup:存储库的名称,可指定
location:表示存储路径,和上文es配置文件中配置的保持一致
compress:开启压缩,节省30%-50%本地磁盘空间,生产环境必备优化参数
max_snapshot_bytes_per_sec:备份时的带宽 IO 限速,生产环境必备,不影响业务
max_restore_bytes_per_sec:恢复时的IO限速,恢复一般在非业务时间,所以可以比备份快
chunk_size:大文件分片,避免单个文件过大损坏
readonly:false表示允许写入、创建快照、删除快照,true表示仓库只读,不能写入,不能删除,防止误删备份,极高安全
# 查看存储库
GET /_snapshot
# 返回结果
{
"nfs_es_backup" : {
"type" : "fs",
"settings" : {
"chunk_size" : "1gb",
"location" : "/data00/nfs/es_backup",
"max_restore_bytes_per_sec" : "200mb",
"readonly" : "false",
"compress" : "true",
"max_snapshot_bytes_per_sec" : "50mb"
}
}
}
第二步,创建一个索引进行备份删除恢复测试
# 创建索引
PUT /user
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
# 查看索引是否创建成功
{
"user" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "3",
"provided_name" : "user",
"creation_date" : "1776410155455",
"number_of_replicas" : "1",
"uuid" : "2ezMKqpKTlSWHwMk0vV1Yg",
"version" : {
"created" : "7172699"
}
}
}
}
}
第三步:备份索引
-
单索引备份
执行备份
PUT _snapshot/nfs_es_backup/snapshot_user_test01
{
"indices": "user",
"include_global_state": false
}#参数解释
nfs_es_backup:存储库名称
snapshot_user_test01:快照名称
indices:指定索引名称
include_global_state:备份索引模板、ILM策略、用户权限、安全配置等全局状态,在全局备份时需要开启检查是否备份成功
GET _snapshot/nfs_es_backup/snapshot_user_test01
响应
{
"snapshots" : [
{
"snapshot" : "snapshot_user_test01",
"uuid" : "JM6FcLzLQ6W-uN58A_k6tA",
"repository" : "nfs_es_backup",
"version_id" : 7172699,
"version" : "7.17.26",
"indices" : [ # 索引名称
"user"
],
"data_streams" : [ ],
"include_global_state" : false,
"state" : "SUCCESS", # 状态为成功
"start_time" : "2026-04-17T07:23:33.014Z", #备份开始时间
"start_time_in_millis" : 1776410613014,
"end_time" : "2026-04-17T07:23:33.214Z", # 备份结束时间
"end_time_in_millis" : 1776410613214,
"duration_in_millis" : 200,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
},
"feature_states" : [ ]
}
],
"total" : 1,
"remaining" : 0
}查看一下磁盘中多了哪些内容?
root@master:/data00/nfs/es_backup# ll
total 24
-rw-r--r-- 1 elasticsearch elasticsearch 648 Apr 17 15:23 index-0
-rw-r--r-- 1 elasticsearch elasticsearch 8 Apr 17 15:23 index.latest
drwxr-xr-x 3 elasticsearch elasticsearch 4096 Apr 17 15:23 indices
-rw-r--r-- 1 elasticsearch elasticsearch 202 Apr 17 15:23 meta-JM6FcLzLQ6W-uN58A_k6tA.dat
-rw-r--r-- 1 elasticsearch elasticsearch 315 Apr 17 15:23 snap-JM6FcLzLQ6W-uN58A_k6tA.dat
drwxr-xr-x 2 kibana elasticsearch 4096 Apr 17 15:05 tests-ZXO9W4fjQVacYTs7HPAnzA解释:
index-0:仓库的 "目录清单",记录这个仓库里有哪些快照,记录每个快照的名称、UUID、状态、包含索引,相当于仓库的目录表
index.latest:指向最新的 index-xx 文件,内容只有一个数字:0,ES 用它快速找到当前清单,永远指向最新清单
indices:这是一个目录,真正的数据备份目录,里面存放着所有索引的分片数据、 Lucene 段文件,增量快照也在这里,占空间99% 的就是它,恢复数据时,从这里读取真实数据
meta-xxx.dat:快照元数据文件,记录着索引的 mapping,索引的 settings,集群配置,模板、ILM、SLM 策略,恢复时,ES 先读这个文件,重建结构
snap-xxx.dat:快照本身信息文件,记录着快照开始 / 结束时间,备份了哪些索引,快照状态(SUCCESS/FAILED),分片备份成功数量,ES 通过它判断快照是否有效
tests-xxxxxx:这是仓库验证临时目录,执行 PUT _snapshot 创建仓库时,ES 会自动创建这个目录,写一个测试文件,验证是否可读写,验证成功后不会自动删除,可以手动删除,不影响任何备份 -
全集群备份
PUT _snapshot/nfs_es_backup/snapshot_20260417_full?wait_for_completion=false
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": true,
"partial": false,
"slices": "auto"
}参数解释
nfs_es_backup:表示存储库名称
snapshot_20260417_full:表示快照名称
wait_for_completion=false:是否等待快照执行完成再返回结果,生产环境建议用false,不然大数据量备份会直接卡死 / 超时!
indices:备份所有索引,可指定多个:"order_index,user_index"
ignore_unavailable:忽略不存在的索引,避免备份中断,生产环境建议开启
include_global_state:全集群备份时必须开启!备份索引模板、ILM策略、用户权限、安全配置等全局状态
partial:有分片不可用时直接失败,避免生成不完整的备份,生产环境默认用false
slices:7.3+版本专属:开启并行备份,速度提升2-3倍,生产环境建议用 auto查看备份结果:
GET _snapshot/nfs_es_backup/snapshot_20260417_full
#响应结果
{
"snapshots" : [
{
"snapshot" : "snapshot_20260417_full",
"uuid" : "gjYuTksgRbuCeXNBQLDKmA",
"repository" : "nfs_es_backup",
"version_id" : 7172699,
"version" : "7.17.26",
"indices" : [
".kibana_task_manager_7.17.12_001",
".kibana-event-log-7.17.12-000001",
".tasks",
".ds-.logs-deprecation.elasticsearch-default-2026.04.15-000001",
".apm-agent-configuration",
".apm-custom-link",
".kibana_7.17.12_001",
"test01",
".ds-ilm-history-5-2026.04.15-000001",
"user",
".kibana_security_session_1",
".security-7"
],
"data_streams" : [
"ilm-history-5",
".logs-deprecation.elasticsearch-default"
],
"include_global_state" : true,
"state" : "SUCCESS",
"start_time" : "2026-04-17T07:44:34.973Z",
"start_time_in_millis" : 1776411874973,
"end_time" : "2026-04-17T07:44:35.373Z",
"end_time_in_millis" : 1776411875373,
"duration_in_millis" : 400,
"failures" : [ ],
"shards" : {
"total" : 16,
"failed" : 0,
"successful" : 16
},
"feature_states" : [
{
"feature_name" : "kibana",
"indices" : [
".kibana_7.17.12_001",
".apm-custom-link",
".apm-agent-configuration",
".kibana_security_session_1",
".kibana_task_manager_7.17.12_001"
]
},
{
"feature_name" : "tasks",
"indices" : [
".tasks"
]
},
{
"feature_name" : "security",
"indices" : [
".security-7"
]
}
]
}
],
"total" : 1,
"remaining" : 0
}
第四步:删除索引
# 删除user索引
DELETE /user
# 查看user索引
GET /user
# 响应结果,可以看到索引已经被删除了
{
"error" : {
"root_cause" : [
{
"type" : "index_not_found_exception",
"reason" : "no such index [user]",
"index_uuid" : "_na_",
"resource.type" : "index_or_alias",
"resource.id" : "user",
"index" : "user"
}
],
"type" : "index_not_found_exception",
"reason" : "no such index [user]",
"index_uuid" : "_na_",
"resource.type" : "index_or_alias",
"resource.id" : "user",
"index" : "user"
},
"status" : 404
}
第五步:恢复索引
查看快照列表
# 查看快照列表
GET _snapshot/nfs_es_backup/_all
## 响应结果
{
"snapshots" : [
{
"snapshot" : "snapshot_user_test01",
"uuid" : "JM6FcLzLQ6W-uN58A_k6tA",
"repository" : "nfs_es_backup",
"version_id" : 7172699,
"version" : "7.17.26",
"indices" : [
"user"
],
"data_streams" : [ ],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2026-04-17T07:23:33.014Z",
"start_time_in_millis" : 1776410613014,
"end_time" : "2026-04-17T07:23:33.214Z",
"end_time_in_millis" : 1776410613214,
"duration_in_millis" : 200,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
},
"feature_states" : [ ]
},
{
"snapshot" : "snapshot_20260417_full",
"uuid" : "gjYuTksgRbuCeXNBQLDKmA",
"repository" : "nfs_es_backup",
"version_id" : 7172699,
"version" : "7.17.26",
"indices" : [
".kibana_task_manager_7.17.12_001",
".kibana-event-log-7.17.12-000001",
".tasks",
".ds-.logs-deprecation.elasticsearch-default-2026.04.15-000001",
".apm-agent-configuration",
".apm-custom-link",
".kibana_7.17.12_001",
"test01",
".ds-ilm-history-5-2026.04.15-000001",
"user",
".kibana_security_session_1",
".security-7"
],
"data_streams" : [
"ilm-history-5",
".logs-deprecation.elasticsearch-default"
],
"include_global_state" : true,
"state" : "SUCCESS",
"start_time" : "2026-04-17T07:44:34.973Z",
"start_time_in_millis" : 1776411874973,
"end_time" : "2026-04-17T07:44:35.373Z",
"end_time_in_millis" : 1776411875373,
"duration_in_millis" : 400,
"failures" : [ ],
"shards" : {
"total" : 16,
"failed" : 0,
"successful" : 16
},
"feature_states" : [
{
"feature_name" : "kibana",
"indices" : [
".kibana_7.17.12_001",
".apm-custom-link",
".apm-agent-configuration",
".kibana_security_session_1",
".kibana_task_manager_7.17.12_001"
]
},
{
"feature_name" : "tasks",
"indices" : [
".tasks"
]
},
{
"feature_name" : "security",
"indices" : [
".security-7"
]
}
]
}
],
"total" : 2,
"remaining" : 0
}
单索引恢复
找到我们的快照名称,开始恢复
# 恢复user索引
POST _snapshot/nfs_es_backup/snapshot_user_test01/_restore
{
"indices": "user",
"include_global_state": false
}
# 查看user
GET user
# 响应结果
{
"user" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "3",
"provided_name" : "user",
"creation_date" : "1776410155455",
"number_of_replicas" : "1",
"uuid" : "EdPqsnqgROWfr9K_2FUKTA",
"version" : {
"created" : "7172699"
}
}
}
}
}
全集群恢复:集群故障时使用
POST _snapshot/nfs_es_backup/snapshot_20260417_full/_restore?wait_for_completion=false
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": true,
// 恢复时临时优化提升速度
"index_settings": {
"index.number_of_replicas": 0,
"index.refresh_interval": "-1"
},
// 可选:恢复时重命名索引,避免覆盖现有索引
// "rename_pattern": "(.+)",
// "rename_replacement": "restored_$1"
}
#恢复完成后手动恢复索引配置:
PUT /*/_settings
{
"index.number_of_replicas": 1,
"index.refresh_interval": "1s"
}
集群备份之S3存储
ES 官方原生支持对象存储作为备份存储库,所有操作逻辑和本地NFS备份完全一致,仅存储库配置不同,备份/恢复API 100%复用,无需修改原有备份流程。
S3存储适用于亚马逊AWS S3、MinIO本地对象存储、腾讯云COS、华为云OBS、金山云KS3等所有支持S3协议的对象存储
方案优势
- 无需搭建维护共享存储,容量无限弹性扩容
- 天然多副本冗余,数据可靠性达99.9999%,适合容灾备份
- 单位存储成本比本地磁盘低50%以上
- 支持跨区域复制,实现异地容灾
S3存储配置步骤
插件安装
所有节点需要安装repository-s3插件
-
在线安装
root@master:~# elasticsearch-plugin install repository-s3 --batch
查看
root@node01:~# elasticsearch-plugin list
repository-s3 -
离线安装
先下载对应版本插件包:
官方地址:https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-s3/repository-s3-<你的ES版本>.zip
MinIO兼容无修改,直接用官方包即可
elasticsearch-plugin install file:///本地路径/repository-s3-<版本>.zip --batch
所有节点滚动重启
一个一个节点重启,当一个节点重启完成之后查看集群状态,避免影响业务进行
AK和SK配置
优先选密钥存储到Keystore,避免明文泄露
所有节点执行,把AK/SK存入ES密钥库:
# 输入你的access key
root@node01:~# elasticsearch-keystore add s3.client.default.access_key
Enter value for s3.client.default.access_key:
# 输入你的secret key
root@node01:~# elasticsearch-keystore add s3.client.default.secret_key
Enter value for s3.client.default.secret_key:
# 修改用户组权限
root@node01:~# chown elasticsearch:elasticsearch -R /data00/software/elasticsearch-7.17.26
# 查看
root@node01:~# elasticsearch-keystore show s3.client.default.access_key
<your access key>
root@node01:~# elasticsearch-keystore show s3.client.default.secret_key
<your secret key>
ES中重载密钥库配置(无需重启ES)
POST _nodes/reload_secure_settings
#响应
{
"_nodes" : {
"total" : 3,
"successful" : 3,
"failed" : 0
},
"cluster_name" : "elasticsearch-v7",
"nodes" : {
"fx4zORHiRpKFIqdd1dUg3Q" : {
"name" : "node01"
},
"5Hv3CL3zQpGD69QWlQs0Kg" : {
"name" : "master"
},
"si-N5X65SCSxPafqWOFqoA" : {
"name" : "node02"
}
}
}
备份恢复实战
创建存储库
-
minio创建存储库
PUT _snapshot/minio_backup_repo
{
"type": "s3",
"settings": {
"bucket": "es-backup",
"base_path": "es_backup", # 存储路径
"endpoint": "http://你的MinIO地址:9000", # MinIO服务地址
"access_key": "MinIO的AK", # 如果没用keystore存可以在这里传(不推荐)
"secret_key": "MinIO的SK",
"path_style_access": true, # 必须开启!MinIO强制要求路径风格访问
"compress": true,
"chunk_size": "512mb"
}
} -
亚马逊aws
PUT _snapshot/aws_backup_repo
{
"type": "s3",
"settings": {
"bucket": "你的S3桶名",
"region": "ap-beijing", # 桶所在区域
"base_path": "es_prod_backup", # 桶内备份路径
"compress": true, # 开启压缩节省空间
"max_snapshot_bytes_per_sec": "50mb", # 备份限速
"max_restore_bytes_per_sec": "100mb", # 恢复限速
"chunk_size": "1gb", # 大文件分片
"server_side_encryption": true # 开启服务端加密,满足合规要求
}
} -
腾讯云COS/华为云OBS 等S3兼容存储
和S3配置完全一致,只需要修改endpoint为对应云厂商的S3兼容地址,开启path_style_access: true即可。
备份恢复
备份恢复参考上面NFS的即可,步骤完全一样
阿里云OSS存储配置
阿里云的和普通的S3配置有点区别。
插件安装(阿里云官方维护,必须和ES版本严格一致)
-
在线安装
elasticsearch-plugin install https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v<你的ES版本>/repository-oss-<你的ES版本>.zip
-
离线安装
下载对应版本包:https://github.com/aliyun/elasticsearch-repository-oss/releases,所有节点执行:
bin/elasticsearch-plugin install file:///本地路径/repository-oss-<版本>.zip --batch
所有节点滚动重启集群生效。
安全配置(推荐密钥存Keystore)
所有节点执行:
# 存储OSS AccessKeyId
elasticsearch-keystore add oss.client.default.access_key_id
# 存储OSS AccessKeySecret
elasticsearch-keystore add oss.client.default.secret_access_key
重载密钥库
POST _nodes/reload_secure_settings
创建存储库
PUT _snapshot/oss_backup_repo
{
"type": "oss",
"settings": {
"endpoint": "oss-cn-beijing-internal.aliyuncs.com", # 同区域推荐用内网地址,流量免费速度快
"bucket": "你的OSS桶名",
"base_path": "es_prod_backup", # OSS内备份路径
"compress": true,
"max_snapshot_bytes_per_sec": "100mb", # 阿里云内网速度快可适当调大
"max_restore_bytes_per_sec": "200mb",
"chunk_size": "1gb",
"server_side_encryption": true # 开启OSS服务端加密
}
}
备份恢复和上文完全一致
ES备份之SLM自动备份策略(生产环境推荐)
SLM 是快照生命周期管理,作用是:
- 定时自动创建快照(基于 cron)
- 自动清理旧快照(按时间 / 数量保留)
- 一次配置,长期生效,由 master 节点调度
- 快照是增量的,只备份变化的数据,速度快、节省空间
SLM核心策略为:
- Policy(策略):定义 "何时备、备什么、保留多久"。
- Snapshot(快照):某时间点的索引 / 数据副本,存于仓库。
- Repository(仓库):存储快照的介质(本地 FS / S3 / 火山 TOS / OSS 等)。
- Retention(保留策略):自动删旧快照,避免存储爆满。
创建/更新SLM策略
# 创建/更新 SLM 策略:每天凌晨 2 点备份,保留 30 天,最少 5 份、最多 50 份
PUT _slm/policy/es_daily_backup
{
"schedule": "0 0 2 * * ?", # 定时:每天 02:00(UTC 时间,注意时区换算)
"name": "<snapshot_{now/d}>", # 快照名:snapshot_2026.04.17 自动带日期
"repository": "nfs_es_backup", # 你的 NFS 仓库名(必须已存在)
"config": {
"indices": "*", # 备份所有索引
"ignore_unavailable": true, # 忽略不可用索引(防失败)
"include_global_state": true, # 备份集群全局状态(模板/权限/ILM)
"partial": false, # 不允许部分备份(保证完整)
"slices": "auto" # 自动并行加速
},
"retention": {
"expire_after": "30d", # 快照 30 天后过期
"min_count": 5, # 最少保留 5 份(防止删光)
"max_count": 50 # 最多保留 50 份(防止磁盘爆)
}
}
参数完整解析
-
定时调度 schedule(Cron 表达式)
-
格式:秒 分 时 日 月 周(ES 用 UTC 时间)
示例:"0 0 2 * * ?" → 每天 UTC 02:00 执行(北京时间 10:00)
"0 0 0/12 * * ?" → 每 12 小时一次
"0 30 1 * * ?" → 每天凌晨 1:30(官方默认)
-
-
快照命名 name
- <snapshot_{now/d}> → 自动生成 snapshot_2026.04.17
- 支持变量:{now/d}(日期)、{now/H}(小时)等
-
仓库 repository
- 必须和你已创建的仓库名一致:nfs_es_backup
-
备份配置 config
- indices: *:备份所有索引
- ignore_unavailable: true:跳过已关闭 / 不存在的索引,避免整体失败
- include_global_state: true:备份集群元数据(恢复时不用重配模板 / 权限)
- partial: false:任一主分片异常则快照失败,保证备份完整性
- slices: auto:自动并行,提升备份速度
-
保留策略 retention(生产核心)
- expire_after: "30d":30 天后自动删除旧快照
- min_count: 5:至少保留 5 份,即使超过 30 天(防止删光无备份)
- max_count: 50:最多保留 50 份,防止磁盘溢出
SLM常用运维命令
-
查看所有 SLM 策略
GET _slm/policy
响应结果
{
"es_daily_backup" : {
"version" : 1,
"modified_date_millis" : 1776419066650,
"policy" : {
"name" : "<snapshot_{now/d}>",
"schedule" : "0 0 2 * * ?",
"repository" : "nfs_es_backup",
"config" : {
"include_global_state" : true,
"slices" : "auto",
"indices" : "*",
"ignore_unavailable" : true,
"partial" : false
},
"retention" : {
"expire_after" : "30d",
"min_count" : 5,
"max_count" : 50
}
},
"next_execution_millis" : 1776477600000,
"stats" : {
"policy" : "es_daily_backup",
"snapshots_taken" : 0,
"snapshots_failed" : 0,
"snapshots_deleted" : 0,
"snapshot_deletion_failures" : 0
}
}
} -
立即手动执行一次策略(测试用)
POST _slm/policy/es_daily_backup/_execute
#响应结果
{
"snapshot_name" : "snapshot_2026.04.17-zo_rwr-ms-oymjzvhbpqiw"
} -
查看 SLM 执行历史
GET .slm-history-*/_search
{
"sort": [{"@timestamp": "desc"}],
"size": 10
} -
删除 SLM 策略
DELETE _slm/policy/es_daily_backup
注意事项:
时区注意(极易踩坑)
ES 的 Cron 是 UTC 时间,北京时间 = UTC+8
想北京时间 02:00 备份 → Cron 写 "0 0 18 * * ?"(UTC 18:00)
生产环境使用注意:
每日全量快照:保留 30 天,最少 5 份
恢复测试:每周至少恢复一次快照验证可用性