将Perl部署到无共享群集
有人对Perl模块无共享集群的部署方法有建议吗?
我们当前的方法是非常手动的。
- 减少一半集群
- 将Perl模块(CPAN样式模块)复制到已关闭的集群成员
- ssh到每个成员并运行
perl Makefile.pl;。制作 ;在要安装的每个模块上进行install
- 确认部署
- 在服务中,新部署的集群成员停止服务,在旧集群成员中停止服务,并重复步骤2-> 4
显然,这远非最佳,任何人都拥有或者知道将Perl模块部署到无共享集群的良好工具链?
解决方案
使一个节点脱机,安装Perl,然后使用它重新映像其他节点。
至少,这就是我想像的那样,我们希望在无共享群集中安装软件。 Perl只是我们碰巧要安装的应用程序。
过去,我已经开发了一个Perl程序,该程序使用Expect模块(来自CPAN)来基本上自动化我们描述的过程,自动切入每个主机,复制任何必要的文件,然后执行安装。不幸的是,这是为客户现场开发的,因此我无权共享代码。如果我们熟悉Expect,则设置起来应该不会太困难。
我不确定到底什么是无共享集群,但是如果它使用诸如Fedora,Mandriva或者Ubuntu之类的基本* nix系统。许多perl模块已针对特定体系结构进行了预编译。我们可以轻松地运行它们。
如果这些系统是同一体系结构,我们可以像其他人说的那样做,并且只是将已编译的模块从一个系统复制到另一个系统,只需确保我们在接收者系统上也具有所有依赖性。
当前,我们有一个集群Perl应用程序来执行数据处理。我们还有许多CPAN模块和我们开发的软件依赖的模块。当我们说"无共享"时,我假设我们指的是诸如NFS挂载之类的东西。
如果机器具有相同的配置,则我们可以将整个应用程序构建为一个目录结构(例如:/ opt / my-app),将其压缩,这可能是我们唯一需要推送到盒子。
至于将其部署到盒子上,我们也许可以使用Capistrano。我们开发了几个自己的集群实用程序,它们是通过ssh附带的。我已经发布了该实用程序的一种形式:parallel-jobs。它的自述文件显示了执行多个并行ssh命令的示例。这是扩展该程序的一小步,以便能够了解集群,然后能够在集群中执行同一命令(与一系列不同的命令相对)。
假设所有机器都是相同的,那么我们应该能够保留一个规范的安装,并使用rsync或者其他东西来更新其他机器。
Capistrano是允许我们在一组服务器上运行命令的工具。它非常适合简化任务。
Puppet使自动化和复杂性进一步降低,我们可以定义一组服务器,为它们分配角色,然后将代码集推送到每个订阅特定角色的计算机。
如果我们使用的是Debian或者Ubunto OS,则可以打包Perl模块。我已经开源了一些代码来帮助解决此问题:Perl模块构建器虽然还很粗糙,但是确实可以使用,并且可以在我们自己的代码以及CPAN模块上使用,这使部署变得更加容易。
还有一个项目可以使所有CPAN都获得RedHat rpm,Dave Cross在RPM-Land中讲了Perl,这可能有用。
如果我们使用的是没有打包功能的其他系统,那么rsync选项(安装在一台计算机上,然后再rsync到另一台计算机上)应该也可以正常工作,请注意,如果需要,我们可以安装Windows共享并通过unix将rsync同步到它。
使用像Puppet这样的中央管理器,使得从安装代码到管理用户和电子邮件配置,在集群中创建和维护计算机的工作变得更加容易。还有一个Perl项目正在做类似的事情,但这尚未公开。