2014-10-31 2 views
5

디스크 공간이 부족하여 탄성 탐색 파편이 망가졌습니다. 3 개의 노드가 이제 빨간색으로 표시되고 2 개의 노드가 복구되고 상태가 노란색으로 표시됩니다. ES는 CPU에서 150 %, 메모리에서 많이 실행되어 복구를 시도합니다. 그러나 버전 일치가 충돌하는 것처럼 보입니다.충돌 후 탄성 탐침 복구 실패

나는 디스크 공간을 비우고 샤르도모에 대한 translog를 삭제하여 translog에서로드를 중지합니다. 그러나 놀랍게도 translog는 다시 만들어집니다!

translog에서 복구하고 일반 인덱스 작업을 다시 시작하려는 시도를 어떻게 중지시킬 수 있는지 알려주십시오. 샤드 데이터를 삭제하고 싶지 않습니다.

[2014-10-31 03:11:43,742][WARN ][cluster.action.shard  ] [Angela Cairn] [western_europe][4] sending failed shard for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]] 
[2014-10-31 03:11:43,742][WARN ][cluster.action.shard  ] [Angela Cairn] [western_europe][4] received shard failed for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]] 
[2014-10-31 03:11:43,859][WARN ][indices.cluster   ] [Angela Cairn] [western_europe][2] failed to start shard 
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [western_europe][2] failed to recover shard 
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:269) 
    at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132) 
    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.ElasticsearchException: failed to read [tweet][527936245440065536] 
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:511) 
    at org.elasticsearch.index.translog.TranslogStreams.readTranslogOperation(TranslogStreams.java:52) 
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:241) 
    ... 4 more 
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: No version type match [116] 
    at org.elasticsearch.index.VersionType.fromValue(VersionType.java:307) 
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:508) 
+1

번역 엔진에서 데이터를 잃어 버리지 않고 복구 할 수 있다고 생각하지 않습니다. 로그에 지정된 두 조각에서 translog를 삭제하십시오. 색인 western_europe에 대해 shard 4 및 2를 삭제하십시오. –

답변

3

먼저 샤드 자체에는 문제가 없는지 확인하십시오. 이 문제에 대한 파편을 확인합니다, 당신의 파편이 큰 경우 시간이 걸릴 것입니다

java -cp "*" -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER/index/ 

: 행해져 Yout /usr/share/elasticsearch/lib 디렉토리 또는 이에 상응하는, 그래서 같이 루씬의 CheckIndex를 사용하는 cd.

Java 클래스 경로를 잘못 설정하면 필요한 jar 파일이 누락되고 CheckIndex가 오류를 발생시키고 샤드의 모든 세그먼트가 잘못되었다고 주장 할 수 있으므로 신중하게 출력을 읽어야합니다.

는 경우 파편에 문제가있다, 당신은 샤드 를 해결합니다 -fix 인수와 같은 명령을 실행하여 복원 할 다른 방법이 없습니다하지만 당신은 데이터을 잃게됩니다. CheckIndex는 파편에서 몇 개의 문서 (있을 경우)를 잃을 지 경고합니다.

CheckIndex에서 모두 샤드가 잘된 경우 문제가 translog에서만 발생합니다. 트랜잭션 로그는 ElasticSearch가 원 자성을 위해 사용하는 미리 쓰기 로그입니다. 충돌 후 ES는 샤드 인덱스 자체에 아직 플러시되지 않은 쓰기를 포함하여 샤드를 복원하려고 시도합니다. 이들은 translog에 있으므로을 삭제하면 을 잃어 버리게됩니다. 그러나 이것은 샤드를 잃는 것보다 훨씬 낫습니다. 귀하의 경우, translog는 이미 손상된 것처럼 보입니다. 그리고 나는 그것을 복구 할 방법을 모른다.

는 영향을받는 각 노드에 대한 각 관련 파편에 대한 /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER>/translog/ TRANSLOG 파일을 제거 하여 TRANSLOG을 삭제, 손상된 트랜잭션 로그는 복구에 사용되는 제거합니다. 후자의 부분은 클러스터의 번역문을 다른 노드에서 삭제 한 후 다시 생성하려고 시도하는 것을 볼 수 있기 때문에 중요합니다.

일반적으로 완료하는 데 시간이 걸릴 수 있지만 조각은 올바르게 초기화되어야합니다.

+0

고마워요. 이것은 초보자를위한 매우 간단한 체크리스트입니다! – ivspenna