按索引文件夹备份、删除、恢复 Elasticsearch 索引

Backing up, Deleting, Restoring Elasticsearch Indexes By Index Folder

大部分 ElasticSearch 文档都讨论了通过 REST 使用索引 API - 有什么原因我不能简单地从磁盘移动或删除索引文件夹吗?

您可以在磁盘上移动数据到某个点 -

如果 Elasticsearch 是 运行,移动或删除索引绝不是一个好主意 文件夹,因为 Elasticsearch 不知道数据发生了什么,而你 将在日志和索引中获得各种 FileNotFoundExceptions 在您手动删除它们之前,它们是红色的。

如果 Elasticsearch 不是 运行,您可以将索引文件夹移动到另一个节点(例如 例如,如果您要永久停用一个节点并且需要获得 数据关闭),但是,如果删除或将文件夹移动到 重启服务后Elasticsearch看不到,然后Elasticsearch 会不开心。这是因为 Elasticsearch 编写了所谓的 集群状态到磁盘,并且在这个集群状态中记录索引,所以如果 ES 启动并期望找到索引 "foo",但你已经删除了 "foo" index 目录,索引会一直保持红色状态,直到被删除 REST API.

因此,如果您想移动或删除个人,我建议您 从磁盘索引文件夹,尽可能使用 REST API,因为它是 如果你删除了它期望的文件夹,可能会使 ES 进入不愉快的状态 在.

中查找索引

编辑:我应该提到复制(用于备份)索引文件夹是安全的, 从Elasticsearch的角度来看,因为它不修改内容 文件夹。有时人们这样做是为了在快照之外执行备份 & 恢复 API.

我使用这个过程:我关闭、备份,然后删除索引。

curl -XPOST "http://127.0.0.1:9200/*index_name*/_close"

此后所有索引数据都在磁盘上并处于一致状态,并且无法写入。我复制存放索引的目录,然后删除:

curl -XPOST "http://127.0.0.1:9200/*index_name*/_delete"

通过关闭索引,elasticsearch 停止对索引的所有访问。然后我发送命令删除索引(以及磁盘上所有相应的文件)。