como usar vários computadores como um cluster?

1

Eu tenho 7 computadores rodando o Gentoo Linux com processadores Quad-Core e eu quero poder distribuir a execução de um programa para todas essas máquinas. Eu tenho alguns programas multi-threaded e eu queria usar todas as 28 CPUs disponíveis no meu cluster em vez de executar 7 cópias do programa, em cada nó.

é como a idéia de distcc : Eu tenho meu projeto C / C ++, e se eu compilar as fontes com distcc em vez de gcc , ele irá distribuir o processo de compilação para vários computadores, e eu não tenho que mudar nada nem mesmo no Makefile.

para o cluster, seria melhor se eu não precisasse alterar nada no código-fonte do meu programa (embora eu ache impossível). mas eu posso mudar o programa para usar uma API externa, se necessário.

    
por cd1 17.08.2009 / 22:19

4 respostas

6

Existem algumas maneiras de fazer isso, mas duvido que qualquer uma delas permita que você execute seu código como está.

O

Hadoop parece ser uma boa opção para certos tipos de cargas de trabalho e é amplamente utilizado e mantido pelo Yahoo e outros.

Clusters

Beowulf são mais de um cluster tradicional. Se você olhar para a página da Wikipédia do Beowulf , há links para alternativas, bem como para o Linux Distros, que se concentram em clusters tais como rochas .

    
por 17.08.2009 / 22:32
2

Da sua pergunta, parece que você quer que todas as suas máquinas se unam magicamente para criar um grande computador no qual você possa entrar e executar programas. Essa mágica é chamada SSI (Single System Image) e há vários pacotes de clustering que fazem isso. Experimente qualquer um dos listados na página da wikipedia .

Se você quer um cluster tradicional ou configuração de rede, você só precisa de um gerenciador de tarefas como Torque ou Grid Engine . ROCKS é uma maneira rápida de começar este tipo de configuração.

    
por 17.08.2009 / 23:34
2

A resposta para isso é altamente aplicativo específico. 3dinfluence já mencionou a possibilidade do Hadoop, o que é ótimo se o seu aplicativo se quebrar no modelo de execução Map-Reduce.

Se você estiver planejando distribuir sua carga de trabalho para vários nós, mas ainda quiser ter apenas uma instância de seu aplicativo em um modelo de execução semelhante a um thread, precisará procurar alguma forma de MPI.

MPI é um padrão com uma interface comum, mas existem várias implementações, como OpenMPI e MPICH . Essencialmente, você projeta seu aplicativo para gerar várias cópias que passam mensagens entre si. O MPI então abstrai o método real de comunicação. Em vez disso, ele fornece uma série de funções primitivas, como enviar, receber e transmitir, usadas no design do aplicativo. A comunicação real é então tratada por um módulo na pilha MPI escolhida.

O OpenMPI inclui muitos transportes, incluindo memória compartilhada, TCP / IP, InfiniBand, Myrinet Express e muito mais. Qual deles e como você os configura é altamente dependente de aplicativos.

Normalmente, as tarefas do MPI serão alocadas a nós no cluster usando algum tipo de sistema de enfileiramento de lotes, como Torque ou Mecanismo Sun Grid . Isso se torna mais útil se você compartilhar seu cluster entre vários usuários e precisar agendar seus recursos de cluster.

Sugiro que você confira o site do projeto do Cluster do Gentoo e dê uma olhada em alguns dos recursos vinculados . Eles ajudarão você a entender melhor os aplicativos em execução em um ambiente em cluster e ajudarão a restringir as áreas nas quais você precisa de mais ajuda.

    
por 17.08.2009 / 23:35
0

Você pode considerar testar essa ideia com uma distribuição do LiveCD como Cluster Knoppix .

    
por 18.08.2009 / 03:50

Tags