5

有人对将 Perl 模块部署到无共享集群的方法有建议吗?

我们目前的方法是非常手动的。

  1. 拿下一半集群
  2. 将 Perl 模块(CPAN 样式模块)复制到宕机的集群成员
  3. ssh 到每个成员并perl Makefile.pl; make ; make install在要安装的每个模块上运行
  4. 确认部署
  5. 在服务新部署的集群成员,停止服务旧集群成员并重复步骤 2 -> 4

这显然远非最佳,是否有人拥有或知道用于将 Perl 模块部署到无共享集群的良好工具链?

4

7 回答 7

4

使一个节点脱机,安装 Perl,然后使用它来重新映像其他节点。

至少,这就是我想象的您希望在无共享集群中安装软件的方式。Perl 只是您碰巧安装的应用程序。

于 2008-09-25T03:43:05.330 回答
3

假设所有机器都是相同的,您应该能够保持一个规范安装,并使用 rsync 或其他东西来保持其他机器的更新。

于 2008-09-25T03:57:45.230 回答
2

过去,我开发了一个 Perl 程序,它使用 Expect 模块(来自 CPAN)基本上自动化您描述的过程,自动 ssh 到每个主机,复制任何必要的文件,并执行安装。不幸的是,这是为客户现场开发的,所以我无法访问要共享的代码。不过,如果您熟悉 Expect,那么设置起来应该不会太难。

于 2008-09-25T03:46:12.093 回答
2

我们目前有一个进行数据处理的集群 Perl 应用程序。我们还有许多 CPAN 模块和我们开发的软件所依赖的模块。当您说“不共享任何内容”时,我假设您指的是诸如 NFS 挂载之类的东西。

如果机器具有相同的配置,那么您可以将整个应用程序构建到单个目录结构中(例如:/opt/my-app),将其打包,这可能是您唯一需要推送到盒子。

至于将其部署到盒子,您也许可以使用Capistrano。我们开发了一些我们自己的集群实用程序,它们搭载 ssh - 我已经发布了该实用程序的一种形式:parallel-jobs。它的自述文件显示了执行多个并行 ssh 命令的示例。扩展该程序以了解您的集群然后能够在集群中执行相同的命令(而不是一系列不同的命令)是一小步。

于 2008-09-25T03:55:54.020 回答
2

如果您使用的是 Debian 或 Ubunto 操作系统,您可以打包您的 Perl 模块 - 我已经开源了一些代码来帮助解决这个问题:Perl module builder它仍然非常粗糙但确实可以工作,并且可以在您自己的代码以及 CPAN 上工作模块,这使得部署更加容易。

还有一个为所有 CPAN 获取 RedHat rpms 的项目,Dave Cross在 RPM-Land 中发表了一个演讲 Perl,这可能是有用的。

如果您在其他没有打包的系统上,那么 rsync 选项(安装在一台机器上,然后rsync到其他机器)也应该可以工作,请注意,如果需要,您可以跨 unix 挂载一个 windows 共享和 rsync 到它。

使用像Puppet这样的中央管理器使得在集群中创建和维护机器变得更容易管理,从安装代码到管理用户和电子邮件配置。还有一个 Perl 项目正在筹备中,可以做类似的事情,但尚未公开。

于 2008-09-25T09:20:55.580 回答
1

Capistrano是一个允许您在一组服务器上运行命令的工具;它非常适合使您的任务变得更加轻松。

Puppet进一步降低自动化线,但也很复杂,它允许您定义一组服务器,赋予它们角色,然后将代码集推送到订阅特定角色的每台机器。

于 2008-09-25T04:49:39.210 回答
0

我不确定什么是无共享集群,但如果它使用一些基本的 *nix 系统,如 Fedora、Mandriva 或 Ubuntu。许多 perl 模块是为特定体系结构预编译的。您可以轻松运行这些。

如果这些系统具有相同的架构,您可以像其他人所说的那样将编译的模块从一个系统复制到另一个系统,只需确保您在接收系统上也拥有所有依赖项。

于 2008-09-25T03:48:30.980 回答