我的问题:cfengine3 策略是在服务器(策略中心)上手动创建/更新的,并且客户端定期(每隔约 5 分钟)将这些策略从服务器:/var/cfengine/masterfiles 拉到各自的 someclient:/var/cfengine/inputs(正如它们应该的那样)。
但有时这种行为不一致。服务器中更新的文件可能要过一段时间才会反映在客户端中。可能需要 30 分钟或更长时间才能突然“看到”更新。如果我创建/更新的内容位于 ./masterfiles 下的子目录中,则尤其会发生这种情况。
我已经使用 tcpdump 检查过每个客户端实际上每 5 分钟通过 cfengine 端口 (5308) 与主服务器通信一次。
我不明白为什么策略文件没有更新。
有人有同样的经历或有建议吗?谢谢。
(刚刚升级到 cfengine 3.3.1,混合 CentOS/Fedora 隔离环境 - 网络的其余部分在 cf2 上顺利运行)。
答案1
大卫,
更新的文件是否已被复制,而本地 cf-agent 是否未对更改作出反应?或者更新的文件是否要到很晚才被复制?
我能想到的一个原因是系统之间的时钟不同步。检查 /var/cfengine/inputs/cf_promises_validated - 此文件填充了上次在服务器上检查承诺的时间,客户端使用此时间戳重新加载其本地策略。
您也可以在CFEngine 帮助论坛,它一定会被更多的 CFEngine 专家看到:)
答案2
大卫,
我也怀疑时钟偏差,就像 Diego 一样。在以下位置搜索 cf_promises_validatedhttp://cfengine.com/blog/cfengine-330-release-notes这可能会给你一些资源。关键是你的failsafe.cf中的复制承诺。
答案3
您提到您刚刚将 CFEngine 升级到 3.3.1。
3.3.1 版中的 /var/cfengine/masterfiles/cf_promises_validated 中有一个新时间戳(我猜之前的版本是一个空白文件),这意味着我们可以改变一种方式,将文件从“mtime”复制到当前 failsafe.cf 中的“digest”,以避免系统时钟问题。另请参阅 /var/cfengine/share/CoreBase/failsafe.cf,body copy_from u_rcp 已经有“digest”复合主体。
答案4
和其他人一样,我怀疑是时钟偏差。检查一下时间。您还可以删除远程代理上 /var/cfengine/inputs 中的 cf_promises_validated 文件。然后它将看到策略中心上 /var/cfengine/masterfiles 中的 cf_promises_validated 文件不同,并将继续进行完整的策略更新。
从 3.3.0 开始,cf_promises_validated 应该包含一个日期时间戳,这样我们就不会依赖适当的时间同步来进行策略更新。
如果您使用默认引导策略,请检查您的 failsafe.cf。
从 3.3.1 或 3.3.0 开始的策略(不确定哪个生成了我正在查看的故障保护)有一个带有句柄“check_valid_update”的承诺,它使用 u_rcp 在必要时更新 cf_promises_validated 文件。如果它修复了承诺,那么它会引发 validated_updates_ready 类/上下文,带有句柄 update_files_inputs_dir 的承诺被限制在该类/上下文上以更新策略的其余部分。检查 body copy_from u_rcp 中用于比较属性的内容。如果是摘要,那么它应该使用文件的内容,而不仅仅是文件上的时间戳。