repository_missing_exception快照并在Elasticsearch中恢复

时间:2016-05-14 21:58:56

标签: elasticsearch snapshot

我必须将Windows机器上的Elasticsearch索引传输到Ubuntu机器。我决定拍摄索引的快照,然后尝试在另一个系统上恢复它。

我成功地能够在Windows机器上对索引进行快照。 在elasticsearch.yml的Windows计算机上,我有path.repo: ["F:\\mount\\backups"]

所以,在mount下我有:

.
└── backups
    └── old_backup
        ├── index
        ├── indices
        │   └── old_index
        │       ├── 0
        │       ├── 1
        │       ├── 2
        │       ├── 3
        │       ├── 4
        │       └── meta-snapshot_to_ubuntu.dat
        ├── meta-snapshot_to_ubuntu.dat
        └── snap-snapshot_to_ubuntu.dat

其中snapshot_to_ubuntu是我在Windows上制作的快照的名称。

我将此快照放在ubuntu计算机上的~/Documents/mount中,并在path.repo: ["/home/animesh/Documents/mount/backups"]中使用elasticsearch.yml启动ES 2.3.0的实例。

我在命令行上运行以下命令:

curl -XGET localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu?pretty=1

并获取

{
  "error" : {
    "root_cause" : [ {
      "type" : "repository_missing_exception",
      "reason" : "[old_backup] missing"
    } ],
    "type" : "repository_missing_exception",
    "reason" : "[old_backup] missing"
  },
  "status" : 404
}

我哪里错了?

更新

我运行了以下curl命令:

curl -X POST http://localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu/_restore

我得到了:

{
  "error": {
    "root_cause": [
      {
        "type": "repository_missing_exception",
        "reason": "[old_backup] missing"
      }
    ],
    "type": "repository_missing_exception",
    "reason": "[old_backup] missing"
  },
  "status": 404
}

3 个答案:

答案 0 :(得分:0)

curl -XGET localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu?pretty=1

该命令创建快照。因为你没有在ubuntu端创建一个存储库,所以你会收到错误。

你想要的是恢复,所以你应该使用_restore端点:

POST /_snapshot/old_backup/snapshot_to_ubuntu/_restore

检查:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/modules-snapshots.html#_restore

答案 1 :(得分:0)

注意:此解决方案使用的存储库存储稍有不同,但是预期行为是相同的!

我知道这是一个僵尸问题,但是在使用Azure Repository插件测试ElasticSnapshots的还原过程时,我目前对此感到迷惑。

我在旧的PAAS Openstack上创建了快照,并尝试在新的Azure Elastic群集上进行还原,在此之前,我曾测试过Azure存储库的连接性。在我的情况下,我仍然有“存储库位置”:

{
  "type": "azure",
  "settings": {
    "container": "restore",
    "chunk_size": "32MB",
    "compress": true
  }
}

但是恢复总是让我缺少存储库异常:

{
 "error" : {
  "root_cause" : [
   {
    "type" : "repository_missing_exception",
    "reason" : "[restore] missing"
   }
  ],
  "type" : "repository_missing_exception",
  "reason" : "[restore] missing"
 },
 "status" : 404
}

结果是在我的测试Azure k8s群集上部署了另一个分支,该分支删除了Azure存储库插件,并与之建立了连接。甚至恢复插件也无助于修复missing_repository_exception

认真地重新阅读文档(https://www.elastic.co/guide/en/elasticsearch/reference/7.9/snapshots-register-repository.html)给了我这个:

您可以使用删除快照存储库API取消注册存储库。 取消注册存储库后,Elasticsearch仅删除对该存储库存储快照的位置的引用。快照本身保持不变并保留在适当位置。

所以在我的情况下解决missing_repository_exception的问题是“有点吓人”:

DELETE /_snapshot/restore

,然后使用以下方法重新创建快照位置:

PUT https://localhost:9200/_snapshot/restore --data '
 {
   "type": "azure",
   "settings": {
     "container": "restore",
     "chunk_size": "32MB",
     "compress": true
   }
 }'

然后,先前失败的快照还原命令成功:

 POST https://localhost:9200/_snapshot/restore/snapshot_2020810/_restore
 {"accepted":true}

答案 2 :(得分:0)

我遇到了类似的问题,我想与您分享我的解决方法。 我将写下所有步骤,希望它也可以对其他人有所帮助。

我必须将GCP服务器上的Elasticsearch索引传输到我的本地计算机。我决定对索引进行快照,然后尝试在本地计算机上将其还原。

我假设您已经有快照

步骤是:

  1. 在本地计算机上使用要还原的快照创建目录

  2. 导航到elasticsearch.yml文件。例如,在我的本地计算机上,您可以在这里找到文件:/usr/local/Cellar/elasticsearch/7.8.1/libexec/config/elasticsearch.yml

  3. path.repo: [PATH_TO_BACKUP_DIR]文件上添加存储库路径:elasticsearch.yml。例如:path.repo: ["/mount/backups", "/mount/longterm_backups"]

  4. 保存,退出并重新启动Elasticsearch

  5. 重新启动所有节点后,可以使用以下命令注册名称为my_fs_backup的共享文件系统存储库

  6. curl -X PUT“ localhost:9200 / _snapshot / my_fs_backup?pretty” -H'内容类型:application / json'-d' { “ type”:“ fs”, “设置”:{ “ location”:“ PATH_TO_BACKUP_DIR”,//示例:location“:” / usr / local / etc / elasticsearch / elastic-backup“ “ compress”:是 } }'

  7. 检查您的配置:curl -X GET "localhost:9200/_snapshot/_all?pretty"

  8. 从快照还原:

    8.1 获取所有快照: curl -X GET "localhost:9200/_snapshot/my_fs_backup/*?pretty

您将获得以下屏幕: enter image description here

选择所需的快照(如果有多个快照)

使用此命令恢复:

curl -X POST "localhost:9200/_snapshot/BACKUP_NAME/SNAPSHOT_ID/_restore?pretty" -H 'Content-Type: application/json' -d'
       {
        "indices": "users, events",
        "ignore_unavailable": true,
        "include_global_state": true
       }

例如:

 curl -X POST "localhost:9200/_snapshot/my_fs_backup/elastic-snapshot-2020.09.05-lwul1zb9qaorq0k9vmd5rq/_restore?pretty" -H 'Content-Type: application/json' -d'
{
    "indices": "users, events",
    "ignore_unavailable": true,
    "include_global_state": true
 }

请注意,我仅导入了2个索引 usersevents

希望有帮助?

更多信息和扩展教程: Elastic websitejee-appy blogspot