侧边栏壁纸
博主头像
运维匠-运维工程师知识分享经验和最佳实践博主等级

生活百般滋味,人生需要笑对

  • 累计撰写 60 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Elasticsearch Snapshot备份与恢复

已删除用户
2024-04-23 / 0 评论 / 0 点赞 / 97 阅读 / 8362 字
温馨提示:
本文最后更新于 2024-05-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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产生影响。

创建快照仓库

  1. 在创建快照(snapshot)之前,首先需要创建快照仓库(repository),一个仓库里面可以有多个快照。而创建快照仓库需要在elasticsearch.yml配置仓库地址,配置之后,需要重启ES服务。
在elasticsearch.yml 中添加:
path.repo: ["/usr/share/elasticsearch/data/es_backup_repository"]
  1. 可以填多个仓库地址,后面添加快照时保存地址必须在下面配置地址之中
path.repo: ["/usr/share/elasticsearch/data/es_backup_repository","/usr/share/elasticsearch/data/data_repository"]
  1. 创建一个名为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"
    }
  }
}
  1. 删除仓库
DELETE /_snapshot/es_log_backup

或者

curl -X DELETE http://127.0.0.1:9200/_snapshot/es_log_backup

开始备份

  1. 指定快照名称为 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
}
  1. 默认是备份所有的索引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"
}

这个备份过程需要的时间视数据量而定

查看备份状态

  1. 整个备份过程中,可以通过如下命令查看备份进度
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

恢复备份

  1. 先备份‘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
  1. 恢复备份
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
  1. 验证恢复
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

取消恢复

  1. 只需要删除索引,即可取消恢复
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
0

评论区