我必须将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
}
答案 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索引传输到我的本地计算机。我决定对索引进行快照,然后尝试在本地计算机上将其还原。
我假设您已经有快照
步骤是:
在本地计算机上使用要还原的快照创建目录
导航到elasticsearch.yml
文件。例如,在我的本地计算机上,您可以在这里找到文件:/usr/local/Cellar/elasticsearch/7.8.1/libexec/config/elasticsearch.yml
在path.repo: [PATH_TO_BACKUP_DIR]
文件上添加存储库路径:elasticsearch.yml
。例如:path.repo: ["/mount/backups", "/mount/longterm_backups"]
保存,退出并重新启动Elasticsearch
重新启动所有节点后,可以使用以下命令注册名称为my_fs_backup
的共享文件系统存储库
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”:是 } }'
检查您的配置:curl -X GET "localhost:9200/_snapshot/_all?pretty"
从快照还原:
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
}
例如:
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个索引 users
和events
希望有帮助?
更多信息和扩展教程: Elastic website,jee-appy blogspot