对通过 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 之间复制文件可能有助于减少传输量和等待时间。
可以从 https://suse.my.salesforce.com/sfc/p/1i000000gLOd/a/1i000000ll5B/B2AmvIJN2_JsAyjTQzCVP_x5ioVgd0bYN9X9NpMugS8 下载用于完成此任务的脚本。
该脚本不接受命令行选项。在运行该脚本之前,您需要手动编辑它并正确设置 SUMAHOSTNAME
、SUMAIP
和 SUMAPROXY1
变量,使其能够正常运行。
不支持调整该脚本的个别设置。该脚本及其包含的注释旨在提供传输过程以及要考虑的步骤的概述。如需进一步的帮助,请联系 SUSE 咨询部门。 |
对于以下情况,最好使用建议的脚本用法:
-
SUSE Manager 代理系统是通过 WAN 连接的;
-
/srv/tftboot
包含大量发行套件文件和客户端 PXE 引导文件,总共有数千个文件; -
已禁用
/etc/cobbler/settingsl
中的任一代理,否则 SUSE Manager 会继续将内容同步到代理。#proxies: # - "sumaproxy.sumaproxy.test" # - "sumaproxy2.sumaproxy.test"
过程:分析新的同步速度
-
为 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 通讯,从而进一步减少了软件包的数量。
-
-
开始 Cobbler 同步。
-
要强制同步,请先删除 Cobbler json 缓存文件,然后发出 Cobbler 同步命令:
rm /var/lib/cobbler/pxe_cache.json cobbler sync
-
-
Cobbler 完成后,停止 TCPdumps。
-
使用 Wireshark 打开 TCPdumps,转到
Statistics(统计信息)> Conversations(对话)
,并等待分析转储。 -
切换到“TCP”选项卡。此选项卡上显示的数字是在 SUSE Manager 与 SUSE Manager Proxy 之间捕获的对话总数。
-
找到列
Duration(持续时间)
。-
首先按升序排序,找出传输文件所花费的最短时间。
-
继续按降序排序,找出大文件传输时间的最大值,例如内核和 initrd 传输。
忽略端口 4505 和 4506,因为它们用于 Salt 通讯。
-
TCPdumps 分析结果表明,将大小约为 1800 字节的小文件从 SUSE Manager Server 传输到 Proxy 大约花费了 0.3 秒。
此处的大文件不多,而大量的小文件导致建立了大量连接,因为每传输一个文件就要创建新的 TCP 连接。
因此,在知道最短传输时间和所需连接数(在本示例中大约为 5000)的情况下,可以大致估算出总传输时间:5000 * 0.3 / 60 = 25 分钟。