我在不同的数据中心有一个木偶大师和奴隶。 它们之间的延迟是〜40ms。 当我在奴隶上运行“木偶代理 – testing”来应用最新的清单时,需要360秒才能完成。
经过一番挖掘,我可以看到减慢的主要原因是文件传输。 似乎要花费大约10秒才能传输每个文件。 这些文件只有很小(configuration文件),所以我不明白为什么他们会花这么长时间。
这是我清单中文件的一个例子:
file { "/etc/rsyncd.conf" : owner => "root", group => "root", mode => 644, source => "puppet:///files/rsyncd/rsyncd.conf" }
运行puppet-profiler我看到这个:
10.21s - File[/etc/rsyncd.conf]
也似乎我不能一次使用puppet更新多个服务器。 如果我同时运行两台服务器,那么木偶需要两倍的时间。
我已经改变了木偶大师从使用webrick到杂种,但这似乎没有帮助。 这使得痛苦的部署变化。 一个简单的configuration更改可能需要一个小时才能推出到所有服务器。
免责声明:我是木偶开发者之一。
当您使用puppet:// URL来源文件时,Puppet会将两个SSL连接返回到文件服务器 – 一个用于元数据,包括校验和,另一个用于内容。 如果磁盘上的内容已经过时,第二个就会如期望的那样完成。
传输本身就是标准的HTTPS,没什么特别的意义,所以除了两个连接的SSL开销和延迟成本以外,没有理由说Puppet应该这么慢。
当涉及到检查它是否是最新的时候,Puppet还将校验文件两端,客户端和服务器。 如果你的支持商店也很慢,这可能会很慢。
最后,你应该检查你的networking连接速度是否很慢,因为它是饱和的,或类似的东西。 这不是第一次大的缓冲区导致了糟糕的networking性能 – 而且有人把stream量整形器放在中间,使得ping速度超快。 ;)
除此之外,我build议你提交一个错误报告 。 包括细节和networking痕迹,对于我们解决这个问题将是一个很大的帮助。
你所描述的当然是不正常的,而且这不是我们所期望的,就像你所描述的,在一个相当快速的networking上的小configuration文件。 (另外,这不是别人所看到的,所以在你的设置中显然会发生一些不寻常的现象。)
根据我的经验,旧版本的puppet会在所有FILE数据来回传输时对其进行序列化和DE序列化。 而且特别糟糕,传输大量(很多兆字节)的二进制文件。
皮特曼先生build议上面说,这可能不再是这种情况,但你可能想深入挖掘,看看你正在运行的木偶版本是否有这样的优化。
它看起来像变化进入木偶0.25 – 当他们从xlrpc转换到rest时,看到错误583( http://projects.puppetlabs.com/issues/583 )。
我当时的解决scheme是使用puppet推送rsync预共享密钥,并使用rsync守护进程向最终客户端提供文件(只读)。 Rsync可以非常有效地传输和更新大量的二进制数据。
因此,检查您的木偶版本,但也看看rsync可以为您工作作为一个性能比较。
我发现了这个问题。 看起来,虽然我设置我的Apache通过乘客运行puppetmaster,configuration文件从未包含在我的httpd.conf中。 我的傀儡大师仍然在运行默认设置。 (netstat -anp | grep 8140显示apache没有使用这个端口)。
在解决这些问题并确保Apache在8140上进行监听之后,我的木偶客户现在需要8秒的时间从380秒下降。