在多台主机上并行执行不同的命令

在多台主机上并行执行不同的命令

我正在寻找一个可以运行一系列命令的工具,类似现有工具:

parallel -h
parallel [OPTIONS] command -- arguments
    for each argument, run command with argument, in parallel
parallel [OPTIONS] -- commands
    run specified commands in parallel

但我希望这些命令可以在多台计算机上通过 ssh 运行,并具有与多台主机通信的一些优点。我pssh已经pdsh开发出一些可行的东西,,但是与这些工具相比,它的 ssh 处理根本不算什么 —— 我无法停止它们所有,甚至看不到它们的所有输出。

如果该工具具有一些基本的负载平衡功能,那就更好了,但我当时想使用单独的工具进行主机选择。(如果有一个用于查询负载、内存以及计算机是否处于交互使用状态的好工具,那也不错,但我已经编写了一些足以进行主机选择的工具。)这不是在集群上,我不想依赖 sshd 以外的守护进程,也不想让管理员安装像 Condor 这样的严肃的集群作业调度程序。我在这些计算机上都没有 root 访问权限。

编辑:强调一下,我想跑不同的命令在每个主机上 — — 通常使用不同的参数运行相同的程序,如parallel上面的第一个使用示例。

答案1

啊!看起来GNU 版本的并行(不是我安装的那个)确实能做到这一点。没有负载平衡,我还没有尝试过它对每个 stdout 和 stderr 做了什么,但这正是我想要的。

To run commands on more than one remote computer run:
seq 10 | parallel --sshlogin server.example.com,server2.example.net echo

不幸的是,我已经编写了一个脚本,它可以提供状态更新,具有可配置的输出设置,并包含一些简单的负载平衡,所以我现在会坚持使用它。

答案2

Blockquote 编辑:为了强调,我想在每个主机上运行不同的命令。Blockquote

如果你想要不同的命令,并行部分在哪里?并行意味着在主机集合上启动相同的命令(并行运行)...如果你想在不同的主机上做不同的事情,这是一个连续的过程

答案3

你确实应该研究一下现有的众多集群技术。尝试查看Apache Hadoop我最近读了一篇很棒的文章,您可能也会对关于设置 10,000 核集群进行并行计算的主题感兴趣: http://goo.gl/A8hgX

答案4

clusterssh是另一个值得研究的工具。它更具交互性,因为它会为每个主机打开并平铺终端窗口。您还可以在每个终端中独立运行命令,或者同时在所有(或部分)终端中运行命令。例如,top一次在 12 个系统上运行,然后只在其中一个系统中追踪某个进程。

相关内容