2016-02-04 61 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

哦,我現在看到了。感謝您的好評! –