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

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

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

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

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

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

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

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

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

connectionTimeout = " > <秒"

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

2.源Artifactory使用反向代理或负载平衡器与目标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& mdtimestamps =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) -无法检索列表
org.apache.catalina.connector.ClientAbortException: java.io.IOException:连接被peer重置
2019-04-22 06:52:44,712 [art-exec-1232043] [ERROR] (o.a.a.c.BasicStatusHolder:211) -为'nuget-local'执行文件夹复制时发生错误:连接重置