木偶文件服务器分发二进制文件

puppet fileserver distribute binaries

好吧,问题并不新鲜,但我仍然找不到任何好的解决方案。 我通过 puppet 文件服务器分发 100-300mb 的二进制文件,但由于 md5 检查,它在性能方面确实很糟糕,我敢肯定。现在我有 100 多台服务器,我的人偶大师非常努力地管理所有 md5 计算检查。在 puppet 3.x 中,文件 {} 的校验和不起作用。我无法更新到 puppet 4.x,而且我没有机会改变流程。文件应该来自傀儡文件服务器。 所以我无法相信没有带有固定校验和选项的自定义文件类型,但我找不到它:( 或者也许还有其他方法可以从 puppet fileserver 下载文件? 请任何建议都会有所帮助! rsync 或 pack as a native package 对我来说是不可能的选择。

可以合理地假设在管理大文件时使用默认校验和算法 (MD5) 会对性能产生重大影响。 File resource has a checksum attribute that is supposed to be usable to specify an alternative checksumming algorithm among those supported by Puppet (some of which are not actually checksums per se), but it was buggy in many versions of Puppet 3。目前,在 Puppet 4 中实施的修复似乎没有被反向移植到 Puppet 3 系列。

如果您只需要分发文件,而不关心事后更新它们或通过 Puppet 维护它们的一致性,那么您可以考虑完全关闭校验和。这可能看起来像这样:

file { '/path/to/bigfile.bin':
  ensure   => 'file',
  source   => 'puppet:///modules/mymodule/bigfile.bin',
  owner    => 'root',
  group    => 'root',
  mode     => '0644',
  checksum => 'none',
  replace  => false
}

但是,如果您确实想要管理现有文件,那么 Puppet 需要一种方法来确定节点上已存在的文件是否是最新的。这是校验和的两个主要目的之一。如果您坚持通过 Puppet 文件服务器分发文件,并且卡在 Puppet 3 上,那么就减轻负载而言,恐怕您运气不好。 Puppet 的文件服务器与 File 资源类型紧密集成,并不旨在用于一般用途。据我所知,没有任何第三方资源类型可以利用它。在任何情况下,文件服务器本身都是导致 Filechecksum 参数不起作用的主要原因——有缺陷的版本不执行除 MD5 之外的任何类型的校验和。

作为替代方案,您可以考虑以系统的本机打包格式打包大文件,将其放入内部包存储库,然后管理包(通过 Package 资源)而不是管理文件直接地。这确实避免了通过文件服务器分发它,但这正是重点。