在 Elasticsearch 中存储库_missing_exception 快照和还原

Ani*_*dey 6 snapshot elasticsearch

我必须将 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
Run Code Online (Sandbox Code Playgroud)

snapshot_to_ubuntu我在 Windows 上制作的快照的名称在哪里。

我将此快照~/Documents/mount放在 ubuntu 机器上,并使用path.repo: ["/home/animesh/Documents/mount/backups"]in启动了一个 ES 2.3.0 实例elasticsearch.yml

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

curl -XGET localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu?pretty=1
Run Code Online (Sandbox Code Playgroud)

并得到

{
  "error" : {
    "root_cause" : [ {
      "type" : "repository_missing_exception",
      "reason" : "[old_backup] missing"
    } ],
    "type" : "repository_missing_exception",
    "reason" : "[old_backup] missing"
  },
  "status" : 404
}
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

更新

我运行了以下 curl 命令:

curl -X POST http://localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu/_restore
Run Code Online (Sandbox Code Playgroud)

我得到:

{
  "error": {
    "root_cause": [
      {
        "type": "repository_missing_exception",
        "reason": "[old_backup] missing"
      }
    ],
    "type": "repository_missing_exception",
    "reason": "[old_backup] missing"
  },
  "status": 404
}
Run Code Online (Sandbox Code Playgroud)

Adi*_*rya 5

我遇到了类似的问题,我想与您分享我是如何解决的。我会把所有的步骤写下来,希望对其他人也有帮助。

我必须将 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”,“settings”:{“location”:“PATH_TO_BACKUP_DIR” , // 示例: location" : "/usr/local/etc/elasticsearch/elastic-backup" "compress": true } }'

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

  8. 从快照恢复:

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

您将看到这个屏幕: 在此输入图像描述

选择您想要的快照(如果您有多个快照)

使用此命令进行恢复:

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
       }
Run Code Online (Sandbox Code Playgroud)

例如:

 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
 }
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你

更多信息和扩展教程: Elastic website , jee-appy blogspot


alp*_*ert -1

curl -XGET localhost:9200/_snapshot/old_backup/snapshot_to_ubuntu?pretty=1
Run Code Online (Sandbox Code Playgroud)

该命令创建快照。因为您没有在 ubuntu 端创建存储库,所以会出现错误。

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

POST /_snapshot/old_backup/snapshot_to_ubuntu/_restore
Run Code Online (Sandbox Code Playgroud)

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

  • 我更新了问题。“恢复”给了我同样的错误 (4认同)