对通过 WAN 连接在 SUSE Manager Server 与 Proxy 之间同步时间过长的问题进行查错

根据在 WebUI 中或通过 API 调用对发行套件或系统设置执行的更改,可能需要使用 cobbler sync 命令将 SUSE Manager 服务器中的文件传输到 SUSE Manager Proxy 系统。为此,Cobbler 将使用 /etc/cobbler/settings 中指定的代理列表。

cobbler sync 在设计上无法仅同步已更改的或最近添加的文件。

实际情况是,执行 cobbler sync 会触发将 /srv/tftpboot 目录完全同步到 /etc/cobbler/settings 中配置的所有已指定代理的操作。此命令还会受到相关系统之间 WAN 连接延迟的影响。

根据 /var/log/cobbler/ 中的日志,同步过程可能需要很长时间才能完成。

例如,该过程开始时间为:

Thu Jun  3 14:47:35 2021 - DEBUG | running python triggers from /var/lib/cobbler/triggers/task/sync/pre/*
Thu Jun  3 14:47:35 2021 - DEBUG | running shell triggers from /var/lib/cobbler/triggers/task/sync/pre/*

结束时间为:

Thu Jun  3 15:18:49 2021 - DEBUG | running shell triggers from /var/lib/cobbler/triggers/task/sync/post/*
Thu Jun  3 15:18:49 2021 - DEBUG | shell triggers finished successfully

传输量大约为 1.8 GB。传输花费了将近 30 分钟。

相比之下,复制一个与 /srv/tftboot 大小相同的大文件只需几分钟即可完成。

改用基于 rsync 的方法在 SUSE Manager Server 与 Proxy 之间复制文件可能有助于减少传输量和等待时间。

该脚本不接受命令行选项。在运行该脚本之前,您需要手动编辑它并正确设置 SUMAHOSTNAMESUMAIPSUMAPROXY1 变量,使其能够正常运行。

不支持调整该脚本的个别设置。该脚本及其包含的注释旨在提供传输过程以及要考虑的步骤的概述。如需进一步的帮助,请联系 SUSE 咨询部门。

对于以下情况,最好使用建议的脚本用法:

  • SUSE Manager Proxy 系统是通过 WAN 连接的;

  • /srv/tftboot 包含大量发行套件文件和客户端 PXE 引导文件,总共有数千个文件;

  • 已禁用 /etc/cobbler/settingsl 中的任一代理,否则 SUSE Manager 会继续将内容同步到代理。

    #proxies:
    # - "sumaproxy.sumaproxy.test"
    # - "sumaproxy2.sumaproxy.test"

过程:分析新的同步速度

  1. 为 SUSE Manager 与相关系统之间的 TCP 流量创建转储。

    • 在 SUSE Manager Server 上:

      tcpdump -i ethX -s 200 host <SUSE Manager Proxy 的 IP 地址> and not ssh
    • 在 SUSE Manager Proxy 上:

      tcpdump -i ethX -s 200 host <SUSE Manager 的 IP 地址> and not ssh
    • 这样就只会捕获大小为 200 的软件包,但足以运行分析。

    • 将 ethX 调整为由 SUSE Manager 用来与代理通讯的相应网络接口。

    • 最后,不会捕获 ssh 通讯,从而进一步减少了软件包的数量。

  2. 开始 Cobbler 同步。

    • 要强制同步,请先删除 Cobbler json 缓存文件,然后发出 Cobbler 同步命令:

      rm /var/lib/cobbler/pxe_cache.json
      cobbler sync
  3. Cobbler 完成后,停止 TCPdumps。

  4. 使用 Wireshark 打开 TCPdumps,转到 Statistics(统计信息)> Conversations(对话),并等待分析转储。

  5. 切换到“TCP”选项卡。此选项卡上显示的数字是在 SUSE Manager 与 SUSE Manager Proxy 之间捕获的对话总数。

  6. 找到列 Duration(持续时间)

    • 首先按升序排序,找出传输文件所花费的最短时间。

    • 继续按降序排序,找出大文件传输时间的最大值,例如内核和 initrd 传输。

      忽略端口 4505 和 4506,因为它们用于 Salt 通讯。

TCPdumps 分析结果表明,将大小约为 1800 字节的小文件从 SUSE Manager Server 传输到 Proxy 大约花费了 0.3 秒。

此处的大文件不多,而大量的小文件导致建立了大量连接,因为每传输一个文件就要创建新的 TCP 连接。

因此,在知道最短传输时间和所需连接数(在本示例中大约为 5000)的情况下,可以大致估算出总传输时间:5000 * 0.3 / 60 = 25 分钟。