kill -9或者断电等原因异常,es在重启后,会通过translog来进行数据恢复。
默认的恢复速度是较慢的,可以设置indices.recovery.current_streams:10增大恢复的线程数,还可以设置indices.recovery的其他参数加快恢复的速度。
但是某些情况下,如lucene文件格式错误等,重启es后无法通过自身恢复,可以考虑如下的方式。
1.主分片是正常的,副本分片有错误,且无法通过复制机制恢复。可以考虑删除有问题的分片,集群会通过复制的方式恢复。
2.主分片和副本分片都有错误,备份数据后,可以使用尝试恢复lucene文件。这种方式会删除有问题的段,当段很大时,会丢失很多的文件。
java -cp /opt/software/elasticsearch/lib/lucene-core-5.3.1.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /esdata/estest/0/test/0/index -exorcise
可以使用上面的命令尝试修复,但是一定要先备份数据。
java -cp /opt/software/elasticsearch/lib/lucene-core-5.3.1.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex,回车后会提示使用的方法。
参数/opt/software/elasticsearch/lib/lucene-core-5.3.1.jar是es安装目录lib目录,/esdata/estest/0/test/0/index是有问题的分片所对应的文件目录。
不要删除分片文件夹下的segments_N文件,lucene5.x下该文件不会再重建。删除该文件后使用CheckIndex 也无法恢复。