我们有许多服务器,但仍想更新它们。实际方法是任何系统管理员都从一个服务器到另一个服务器进行更新aptitude update && aptitude upgrade
- 这仍然不太好。
我现在正在寻找一个更好、更智能的解决方案。Puppet 能完成这项工作吗?你是怎么做到的?
答案1
您可以使用exec
如下类型:
exec { "upgrade_packages":
command => "apt-get upgrade -q=2",
path => "/usr/local/bin/:/bin/:/usr/bin/",
# path => [ "/usr/local/bin/", "/bin/" ], # alternative syntax
}
说实话,我自己没有尝试过,但我认为您只需要创建一个包含此类 exec 定义的新模块。
该命令是交互式的。为了使其安静地运行,您可以添加如上所示的apt-get upgrade
选项。-q=2
答案2
如果您的所有主机都是 debian,您可以尝试无人值守升级包。
http://packages.debian.org/sid/unattended-upgrades
在这里我们一直使用 puppet 来管理我们的 debian 虚拟机,通过 puppet 我们能够在所有服务器上启用和管理无人升级配置。
最近我们的团队正在测试 mcollective 工具在所有服务器上运行命令,但使用 mcollective 需要 ruby 技能。
[s] 古托
答案3
我建议选择 Puppet、facter 和 mCollective。
mCollective 是一个非常好的框架,您可以在其中使用 facter 作为过滤器在一系列主机上(并行)运行命令。
添加本地代理/缓存,您就可以很好地进行服务器管理。
答案4
因此,我认为有很多因素有助于找到一个好的解决方案:
- 带宽
- 易于管理
- 详细记录以防出现问题。
带宽:基本上我想到两种节省带宽的方法:
- 设置 Debian 镜像并配置所有客户端以使用此镜像,请参阅http://www.debian.org/mirror/了解更多详情。(我推荐这个)
- 设置代理(apt-cacher、apt-proxy 或 Squid)并增加缓存,以便所有客户端都可以从此缓存中获益
行政:我会配置一个并行 shell,例如帕金森氏病,前列腺增生症,GNU 并行并在所有客户端上发出命令,如果我之前在示例机器上测试过该命令。那么它在所有其他机器上失败的可能性就不大。或者,您可以考虑在所有客户端上使用 cron 作业,但它可能会自动失败,所以我更喜欢第一个解决方案。
如果你担心升级的同时性,你可以安排你的命令at
日志记录:与并行 shell 一样,您可以重定向输出,我会合并 stderr 和 stdout 并将其写入日志文件。