Noo*_*les 7 file-transfer puppet
我在不同的数据中心有一个傀儡主人和奴隶。它们之间的延迟约为 40 毫秒。当我在从属设备上运行“puppet agent --test”以应用最新的清单时,大约需要 360 秒才能完成。
在做了一些挖掘之后,我可以看到速度变慢的主要原因是文件传输。传输每个文件似乎需要大约 10 秒。这些文件很小(配置文件),所以我不明白为什么它们需要这么长时间。
这是我的清单中的一个文件示例:
file { "/etc/rsyncd.conf" :
owner => "root",
group => "root",
mode => 644,
source => "puppet:///files/rsyncd/rsyncd.conf"
}
Run Code Online (Sandbox Code Playgroud)
运行 puppet-profiler 我看到了这个:
10.21s - File[/etc/rsyncd.conf]
Run Code Online (Sandbox Code Playgroud)
似乎我也不能使用 puppet 一次更新多个服务器。如果我同时运行两台服务器,那么 puppet 需要两倍的时间。
我已将傀儡大师从使用 webrick 更改为 mongrel,但这似乎无济于事。这使得部署更改变得痛苦。一个简单的配置更改可能需要一个小时才能部署到所有服务器。
免责声明:我是 Puppet 开发人员之一。
当您使用puppet://
URL 获取文件时,Puppet 将建立两个 SSL 连接回文件服务器 - 一个用于元数据,包括校验和,另一个用于内容。仅当磁盘上的内容已过期时,才制作第二个,希望如预期的那样。
传输本身是标准的 HTTPS,没有任何花哨的东西,所以除了 SSL 开销和两个连接的延迟成本之外,Puppet 没有理由这么慢。
在检查文件是否是最新的时,Puppet 还将在客户端和服务器双方对文件进行校验和。如果您的后备存储也很慢,那可能会很慢。
最后,您应该检查您的网络链接是否因为饱和或类似原因而变慢。大缓冲区导致糟糕的网络性能并不是第一次 - 有人在中间放置了一个流量整形器,使 ping 速度超快。;)
除此之外,我建议您提交错误报告。包括详细信息和网络痕迹,将对我们解决此问题有很大帮助。
您所描述的肯定是不正常的,并且对于像您所描述的那样在相当快的网络上的小型配置文件,这不是我们所期望的。(另外,这不是其他人看到的,所以很明显你的设置中发生了一些不寻常的事情。)
我发现了问题。看起来虽然我将 Apache 设置为通过乘客运行 puppetmaster,但配置文件从未包含在我的 httpd.conf 中。我的 puppetmaster 仍然运行默认设置。(netstat -anp | grep 8140 显示 apache 没有使用此端口)。
修复这些问题并确保 Apache 正在侦听 8140 后,我的 puppet 客户端现在需要 8 秒才能运行,而不是 380 秒。