svnsync在使用svnsync 1.10.2的较大修订版上失败,但在使用1.7.5时运行良好



这不是一个简短的问题,但请耐心等待:)

早在2012年,我就设置了从我们在美国的一个数据中心到世界各地的多个镜像的svn同步(确切地说是3个)。这些年来,它基本上没有任何问题(它承载测试数据,目前版本573453为1.2TB)。

最近,我需要重建执行同步的主服务器(不接触镜像),问题从这里开始。。。有时,对于仅的较大修订,从新主镜像到远程镜像的同步会失败-我们有3个这样的镜像,有时所有镜像都失败,有时只有一两个。。。它从未在同一数据中心内的3个其他镜像失败(svn版本1.10.3和2x 1.7.5(这一点在下面很重要;))。

当我执行CCD_ 1时,看起来svnsync进程得到了一个";对等方重置连接";在读取某些数据时出错;更大/有问题";修订,然后在关闭http连接后退出(在失败发生之前,它总是会持续很长一段时间)。

我在任何日志中都找不到任何明显的东西(并不是说我在这方面太胜任;)——管理这些是第四级的副业)。

SVN在所有系统上都由apachemod_SVN提供服务——无论我使用http还是https作为源协议,它都会失败——目标都是http atp。

一旦失败,它将一次又一次地失败(到1,2或3个镜像),你可以尝试几十次,它或多或少会在同一个地方失败(不完全是,但很近),但。。。

踢球者来了。。。

它将始终工作,从执行nr 1开始,到目前为止没有任何失败,当旧主机被用作中间人时,通过在它上执行完全相同的svnsync命令…

旧服务器使用:

bash-4.1$ svnsync --version
svnsync, version 1.7.5 (r1336830)
compiled May 15 2012, 17:55:12

新服务器具有:

bash-4.4$ svnsync --version
svnsync, version 1.10.2 (r1835932)
compiled Feb 10 2021, 09:25:28 on x86_64-redhat-linux-gnu

使用旧的svnsync进程会导致为相同的两个存储库之间的同步选择不同的协议/模式吗;较老的";存储库?

svnsync 1.10.2 SYNC REMOTE FROM 1.10.2 TO 1.7.5 == FAIL (sometimes after a while/longer period of time pushing data)
svnsync 1.7.5 SYNC REMOTE FROM 1.10.2 TO 1.7.5 == SUCCESS (each and every time)

我可以检查哪些日志,可以启用哪些日志来缩小范围?

ps。由于这是一个";"公司";环境,我试图确保没有";奇怪的网络事物;("透明缓存和加速器等")被启用/激活,而网络团队认为它们不是;)

pps。所有这些服务器都是在一个或另一个vmware解决方案上运行的虚拟机。

我想首先给出几个建议:

  1. 您需要检查所有服务器上的Apache HTTP服务器日志,并查看同步失败时记录的错误
  2. 您需要检查Apache http服务器的http.conf和其他相关配置文件
  3. 您需要考虑将SVN和Apache HTTP服务器升级到最新版本。SVN 1.7.x和1.10.x已过时,不受支持
  4. 您需要查明是否有防火墙或代理中断了svnsync sync操作。防病毒应用程序也可能导致此问题

我是VisualSVN团队的支持工程师,我认为您可以考虑切换到VisualSVN服务器和VDFS。VDFS提供SVN存储库镜像,而没有svnsync的这些缺点。

现在回答您的问题

使用旧的svnsync进程会导致不同的协议/模式吗选择用于相同两个之间的同步当匹配的svnsync用于同步到";较老的";存储库?

svnsync是一个客户端程序,您现在使用的似乎是过时的版本。通常,当您使用不同的Subversion客户端和服务器版本时,应该不会有任何问题。然而,现在您正在使用一个客户端通过HTTP(S)连接两个服务器来复制您的存储库,这可能很复杂。如果你有防病毒软件、防火墙或代理,所有这些都可能导致你在问题中描述的行为。您的网络问题也可能导致此问题。并且";是";,当1.7和1.10客户端连接到不同版本的SVN+Apache服务器时,它们在网络上的行为可能会有所不同。

我可以检查哪些日志以及我可以启用哪些日志来尝试和缩小范围?

检查svnsync产生的错误,并查看Apache HTTP服务器日志中的错误。你会看到一些活动。

我认为可以帮助你解决问题的一般性建议

您通常在参与复制的两个服务器(源服务器或目标服务器、主服务器或从属服务器)中的一个服务器上运行svnsync sync。并且到本地存储库的URL必须使用file://直接本地访问协议。本地URL是指指向服务器磁盘上存储库的file://URL。

当其中一个URL是本地的时,svnsync不需要通过HTTP(S)远程联系两个服务器,并且其中一个存储库总是直接在磁盘上访问。

以下是SVNBook:的语法示例

svnsync synchronize DEST_URL [SOURCE_URL]

目标或源存储库URL必须是本地的:

  • 如果在源服务器上运行此命令,则source_URL必须是本地的:

    svnsync sync "https://svn1.example.com/svn/MyRepo" "file:///C:/Repositories/MyRepo"
    
  • 如果在目标服务器上运行此命令,则DEST_URL必须是本地的:

    svnsync sync "file:///C:/Repositories/MyRepo" "https://svn1.example.com/svn/MyRepo" 
    

相关内容

最新更新