Elasticsearch经常用来存储数据,如果你在里面存储了重要的数据,那么就需要进行备份,然后在出现问题的时候需要进行还原。
管理repositories
Elasticsearch提供了一个内置的系统来快速备份和恢复您的数据。 在使用实时数据时,保持备份是复杂的,因为会有大量的并发问题。
Elasticsearch快照允许将单个索引(或别名)或整个集群的快照创建到远程存储库中。在开始执行快照之前,必须创建存储库 – 这是您的备份/快照将被存储的位置。
我们需要编辑config/elasticsearch.yml文件增加备份存储库的位置,比如:path.repo: /tmp/,在这个例子中我们使用/tmp目录来作为存储库的位置,然后我们
创建一个名为my_repository的存储库:
curl -XPUT 'http://localhost:9200/_snapshot/my_repository' -d ' { "type": "fs", "settings": { "location": "/tmp/my_repository", "compress": true } }'
创建成功返回结果:
{"acknowledged":true}
如果你检查你的文件系统的话,会发现/tmp/my_repository目录已经被创建
我们可以通过下面的方式来回去仓库的一些信息:
curl -XGET 'http://localhost:9200/_snapshot/my_repository' 返回结果为: { "my_repository": { "type": "fs", "settings": { "compress": "true", "location": "/tmp/my_repository" } } }
也可以使用下面的方式获取所有仓库的信息
curl -XGET 'http://localhost:9200/_snapshot'
如果想删除这个仓库,那么可以使用:
curl -XDELETE 'http://localhost:9200/_snapshot/my_repository'
返回结果为:
{"acknowledged":true}
管理snapshot
假设我们想为test-index和test-2这两个索引创建一个快照snap_1,那我们可以使用下面的方式:
curl -XPUT "http://localhost:9200/_snapshot/my_repository/snap_1? wait_for_completion=true" -d ' { "indices": "test-index,test-2", "ignore_unavailable": "true", "include_global_state": false }'
执行以后,如果你去检查/tmp/my_repository目录的话,下面会新增一些数据文件。
为了获取快照的相关信息,可以使用:
curl -XGET 'http://localhost:9200/_snapshot/my_repository/snap_1?pretty'
如果想删除快照的话,可以使用
curl -XDELETE 'http://localhost:9200/_snapshot/my_repository/snap_1'
如果想查看所有的索引快照的话,可以使用:
curl -XGET 'http://localhost:9200/_snapshot/my_repository/_all'
另外快照的处理过程可以被监控:
curl -XGET "http://localhost:9200/_snapshot/my_repository/snap_1/_status?pretty"
从快照进行数据还原
curl -XPOST "http://localhost:9200/_snapshot/my_repository/snap_1/_restore? pretty" -d ' { "indices": "test-index,test-2", "ignore_unavailable": "true", "include_global_state": false, "rename_pattern": "test-(.+)", "rename_replacement": "copy_$1" }'
Reindexing from a remote cluster
快照和恢复API执行的非常快,并且是备份数据的首选方式,但它们有一些限制,例如:
- 备份是一个安全的Lucene索引副本,所以这取决于使用的Elasticsearch版本。 如果您从版本5.x之前的Elastisearch版本切换,则无法恢复旧索引。
- 不可能在旧版本中恢复更新的Elasticsearch版本的备份。 恢复只能向前兼容。
- 不可能从备份恢复部分数据。
为了能够在这种情况下复制数据,解决方案是使用远程服务器使用reindex API。
为了能够从远程服务器上复制数据,我们需要在config/elasticsearch.yml文件中增加远程服务器的地址:
reindex.remote.whitelist: ["192.168.1.227:9200"]
然后重启Elasticsearch,然后我们就可以执行api调用了:
curl -XPOST "http://localhost:9200/_reindex" -d '{ "source": { "remote": { "host": "http://192.168.1.227:9200" }, "index": "test-source" }, "dest": { "index": "test-dest" } }'
参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/5.0/modules-snapshots.html