将Perl部署到无共享群集

时间:2020-03-06 14:42:10  来源:igfitidea点击:

有人对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项目正在做类似的事情,但这尚未公开。