快照备份
快照是增量的:索引的每个快照只存储不属于早期快照的数据。这使您能够以最少的开销拍摄频繁的快照
配置仓库地址
创建文件夹用作Elasticsearch备份仓库:
赋权限
在elasticsearch.yml文件中增加path.repo路径配置:
重启elasticsearch
创建仓库
my_backup
:仓库名称
type
:指定仓库的类型是一个共享文件系统
localhost
:指定已挂载的设备作为仓库地址
max_snapshot_bytes_per_sec
:当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认每秒 20mb
max_restore_bytes_per_sec
:当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认每秒 20mb
。
快照所有打开的索引
快照所有打开的索引到my_backup
仓库中,快照的名称为snapshot_1
,这个调用会立刻返回,然后快照会在后台运行
这个会阻塞调用直到快照完成。注意大型快照会花很长时间才返回
快照指定索引
这个快照命令只会备份索引名称为index1
和 index2
了
查询快照信息
返回my_backup
仓库下snapshot_2
索引的详细信息
要获取一个仓库中所有快照的完整列表,使用 _all
占位符替换掉具体的快照名称:
删除快照
删除my_backup
仓库下名称为snapshot_2
的快照
查看快照进度
如果你调用这个命令的时候快照还在进行中,你会看到它什么时候开始,运行了多久等等信息。不过要注意,这个 API 用的是快照机制相同的线程池。如果你在快照非常大的分片,状态更新的间隔会很大,因为 API 在竞争相同的线程池资源。
推荐使用使用_status
查看快照进度,_status
API 立刻返回,然后给出详细的多的统计值输出。
分片可以在不同的完成状态:
INITIALIZING
:分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的。STARTED
:数据正在被传输到仓库。FINALIZING
:数据传输完成;分片现在在发送快照元数据。DONE
:快照完成!FAILED
:快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。
取消快照
这个会中断快照进程。然后删除仓库里进行到一半的快照。
快照恢复
默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1
包括五个索引,这五个都会被恢复到我们集群里。和 snapshot
API 一样,我们也可以选择希望恢复具体哪个索引。
还有附加的选项用来重命名索引。这个选项允许你通过模式匹配索引名称,然后通过恢复进程提供一个新名称。如果你想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称
和快照类似, restore
命令也会立刻返回,恢复进程会在后台进行。如果你更希望你的 HTTP 调用阻塞直到恢复完成,添加 wait_for_completion
标记
监控恢复操作
查看restored_index_3
索引的恢复情况
{
"restored_justin_xiao" : {
"shards" : [
{
"id" : 1,
"type" : "SNAPSHOT",
"stage" : "DONE",
"primary" : true,
"start_time_in_millis" : 1637254668568,
"stop_time_in_millis" : 1637254668746,
"total_time_in_millis" : 178,
"source" : {
"repository" : "my_backup",
"snapshot" : "snapshot_1",
"version" : "7.9.0",
"index" : "justin_xiao",
"restoreUUID" : "6BCjfB81RFqNs7l3clRZpw"
},
"target" : {
"id" : "4D7R303OScSbFvoolxityw",
"host" : "127.0.0.1",
"transport_address" : "127.0.0.1:9300",
"ip" : "127.0.0.1",
"name" : "DESKTOP-VUKL4GD"
},
"index" : {
"size" : {
"total_in_bytes" : 6591,
"reused_in_bytes" : 0,
"recovered_in_bytes" : 6591,
"percent" : "100.0%"
},
"files" : {
"total" : 4,
"reused" : 0,
"recovered" : 4,
"percent" : "100.0%"
},
"total_time_in_millis" : 118,
"source_throttle_time_in_millis" : 0,
"target_throttle_time_in_millis" : 0
},
"translog" : {
"recovered" : 0,
"total" : 0,
"percent" : "100.0%",
"total_on_start" : 0,
"total_time_in_millis" : 41
},
"verify_index" : {
"check_index_time_in_millis" : 0,
"total_time_in_millis" : 0
}
},
{
"id" : 2,
"type" : "SNAPSHOT",
"stage" : "DONE",
"primary" : true,
"start_time_in_millis" : 1637254668585,
"stop_time_in_millis" : 1637254668854,
"total_time_in_millis" : 268,
"source" : {
"repository" : "my_backup",
"snapshot" : "snapshot_1",
"version" : "7.9.0",
"index" : "justin_xiao",
"restoreUUID" : "6BCjfB81RFqNs7l3clRZpw"
},
"target" : {
"id" : "4D7R303OScSbFvoolxityw",
"host" : "127.0.0.1",
"transport_address" : "127.0.0.1:9300",
"ip" : "127.0.0.1",
"name" : "DESKTOP-VUKL4GD"
},
"index" : {
"size" : {
"total_in_bytes" : 12616,
"reused_in_bytes" : 0,
"recovered_in_bytes" : 12616,
"percent" : "100.0%"
},
"files" : {
"total" : 7,
"reused" : 0,
"recovered" : 7,
"percent" : "100.0%"
},
"total_time_in_millis" : 191,
"source_throttle_time_in_millis" : 0,
"target_throttle_time_in_millis" : 0
},
"translog" : {
"recovered" : 0,
"total" : 0,
"percent" : "100.0%",
"total_on_start" : 0,
"total_time_in_millis" : 42
},
"verify_index" : {
"check_index_time_in_millis" : 0,
"total_time_in_millis" : 0
}
},
{
"id" : 0,
"type" : "SNAPSHOT",
"stage" : "DONE",
"primary" : true,
"start_time_in_millis" : 1637254668615,
"stop_time_in_millis" : 1637254668746,
"total_time_in_millis" : 131,
"source" : {
"repository" : "my_backup",
"snapshot" : "snapshot_1",
"version" : "7.9.0",
"index" : "justin_xiao",
"restoreUUID" : "6BCjfB81RFqNs7l3clRZpw"
},
"target" : {
"id" : "4D7R303OScSbFvoolxityw",
"host" : "127.0.0.1",
"transport_address" : "127.0.0.1:9300",
"ip" : "127.0.0.1",
"name" : "DESKTOP-VUKL4GD"
},
"index" : {
"size" : {
"total_in_bytes" : 208,
"reused_in_bytes" : 0,
"recovered_in_bytes" : 208,
"percent" : "100.0%"
},
"files" : {
"total" : 1,
"reused" : 0,
"recovered" : 1,
"percent" : "100.0%"
},
"total_time_in_millis" : 64,
"source_throttle_time_in_millis" : 0,
"target_throttle_time_in_millis" : 0
},
"translog" : {
"recovered" : 0,
"total" : 0,
"percent" : "100.0%",
"total_on_start" : 0,
"total_time_in_millis" : 36
},
"verify_index" : {
"check_index_time_in_millis" : 0,
"total_time_in_millis" : 0
}
}
]
}
}
type
:字段告诉你恢复的类型;SNAPSHOT
表示这个分片是在从一个快照恢复。
source
:描述了作为恢复来源的特定快照和仓库。
percent
:恢复进度
取消一个快照恢复
要取消一个恢复,你需要删除正在恢复的索引。因为恢复进程其实就是分片恢复,发送一个 删除索引
API 修改集群状态,就可以停止恢复进程。如果 restored_index_3
索引正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据。
var code = “53aa3209-8eb6-4ae1-ae55-890363724e6b”
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?