大多数 ElasticSearch 文档都讨论了通过 REST API 处理索引 - 有什么理由我不能简单地从磁盘上移动或删除索引文件夹?
2 回答
您可以在磁盘上移动数据到一个点 -
如果 Elasticsearch 正在运行,那么移动或删除索引文件夹绝不是一个好主意,因为 Elasticsearch 不会知道数据发生了什么,并且FileNotFoundExceptions
在您手动之前,您会在日志中获得各种红色的索引删除它们。
如果 Elasticsearch 没有运行,您可以将索引文件夹移动到另一个节点(例如,如果您永久停用某个节点并需要关闭数据),但是,如果删除或将文件夹移动到 Elasticsearch 看不到的地方当服务重新启动时,Elasticsearch 将不高兴。这是因为 Elasticsearch 将所谓的集群状态写入磁盘,并且在此集群状态下记录索引,因此如果 ES 启动并期望找到索引“foo”,但您删除了“foo”索引目录,该索引将保持红色状态,直到通过 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 会停止对索引的所有访问。然后我发送一个命令来删除索引(以及磁盘上的所有相应文件)。