Execução paralela de diferentes comandos em múltiplos hosts

6

Estou procurando uma ferramenta para executar uma série de comandos como a ferramenta existente:

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

Mas gostaria que esses comandos fossem executados por ssh em vários computadores, com algumas das sutilezas de pssh ou pdsh para se comunicar com muitos hosts. Eu tenho hackeado algo que funciona, , mas é manipulação ssh não é nada em comparação com essas ferramentas - não consigo pará-las todas ou até mesmo ver todas as suas saídas.

Ainda melhor se a ferramenta tiver algum balanceamento de carga básico, mas eu estava pensando em usar uma ferramenta separada para a seleção de host. (Uma boa ferramenta para consultar carga, memória e se um computador estiver em uso interativo também seria bem-vinda, mas eu já escrevi algo que será suficiente para a seleção de host.) Isso não está em um cluster, e eu não Deseja confiar em daemons que não sejam sshd ou peça aos administradores que instalem um agendador de tarefas de cluster sério como o Condor. Eu não tenho acesso root em nenhum desses computadores.

Editar: Para enfatizar, eu quero executar comandos diferentes em cada host - normalmente executando o mesmo programa com argumentos diferentes, como no primeiro exemplo de uso de parallel acima.

    
por Thomas 13.04.2011 / 16:25

5 respostas

3

Ah! Parece que a versão GNU do paralelo (não a que eu tinha instalado) faz isso. Sem balanceamento de carga, e eu não tentei ver o que acontece com cada stdout e stderr, mas isso é exatamente o que eu queria.

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

Infelizmente, escrevi um script que fornece atualizações de status, tem configurações de saída configuráveis e incorpora um balanceamento de carga simples, por isso vou continuar com ele por enquanto.

    
por 26.04.2011 / 00:13
1

Blockquote Edit: To emphasize, I want to run different commands on each host. Blockquote

se você quiser comandos diferentes, onde está a parte paralela? Paralelo significa iniciar o mesmo comando em uma coleção de hosts (rodando em paralelo) ... se você quiser fazer coisas diferentes em hosts diferentes que é um processo sequencial

    
por 14.04.2011 / 02:31
0

Você realmente deve procurar em uma das muitas tecnologias de clustering existentes. Tente ver o Apache Hadoop . Recentemente, li um ótimo artigo que você pode achar interessante sobre o assunto também sobre como configurar um cluster de 10.000 núcleos para fazer computação paralela: link

    
por 13.04.2011 / 16:33
0

Eu usei mussh para isso, é baseado em bash mas roda em paralelo. Estou muito feliz com isso.

Eu também vi algumas palestras para rshall (que apesar de ter RSH no nome, usa ssh nativamente) nos Linuxfests locais, é baseado em perl e pode usar uma fonte externa para consultar listas de hosts, mas espera que algum host informações em formatos específicos.

Nenhum deles tem filas ou agendamento de trabalhos, embora você possa executá-los via cron ou at se você quiser.

Nenhum destes requer acesso root, mas eles exigem que você tenha autenticação baseada em chave nos sistemas.

    
por 13.04.2011 / 17:41
0

clusterssh é outra ferramenta que pode valer a pena investigar. É mais interativo, pois abre e bloqueia janelas de terminal para cada host. Você também pode executar comandos em cada terminal separados um do outro ou em todos (ou alguns) de uma só vez. Por exemplo, executando top em 12 sistemas por vez, perseguindo um processo em apenas um deles.

    
por 14.04.2011 / 00:48