elasticsearch-shard
编辑elasticsearch-shard编辑
在某些情况下,分片副本的 Lucene 索引或事务日志可能会损坏。如果无法自动恢复或从备份还原分片的完好副本,则可以使用 elasticsearch-shard
命令删除分片中已损坏的部分。
运行 elasticsearch-shard
时,您将丢失已损坏的数据。只有在无法从分片的另一个副本恢复或还原快照时,才应将此工具用作最后的手段。
概要编辑
bin/elasticsearch-shard remove-corrupted-data ([--index <Index>] [--shard-id <ShardId>] | [--dir <IndexPath>]) [--truncate-clean-translog] [-E <KeyValuePair>] [-h, --help] ([-s, --silent] | [-v, --verbose])
描述编辑
当 Elasticsearch 检测到分片数据已损坏时,它会使该分片副本失败并拒绝使用它。在正常情况下,分片会从另一个副本自动恢复。如果没有可用的分片完好副本,并且您无法从快照还原,则可以使用 elasticsearch-shard
删除已损坏的数据并恢复对未受影响段中任何剩余数据的访问。
在运行 elasticsearch-shard
之前停止 Elasticsearch。
要删除已损坏的分片数据,请使用 remove-corrupted-data
子命令。
有两种方法可以指定路径
- 使用
--index
和--shard-id
选项指定索引名称和分片名称。 - 使用
--dir
选项指定已损坏的索引或事务日志文件的完整路径。
JVM 选项编辑
CLI 工具使用 64MB 的堆运行。对于大多数工具来说,此值是可以的。但是,如果需要,可以通过设置 CLI_JAVA_OPTS
环境变量来覆盖此值。例如,以下内容将 elasticsearch-shard
工具使用的堆大小增加到 1GB。
export CLI_JAVA_OPTS="-Xmx1g" bin/elasticsearch-shard ...
删除已损坏的数据编辑
elasticsearch-shard
分析分片副本并提供找到的损坏的概述。要继续,您必须确认要删除已损坏的数据。
在运行 elasticsearch-shard
之前备份您的数据。这是一个破坏性操作,会从分片中删除已损坏的数据。
$ bin/elasticsearch-shard remove-corrupted-data --index my-index-000001 --shard-id 0 WARNING: Elasticsearch MUST be stopped before running this tool. Please make a complete backup of your index before using this tool. Opening Lucene index at /var/lib/elasticsearchdata/indices/P45vf_YQRhqjfwLMUvSqDw/0/index/ >> Lucene index is corrupted at /var/lib/elasticsearchdata/indices/P45vf_YQRhqjfwLMUvSqDw/0/index/ Opening translog at /var/lib/elasticsearchdata/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/ >> Translog is clean at /var/lib/elasticsearchdata/indices/P45vf_YQRhqjfwLMUvSqDw/0/translog/ Corrupted Lucene index segments found - 32 documents will be lost. WARNING: YOU WILL LOSE DATA. Continue and remove docs from the index ? Y WARNING: 1 broken segments (containing 32 documents) detected Took 0.056 sec total. Writing... OK Wrote new segments file "segments_c" Marking index with the new history uuid : 0pIBd9VTSOeMfzYT6p0AsA Changing allocation id V8QXk-QXSZinZMT-NvEq4w to tjm9Ve6uTBewVFAlfUMWjA You should run the following command to allocate this shard: POST /_cluster/reroute?metric=none { "commands" : [ { "allocate_stale_primary" : { "index" : "index42", "shard" : 0, "node" : "II47uXW2QvqzHBnMcl2o_Q", "accept_data_loss" : false } } ] } You must accept the possibility of data loss by changing the `accept_data_loss` parameter to `true`. Deleted corrupt marker corrupted_FzTSBSuxT7i3Tls_TgwEag from /var/lib/elasticsearchdata/indices/P45vf_YQRhqjfwLMUvSqDw/0/index/
当您使用 elasticsearch-shard
删除已损坏的数据时,分片的分配 ID 会发生变化。重新启动节点后,您必须使用 集群重新路由 API 告诉 Elasticsearch 使用新的 ID。 elasticsearch-shard
命令显示您需要提交的请求。
您还可以使用 -h
选项获取 elasticsearch-shard
工具支持的所有选项和参数的列表。
最后,您可以使用 --truncate-clean-translog
选项截断分片的 translog,即使它看起来没有损坏。