我有兴趣了解用于管理许多 Linux 机器的工具和技术。(即部署和维护更新。)
我想到的一种方法是编写一个 Bash 脚本,将另一个脚本上传到服务器并按顺序为每个服务器执行脚本。例如:
foreach server
{
connect to server and scp update_script.sh to ~/scripts
ssh user@server -e "sh ~/scripts/update_script.h"
}
update_script 将使用apt-get/aptitude
oryum
或其他任何方式来更新服务器上的包。
有没有更好的方法来做这样的事情?
试试木偶
另一个优秀(真正优秀)的工具是 Webmin,如果你添加几台一起运行 webmin 的服务器(在 webmin 界面中),你可以在其集群页面中推送更新和查看包配置。
另一种更适合推出图像的替代方案是 SystemImager
ClusterSSH是您正在寻找的。它提供了一种向集群中的所有节点广播命令的方法。把它想象成BashReduce没有 Reduce。
其他人已经提到了 Puppet。
同样,我可以推荐 Cfengine。学习曲线可能有点陡峭,但是一旦掌握了窍门,那就太好了。我用它来管理大约 50 台服务器,我不敢相信没有它我还能相处得很好。
试试Capistrano。它就像上面的 bash foreach 循环一样工作,但它基于 Ruby 而不是 bash。Capistrano 用于操作任务(a la:将服务器置于维护模式,退出维护模式)
为木偶+1。它非常适合使系统处于已知状态的幂等操作。
如果您希望能够在 Linux 系统集群上并行运行命令,可能会感兴趣以下内容之一:
作为配置大型系统网络的一般方法 - 您可能希望使用已经提到的工具,例如 cfengine 和 puppet。
查看 Func 以同时在多个服务器上运行“事物”。谷歌搜索“func redhat”
此外,如果您喜欢 puppet,您应该查看 Chef opscode dot com。它解决了一些 puppets 问题,并且配置文件是用 ruby 而不是 DSL 编写的。ohai 也是 facter 的信息量更大的版本。Bcfg2 也是另一个用 python 编写的配置管理工具。它对于高安全性或审计来说很酷,因为每个包都可以考虑,所以如果在 bcfg2 之外添加了一些东西,它会标记一个警报。它的缺点是它们自己用 XML 编写的配置文件。
我有一堆链接,但我猜新用户不能发布超链接。
即使您的想法对我来说似乎并不坏,我也不太了解脚本部署。但是,如果您想在管理 Linux 机器的过程中监控它们,我强烈建议使用Nagios执行此任务。
如果您希望 Nagios 处理比通常的默认任务更多的任务,那么配置Nagios有点麻烦(就像任何 linux 软件一样,请注意),但您在他们的网站上有大量文档:nagios.sourceforge.net/docs/3_0/目录.html
当然,它是免费的;)
“许多”是一个多大的群体?如前所述,如果 Webmin 能满足您的需求,它就很好 - 您可以使用 https 运行任意命令并执行一些常见的管理任务(如同步本地用户)。因此,您的开销比 ssh 方法少。Webmin 的集群工具适用于“数十”台机器;我从来没有在更大的群体上尝试过。还有提到的cfengine - 它可以用于小型到非常大的机器组(如数千台),因为它可以根据需要进行分层管理(一个主机,然后是一些子主机等)。我目前正在使用它来管理大约 3500 台不同风格的 Unix 机器的网络。正如另一位海报所说,最初学习很痛苦,但效果很好。
如果你的系统是同构的,或者至少是相当同构的组,并且你没有很多(比如,不到几百个),那么有几个很好的集群管理工具集。Oscar 项目已经组装了一些用于管理集群的管理工具:http://svn.oscar.openclustergroup.org/trac/oscar,还有其他类似项目的名字让我无法理解(我可能很快就会记得正如我发布的那样)。
简单来说,Linux Journal 上讨论了一些并行 ssh 工具:http://www.linux.com/archive/feature/151340。不过,与其他基于 ssh 的集群工具一样,当您尝试打开太多并发 ssh 连接时,您仍然会遇到问题。根据您的硬件,我的经验是您可能希望将并行度保持在 20-30 个同时 ssh 链接以下。
基本上,有很多预制的解决方案,也有同样多的本土解决方案。环顾一下freshmeat.net 和谷歌,你会发现几个。或者自己动手;如果您只是在做 10-20 台机器,那么以可接受的方式解决这并不是一个特别困难的挑战...... :)
我使用 cfengine 来管理大约 150 台 Linux 机器。我每周必须登录任何给定的机器少于一次,其余的由 cfengine 完成。添加用户、删除用户、安装包等。