为什么大型存储库推送复制会失败

耶胡达哈达
2023-01-22 11:07

请注意:尽管本文讨论的是与推送复制相关的问题,但同样的故障排除建议也适用于以下情况复制,您的目标服务器将是从中提取数据的服务器,而您的源服务器将是提取工件的服务器。

在开始调试此类问题之前,您需要了解复制机制是如何工作的。当通过cron或手动触发存储库复制时,Artifactory将首先查询目标存储库的完整信息文件列表。这是一个XML包含整个存储库内容的文件。使用这些信息,Artifactory然后确定哪些文件应该复制,哪些应该删除(后者,假设您已经启用了同步删除选项)。

如果您的目标存储库包含大量文件(例如,一个巨大的文件列表),或者您的源存储库缺少大量需要复制的文件,则可能会出现故障。原因是目标Artifactory返回流中的文件列表,Artifactory动态检查每个条目,以检查文件是否丢失以及是否需要复制或删除。

了解了复制过程的功能以及触发故障的原因后,您现在可以更好地进行以下操作调查你所面对的失败的真正原因。我们会建议两个场景你可能会注意到:

注意:除了下面提到的参数之外,在这两个场景中,我们将增加复制设置中配置的套接字超时,以匹配我们将配置的超时值。

1.您的源Artifactory直接与目标Artifactory服务器通信,而不使用中间的反向代理或负载平衡器

在这种情况下,问题很可能与嵌入式Tomcat超时。发生的情况是,您的源Artifactory开始复制工件,而不是在此期间从流中读取。当这种情况发生时,在目标服务器上触发配置的超时设置并关闭连接,因为没有数据流。您可以通过以下方式解决此问题增加超时值。的Artifactory连接器部分中添加以下参数$ ART_HOME / tomcat / conf / server.xml文件:

connectionTimeout = " > <秒"

我们建议从a开始高价值的数字设置(例如,3小时)和监控之后的复制。你的观察结果会让你知道减少还是增加这个设置是最好的。

2.源Artifactory与目标Artifactory之间使用反向代理或负载平衡器进行通信

这种情况有点复杂,因为您需要这样做确定正是你们的联系闭合复位

  • 在目标服务器和负载平衡器/反向代理之间
  • 在反向代理和源服务器之间
要确定你的连接在哪里被关闭和重置,你首先要看看你的目标中的人工服务器请求日志。如果流在目标服务器和反向代理/负载平衡器之间中断,您将看到连接复位错误artifactory.log也没有文件列表请求进入request.log文件。
如果,然而,你在请求日志文件中找到与文件列表请求匹配的条目,那么您的问题很可能发生了之间的反向代理/负载平衡器和源服务器。否则,此问题类似于场景# 1同样的解决方案应该解决这个问题。
如果在目标服务器的request.log文件,您需要使用以下命令从目标存储库手动获取文件列表REST API运行此命令后,您将收到整个流,然后需要检查尺寸这个文件和比较它到从反向代理/负载平衡器连接返回的大小。换句话说,您将检查反向代理是否传输了整个文件列表或仅传输了其中的一部分。例如,在下面的Nginx中可以看到这些信息access.log文件(返回的请求大小用红色标记): ip = 10.132.0.27 user = "admin" local_time = "23/Apr/2019:12:12:46 +0000" host = 10.132.0.27 request = "GET /artifactory/api/storage/generic-local/? "list&deep=1& listfolders =1& mdtimestamp =1& statstimestamps =1& inclerootpath =1 HTTP/1.1" status = 200字节= 281785230upstream = "172.18.0.2:8081" upstream_time = " 371.541 " request_time = " 475.211 " referer = "-" UA = "Artifactory/6.9.1"如果你的反向代理/负载均衡器返回到源服务器的整个流,那么你的问题是与你的另一部分网络,这需要进一步的调查与贵公司的网络团队 如果你只看到这个文件列表的一部分已返回到您的源服务器,那么问题可能与您的反向代理/负载均衡器超时设置。因此,这个问题再次类似于中描述的问题场景# 1同样的解决方案应该解决这个问题。我们将在Nginx中编辑的参数示例:

相关的错误:2019-03-04 14:27:56,362 [http-nio-127.0.0.1-8081-exec-446] [ERROR] (o.a.r.r.a.ArtifactResource:292) -无法检索列表
java.io.IOException:连接被对等体重置
2019-04-22 06:52:44,712 [art-exec-1232043] [ERROR] (o.a.a.c.BasicStatusHolder:211) -在执行文件夹复制'nuget-local'时发生错误:连接重置