2016-02-04 64 views
1

嗯,问题不是新的,但我仍然无法找到任何不错的解决方案。 我通过傀儡文件服务器分发二进制文件100-300MB文件,但它的工作真的很糟糕,因为我敢肯定,因为MD5检查。现在我有超过100台服务器,我的木偶大师很难管理所有md5计算检查。在文件{}的puppet 3.x校验和中不起作用。我无法更新到木偶4.x,我没有机会改变流程。文件应该来自puppet fileserver。 所以我不能相信没有固定校验和选项的自定义文件类型,但我找不到它:( 或者也许有任何其他方式从puppet文件服务器下载文件? 请任何意见将有所帮助! 的rsync或包作为本机包是不可能的选项给我。傀儡文件服务器分发二进制文件

回答

3

这确实是合理的假设,使用默认的校验算法(MD5)管理大型文件时,将有一个显着的性能影响。该File resourcechecksum attribute是应该可用于指定Puppet支持的算法中的替代校验和算法(其中一些实际上不是校验和本身),但是it was buggy in many versions of Puppet 3。At这一次,似乎并没有在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 3上,那么恐怕在减轻负载方面你运气不佳。 Puppet的文件服务器与文件资源类型紧密集成,而不是用于一般用途。据我所知,没有利用它的第三方资源类型。在任何情况下,文件服务器本身都是Filechecksum参数无效的问题的主要原因 - 有问题的版本不执行除MD5之外的任何类型的校验和。作为一种替代方案,您可以考虑将您的大文件打包为您的系统本地打包格式,将其放到您的内部软件包存储库中,然后管理软件包(通过Package资源),而不是直接管理文件。这确实远离通过文件服务器分发它,但这非常重要。

+0

感谢您的回复! 是的...我一直在关注问题PUP-1208 :),但不知道它被backported到puppet 3.x我试过3.8.5,它没有像3.5.x一样工作我的意思是md5lite或sha甚至ctime或mtime。 在我的情况下,我在意文件uptodate状态,所以对我来说mtime应该是完全够用的,但它不起作用:( 顺便说一句,因为我们使用它很多,它仍然不支持3.x傀儡傀儡4.也许应该尝试puppetDB ... –

+0

@RomanIuvshin,我写道,PUP-1208的修复已经*没有* backported,所以我并不感到惊讶,听到v3.8.5表现出与v3.5相同的不当行为对于puppetDB,我并没有看到你希望在这种情况下会为你做什么,如果你需要继续使用Puppet 3,但是离开MD5,那么你可能需要离开Puppet文件服务器。建议使用包代替是一个相当直接的选择,但也有其他的。 –

+0

哦,我现在看到了。感谢您的好评! –