Elasticsearch Snapshot备份与恢复
Elasticsearch文档里对于snapshot有如下描述:
The index snapshot process is incremental. In the process of making the index snapshot Elasticsearch analyses the list of the index files that are already stored in the repository and copies only files that were created or changed since the last snapshot.
这里说snapshot是增量备份的,每次snapshot,Es会分析index文件,并且只备份增量部分。
- snapshot是增量备份,对未发生变化的index重复备份几乎没有资源消耗;
- 删除snapshot不会对其它snapshot产生影响;
- snapshot是增量备份,对未发生变化的index重复备份几乎没有资源消耗
- 删除某个snapshot不会对其它snapshot产生影响。
创建快照仓库
- 在创建快照(snapshot)之前,首先需要创建快照仓库(repository),一个仓库里面可以有多个快照。而创建快照仓库需要在elasticsearch.yml配置仓库地址,配置之后,需要重启ES服务。
在elasticsearch.yml 中添加:
path.repo: ["/usr/share/elasticsearch/data/es_backup_repository"]
- 可以填多个仓库地址,后面添加快照时保存地址必须在下面配置地址之中
path.repo: ["/usr/share/elasticsearch/data/es_backup_repository","/usr/share/elasticsearch/data/data_repository"]
- 创建一个名为es_log_backup的快照仓库
curl -H "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/_snapshot/es_log_backup/' -d '
{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/data/es_backup_repository",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb",
"compress" : true
}
}'
- compress 是否压缩
- max_snapshot_bytes_per_sec 制作快照的速度,默认20mb/s
- max_restore_bytes_per_sec 快照恢复的速度,默认20mb/s
或者在kibana Dev Tools工具中执行如下命令
POST _snapshot/es_log_backup
{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/data/es_backup_repository",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb",
"compress" : true
}
}
响应信息
{
"acknowledged" : true
}
这样就创建了一个仓库地址,之后就可以在这个仓库之后添加快照。
4. 检查注册的仓库信息
GET /_snapshot/es_log_backup
#响应信息
{
"es_log_backup" : {
"type" : "fs",
"settings" : {
"location" : "/usr/share/elasticsearch/data/es_backup_repository",
"max_restore_bytes_per_sec" : "50mb",
"compress" : "true",
"max_snapshot_bytes_per_sec" : "50mb"
}
}
}
或者
curl -XGET http://127.0.0.1:9200/_snapshot/es_log_backup
# 响应信息
{
"es_log_backup" : {
"type" : "fs",
"settings" : {
"location" : "/usr/share/elasticsearch/data/es_backup_repository",
"max_restore_bytes_per_sec" : "50mb",
"compress" : "true",
"max_snapshot_bytes_per_sec" : "50mb"
}
}
}
- 删除仓库
DELETE /_snapshot/es_log_backup
或者
curl -X DELETE http://127.0.0.1:9200/_snapshot/es_log_backup
开始备份
- 指定快照名称为 app-log-20240419
curl -XPUT http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419
执行上面的上面的命令会马上返回,并在后台执行备份操作, 如果想等到备份完成,可以加上参数 wait_for_completion=true
curl -XPUT http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419?wait_for_completion=true
或者
PUT _snapshot/es_log_backup/app-log-20240419
#响应信息
{
"accepted" : true
}
- 默认是备份所有的索引indices, 如果要指定index,可以
curl -H "Content-Type: application/json" -XPUT 'http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/' -d '
{
"indices": "log-gk-app-activity-dev-2024.01.06"
}'
或者
PUT /_snapshot/es_log_backup/app-log-202404192
{
"indices": "log-gk-app-activity-dev-2024.01.06"
}
这个备份过程需要的时间视数据量而定
查看备份状态
- 整个备份过程中,可以通过如下命令查看备份进度
curl -XGET http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/_status
或者
GET /_snapshot/es_log_backup/app-log-20240419/_status
主要由如下几种状态:
- INITIALIZING 集群状态检查,检查当前集群是否可以做快照,通常这个过程会非常快
- STARTED 正在转移数据到仓库
- FINALIZING 数据转移完成,正在转移元信息
- DONE 完成
- FAILED 备份失败
取消备份
curl -XDELETE http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419
或者
DELETE /_snapshot/es_log_backup/app-log-2024041901
恢复备份
- 先备份‘log-gk-data-operate-sit-2024.04.10’索引,再删除该索引,然后利用备份来恢复
#备份
curl -H "Content-Type: application/json" -XPUT 'http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/' -d '
{
"indices": "log-gk-app-activity-dev-2024.01.06"
}'
#或者
PUT /_snapshot/es_log_backup/app-log-20240419
{
"indices": "log-gk-app-activity-dev-2024.01.06"
}
# 删除索引
DELETE log-gk-app-activity-dev-2024.01.06
# 验证是否删除,根据响应信息发现索引已经删除
GET _cat/indices/log-gk-app-activity-dev-2024.01.06
- 恢复备份
curl -XPOST http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/_restore
同备份一样,也可以设置wait_for_completion=true等待恢复结果
curl -XPOST http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/_restore?wait_for_completion=true
或者
POST /_snapshot/es_log_backup/app-log-20240419/_restore
默认情况下,是恢复所有的索引,我们也可以设置一些参数来指定恢复的索引,以及重名恢复的索引,这样可以避免覆盖原有的数据.
curl "Content-Type: application/json" -XPOST 'http://127.0.0.1:9200/_snapshot/es_log_backup/app-log-20240419/_restore/' -d '
{
"indices": "log-gk-app-activity-dev-2024.01.06",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}'
或者
POST /_snapshot/es_log_backup/app-log-20240419/_restore
{
"indices": "log-gk-app-activity-dev-2024.01.06",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}
上面的indices, 表示只恢复索引'log-gk-app-activity-dev-2024.01.06’
rename pattern: 表示重命名索引以’index ‘开头的索引.
rename_replacement: 表示将所有的索引重命名为’restored_index_xxx’.如index_1会被重命名为restored_index_1.
3. 查看恢复进度
查看所有索引的恢复进度
curl -XGET http://127.0.0.1:9200/_recovery/
或者
GET /_recovery/
# 查看索引log-gk-data-operate-sit-2024.04.10的恢复进度
curl -XGET http://127.0.0.1:9200/_recovery/log-gk-app-activity-dev-2024.01.06
或者
GET /_recovery/log-gk-app-activity-dev-2024.01.06
- 验证恢复
GET _cat/indices/log-gk-app-activity-dev-2024.01.06
#响应信息
yellow open log-gk-app-activity-dev-2024.01.06 qGVDiTN3TYS3oVtKNdsfVQ 1 1 2 0 19.9kb 19.9kb
取消恢复
- 只需要删除索引,即可取消恢复
curl -XDELETE http://127.0.0.1:9200/log-gk-app-activity-dev-2024.01.06
或者
DELETE log-gk-app-activity-dev-2024.01.06
评论区