ElasticSearch 快照备份和还原

本文详细介绍了ElasticSearch的快照备份和恢复操作,包括注册快照仓库、创建快照、查看和删除快照、以及如何进行部分还原和恢复到不同集群。强调了版本兼容性问题,指出在不同版本间恢复需谨慎,可能需要通过reindex-from-remote重建索引。此外,还讨论了快照和恢复过程中的各种状态、监控和取消操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


ES提供快照和恢复功能,我们可以在远程文件系统仓库(比如共享文件系统、S3、HDFS等)中单独给部分索引或者整个集群创建快照。这些快照对备份非常有用,它们能相对较快地被恢复。但是,快照只能被恢复到可以读取他们的ES版本中:

  • 在5.x创建的索引的快照可以被恢复到6.x;
  • 在2.x创建的索引的快照可以被恢复到5.x;
  • 在1.x创建的索引的快照可以被恢复到2.x;

相反,在1.x中创建的索引快照不能被恢复到5.x或者6.x,在2.x中创建的索引快照不能被恢复到6.x中。

快照是增量的,可以包含在多个ES版本中创建的索引。如果在一个快照中的任何索引时在不兼容的ES版本中创建的,你将不能恢复该快照。

在升级前备份数据的时候,如果快照中的索引是在与你升级版本不兼容的ES版本中创建的,那么这些快照将不能被恢复。

如果你的情况是需要恢复一个与你当前运行的集群版本不兼容的索引快照,你可以先恢复到最新的兼容版本中,然后在当前版本中使用 reindex-from-remote 重建索引。远程Reindexing只能在源索引source为enabled的情况下进行。获取并重建数据索引的时间可能比简单恢复快照要长的多。如果你的数据量较大,建议先用一部分数据测试远程reindex,以便了解需要花费的时间。

Repositories

必须先注册一个快照仓库,然后才能进行快照和恢复操作。建议为每个主版本创建一个新快照仓库。有效的仓库设置取决于仓库类型。

如果多个集群注册同一个快照仓库,只有一个集群可以对仓库进行写访问,其他所有集群应该设置该仓库为 readonly 模式。

跨主版本时快照格式可能会改变,所以不同版本的集群写同一个快照仓库,某个版本写的快照可能对其他版本不可见,仓库快照也存在问题。ES不支持仓库对所有集群设置为readonly,其中一个集群和不同主版本的多个集群一起工作。

1. 注册创建快照仓库

curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "my_backup_location"
  }
}
'

2. 查看已注册快照仓库

curl -X GET "localhost:9200/_snapshot/my_backup"

可以使用逗号间隔多个仓库,星号通配符匹配仓库名字,下面示例返回仓库名以repo开头的和包含backup的仓库信息

curl -X GET "localhost:9200/_snapshot/repo*,*backup*"

获取所有已注册快照仓库,省略仓库名或者使用_all

curl -X GET "localhost:9200/_snapshot"

或者

curl -X GET "localhost:9200/_snapshot/_all"

3. 查看快照仓库列表

# curl -X GET "10.17.4.200:9200/_cat/repositories?v"
id                   type
elasticsearch_backup   fs
test                   fs

4. Shared File System Repository

共享文件系统仓库(“type”: “fs”)使用共享文件系统存快照,如果要注册共享文件系统仓库,必须在所有master和data节点挂载相同的共享文件系统到同一个路径位置。这个路径位置(或者它的一个父目录)必须在所有master和data节点的path.repo设置上注册。

假设共享文件系统挂载到 /mount/backups/my_fs_backup_location,应该在elasticsearch.yml文件中添加如下配置:

path.repo: ["/mount/backups", "/mount/longterm_backups"]

The path.repo setting supports Microsoft Windows UNC paths as long as at least server name and share are specified as a prefix and back slashes are properly escaped:

path.repo: ["\\\\MY_SERVER\\Snapshots"]

所有节点启动之后,执行下面的命令注册名字为my_fs_backup的共享文件系统仓库:

curl -X PUT "localhost:9200/_snapshot/my_fs_backup" -H 'Content-Type: application/json' -d'
{
    "type": "fs",
    "settings": {
        "location": "/mount/backups/my_fs_backup_location",
        "compress&#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值