我收到此错误,在我的ES日志中我使用了三个节点。
Caused by: java.lang.ArrayIndexOutOfBoundsException
[2014-09-08 13:53:56,167][WARN ][cluster.action.shard ] [Dancing Destroyer] [events][3] sending failed shard for [events][3], node[RDZy21y7SRep7n6oWT8ogg], [P], s[INITIALIZING], indexUUID [gzj1aHTnQX6XDc0SxkvxDQ], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[events][3] failed recovery]; nested: FlushFailedEngineException[[events][3] Flush failed]; nested: ArrayIndexOutOfBoundsException; ]]
[2014-09-08 13:53:56,357][WARN ][indices.cluster ] [Dancing Destroyer] [events][3] failed to start shard
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [events][3] failed recovery
at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:185)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.elasticsearch.index.engine.FlushFailedEngineException: [events][3] Flush failed
at org.elasticsearch.index.engine.internal.InternalEngine.flush(InternalEngine.java:805)
at org.elasticsearch.index.shard.service.InternalIndexShard.performRecoveryFinalization(InternalIndexShard.java:726)
at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:249)
at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
... 3 more
Caused by: java.lang.ArrayIndexOutOfBoundsException
[2014-09-08 13:53:56,381][WARN ][cluster.action.shard ] [Dancing Destroyer] [events][3] sending failed shard for [events][3], node[RDZy21y7SRep7n6oWT8ogg], [P], s[INITIALIZING], indexUUID [gzj1aHTnQX6XDc0SxkvxDQ], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[events][3] failed recovery]; nested: FlushFailedEngineException[[events][3] Flush failed]; nested: ArrayIndexOutOfBoundsException; ]]
这意味着ES的状态为红色,我丢失了近1000万份文档。 这个错误意味着什么,以便我能够恢复?
答案 0 :(得分:12)
似乎我有一个混乱的碎片,需要修复。 这是Lucene的事情,你告诉Lucene修复碎片。
对于Ubuntu,解决方案是转到/usr/share/elasticsearch/lib
目录并找出正在运行的Lucene核心版本(运行ls
将显示一个名为lucene-core-4.8的文件。 1.jar)然后键入:
java -cp lucene-core-x.x.x.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<clustername>/nodes/0/indices/<index>/<shard>/index/ -fix
将x.x.x替换为Lucene核心版本,将您的clustername,索引替换为索引名称,当然还有失败的分片编号。
这可能会丢失文件
但它解决了我们的问题。
答案 1 :(得分:6)
我多次遇到这个问题。由于我的设置是阅读点击流数据(每天12-20M点击),我无法承受数据丢失。
所以这是我的解决方案,它运行得很漂亮:
<强>解决方案强>:
问题根本原因
由于各种原因,碎片失败,尤其是当碎片无法满足Kibana请求时。
Lucene与此流程没有直接关系。因此,当存在问题时,elasticsearch无法有效地从存储在segments中的Lucene段引用中选择分片值.gen
Lucene在下次运行中再次将此值设置为新值。因此,elasticsearch能够正确地引用这些值。并且碎片问题已解决。
答案 2 :(得分:2)
从Repox获取提示。在Centos 6.5中,在使用Chef。
配置的logstash中内置了ElasticSearch java -cp /opt/logstash/forwarder/vendor/jar/elasticsearch-1.1.1/lib/lucene-core-4.7.2.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /opt/logstash/forwarder/data/elasticsearch/nodes/0/indices/logstash-2014.11.01/3/index/ -fix
但即使修复我仍然看到无法启动分片,消息...无法恢复分片。我必须使用例如curator delete --older-than 3
破坏性地删除。