--- title: "相同目标的恢复已注册并等待中 - 如何解决此 Elasticsearch 异常" date: 2026-01-12 lastmod: 2026-01-12 description: "当 Elasticsearch 尝试恢复分片时发现相同分片的恢复进程已在进行中,会出现此错误。通常由网络故障或节点故障导致。" tags: ["Elasticsearch异常", "分片恢复", "集群管理", "节点故障"] summary: "版本: 6.8-7.15 简而言之,当 Elasticsearch 尝试恢复分片时发现相同分片的恢复进程已在进行中,就会出现此错误。这可能是由于网络故障或节点故障造成的。要解决此问题,您可以尝试以下方法:1) 重启 Elasticsearch 节点,这可能有助于重置恢复进程。2) 检查集群运行状况,确保所有节点都正确连接。3) 如果错误仍然存在,您可能需要使用集群 reroute API 手动重新路由分片。 日志上下文 # 日志"recovery with same target already registered; waiting for"的类名是 PeerRecoverySourceService.java. 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: */ synchronized TupleaddNewRecovery(StartRecoveryRequest request; IndexShard shard) { for (RecoverySourceHandler existingHandler : recoveryHandlers.keySet()) { if (existingHandler.getRequest().targetAllocationId().equals(request.targetAllocationId())) { throw new DelayRecoveryException("recovery with same target already registered; waiting for " + "previous recovery attempt to be cancelled or completed"); } } final Tuplehandlers = createRecoverySourceHandler(request; shard); recoveryHandlers." --- > **版本:** 6.8-7.15 简而言之,当 Elasticsearch 尝试恢复分片时发现相同分片的恢复进程已在进行中,就会出现此错误。这可能是由于网络故障或节点故障造成的。要解决此问题,您可以尝试以下方法:1) 重启 Elasticsearch 节点,这可能有助于重置恢复进程。2) 检查集群运行状况,确保所有节点都正确连接。3) 如果错误仍然存在,您可能需要使用集群 reroute API 手动重新路由分片。 日志上下文 ----------- 日志"recovery with same target already registered; waiting for"的类名是 [PeerRecoverySourceService.java.](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考: ```java */ synchronized TupleaddNewRecovery(StartRecoveryRequest request; IndexShard shard) { for (RecoverySourceHandler existingHandler : recoveryHandlers.keySet()) { if (existingHandler.getRequest().targetAllocationId().equals(request.targetAllocationId())) { throw new DelayRecoveryException("recovery with same target already registered; waiting for " + "previous recovery attempt to be cancelled or completed"); } } final Tuplehandlers = createRecoverySourceHandler(request; shard); recoveryHandlers.put(handlers.v1(); handlers.v2()); ```