针对通过 WAN 连接在 SUSE Multi-Linux Manager Server 与代理之间同步时间过长的问题进行故障排除

根据在 WebUI 中执行的更改或通过 API 调用到分发或系统设置的内容,可能需要执行 cobbler sync 命令将文件从 SUSE Multi-Linux Manager Server 传输到 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 与代理之间复制文件可能有助于缩短传输时间和等待时间。

该脚本不接受命令行选项。 在运行脚本之前,您需要手动编辑它并正确设置 MLMHOSTNAMEMLMIPMLMPROXY1 变量,以便其正常工作。

不提供对脚本的单独调整支持。 该脚本及其内部注释旨在提供过程和需要考虑的步骤的概述。 如果需要进一步的帮助,请联系 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 <ip-address-of-susemanagerproxy> and not ssh
    • 在 SUSE Multi-Linux Manager 代理上:

      tcpdump -i ethX -s 200 host <ip-address-of-susemanager> 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. 当 {command]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 服务器传输到代理大约花费了 0.3 秒。

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

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