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

根据在 WebUI 中或通过 API 调用对发行套件或系统设置执行的更改,可能需要使用 cobbler sync 命令将 SUSE Multi-Linux Manager 服务器中的文件传输到 SUSE Multi-Linux Manager 代理系统。为此,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 Multi-Linux Manager Server 与 Proxy 之间复制文件可能有助于减少传输量和等待时间。

The script does not accept command line options. Before running the script, you need to manually edit it and set correctly MLMHOSTNAME, MLMIP and MLMPROXY1 variables for it to work correctly.

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

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

  • SUSE Multi-Linux Manager 代理系统是通过 WAN 连接的;

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

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

    #proxies:
    # - "MLMproxy.MLMproxy.test"
    # - "MLMproxy2.MLMproxy.test"
过程:分析新的同步速度
  1. 为 SUSE Multi-Linux Manager 与相关系统之间的 TCP 流量创建转储。

    • 在 SUSE Multi-Linux Manager 服务器上:

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

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

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

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

  2. 开始执行 cobbler sync

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

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

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

  5. 切换到“TCP”选项卡。此选项卡上显示的数字是在 SUSE Multi-Linux Manager 服务器与 SUSE Multi-Linux Manager 代理之间捕获的对话总数。

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

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

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

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

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

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

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