Montagem de um Cluster Beowulf Debian Lenny

Anselmo, Evandro M. 1


Motivação

Devido a necessidade de alguns integrantes que compõem o Laboratório de Ciências Atmosféricas (LCA) do Departamento de Física (DFI) da Universidade Federal de Mato Grosso do Sul (UFMS) trabalharem com Modelagem Atmosférica em pesquisas, foi realizado a montagem de um cluster composto inicialmente por duas máquinas para processamento em paralelo utilizando Message Passing Interface (MPI).

Introdução

Este artigo é uma síntese de documentações lidas relacionadas a montagem de um Cluster Beowulf com adaptações feitas para o funcionamento de tudo em um sistema Debian GNU/Linux versão 5.0 codinome Lenny. Trata-se de uma abordagem técnica, em que usuários possam aproveitar uma rede de computadores para processamento de programas que utilizam MPI, por exemplo o BRAMS (Brazilian Regional Atmospheric Modeling System). O objetivo deste artigo não é descrever como fazer programas para processamento em paralelo, estruturar cabeamento de rede ideal para clusters ou entrar em questões mais teóricas a respeito do assunto e sim algo bem técnico relacionado a configuração das máquinas para a funcionamento da ferramenta de trabalho que é o Cluster.

Será realizada a configuração de duas máquinas para processamento em paralelo, portanto no final da leitura deste artigo o usuário será capaz de inserir quantas máquinas quiser em seu Cluster Beowulf Debian Lenny.

Se o usuário não tem familiaridade com sistemas operacionais Linux, primeiramente, este deve conhecer de maneira geral como é a estrutura desses sistemas, comandos básicos, edição de texto via terminal, hierarquia de usuários, configuração de rede, comunicação SSH (Secure Shell) e RSH (Remote Shell). Se necessário, aconselho a leitura do Guia Foca Linux [3], que sempre me auxiliou bastante.

Também não será feita uma abordagem a respeito da instalação da distribuição Debian GNU/Linux Lenny. Para iniciar a execução dos procedimentos deste artigo o usuário deverá ter instalado o Debian Lenny nas duas máquinas que irão compor o cluster.

O Debian versão 5.0 codinome Lenny pode ser adquirido através do site da distribuição www.debian.org assim como diversos manuais.

Montando o Cluster Debian Lenny

Iremos realizar a instalação do LAM/MPI que irá proporcionar o processamento em paralelo de programas em uma rede de computadores com sistema Debian, semelhante ao descrito em [2]. Para saber mais a respeito da implementação LAM/MPI em um sistema acesse www.lam-mpi.org.

Escolha qual será a máquina principal do cluster (node0) e a máquina escrava (node1). A máquina principal será onde iremos instalar os programas que irão utilizar MPI. Neste caso foi configurado o hostname da máquina principal como master e o hostname da máquina escrava como brams1.

Instalação dos Pacotes Necessários

Na máquina master, estando seu sistema sincronizado com um repositório oficial Debian Lenny, teremos que instalar os seguintes pacotes:

lam-mpidoc - Documentation for the Message Passing Interface standard 2
lam-runtime - LAM runtime environment for executing parallel programs
lam4-dev - Development of parallel programs using LAM
mpich-bin - MPI parallel computing system implementation
libmpich1.0-dev - mpich static libraries and development files
libmpich1.0gf - mpich runtime shared library
rsh-client - rsh clients
rsh-server - rsh servers
nfs-kernel-server - Kernel NFS server support

Então execute:

master:~# apt-get install lam-mpidoc lam-runtime lam4-dev mpich-bin
libmpich1.0-dev libmpich1.0-dev libmpich1.0gf rsh-client rsh-server
nfs-kernel-server

Configurações do Cluster

Os procedimentos seguintes devem ser realizados em todos os computadores que compõem o cluster.

Com o usuário root, edite o arquivo /etc/securetty acrescentando as linhas:

rlogin
rsh

Editar o arquivo /etc/hosts.equiv acrescentanto os "hostnames" do cluster:

master
brams1

Para evitar problemas com permissões, adicione um usuário e grupo, neste caso o usuário lca e o grupo paralelo:

master:~# adduser lca
master:~# groupadd paralelo

brams1:~# adduser lca
brams1:~# groupadd paralelo

Adicione o usuário lca ao grupo paralelo configurando o arquivo /etc/group de maneira que o usuário lca e o grupo paralelo possuam o mesmo UID 3 e GID 4 em cada "node". Por exempo:

master:~# cat /etc/group
...
lca:x:1800:paralelo
parall:x:1101:
...

e

brams1:~# cat /etc/group
...
lca:x:1800:paralelo
parall:x:1101:
...

Apenas no master edite o arquivo /etc/exports, compartilhando os diretórios /home/lca e /usr via NFS (Network File System) conforme exempo:

/home/lca/ *(rw,no_root_squash)
/usr/ *(rw,no_root_squash)

Edite o arquivo /etc/mpich/machines.LINUX, adicionando os "hostnames" do cluster. Se alguma máquina possuir n processadores adicione, hostname:n. Por exemplo para máquinas com dois processadores:

master:2
brams:2

Com o usuário lca "logado" crie o arquivo /home/lca/.rhosts contendo os "hostnames" dos computadores do cluster:

master
brams1

Crie também um arquivo com mesmo conteúdo presente no .rhosts (contendo os "hostnames"), por exempo /home/lca/lamhosts, para uso do pacote lam-runtime.

Ao executar programas MPI no cluster, as máquinas devem possuir as informação contidas no HD da máquina master. Portanto devemos montar os diretórios compartilhados via NFS em cada computador escravo editando o arquivo /etc/fstab conforme o exemplo abaixo:

brams1:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/sda1       /               reiserfs notail          0       1
/dev/sda6       /home           reiserfs defaults        0       2
/dev/sda5       none            swap    sw              0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0
192.168.1.2:/home/lca /home/lca nfs exec,dev,suid,rw  1 1
192.168.1.2:/usr/ /usr/ nfs exec,dev,suid,rw  1 1

Execute em brams1:

brams1:~# mount -a


Verificando as Configurações

Tente executar algum comando via rsh entre as máquinas. A comunicação rsh deve acontecer sem pedir senha. Por exemplo, execute:

lca@master:~$ rsh brams1 w
 17:42:30 up  1:23,  1 user,  load average: 0,00, 0,00, 0,00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.7.9      17:32    2:42m  0.00s  0.00s -bash
lca@master:~$

Note que o comando w foi executado na máquina master remotamente em brams1 sem erros e sem pedir senha. O comando w mostra os usuários logados no sistema.

No caso de erros "[...] existe ainda um teste para saber se o Debian realmente está utilizando o programa rsh ou o ssh no seu lugar [...] Para sabermos se estamos utilizando o programa correto, execute como root[:][2]

master:~# update-alternatives --display rsh
rsh - estado é auto
 ligação atualmente aponta para /usr/bin/netkit-rsh
/usr/bin/ssh - prioridade 20
 escravo rsh.1.gz: /usr/share/man/man1/ssh.1.gz
/usr/bin/netkit-rsh - prioridade 100
 escravo rsh.1.gz: /usr/share/man/man1/netkit-rsh.1.gz
'Melhor' versão atual é /usr/bin/netkit-rsh.
master:~#

Se a 'Melhor' versão atual for o netkit-rsh estamos utilizando o programa correto. Caso contrário execute o comando:

master:~# update-alternatives --config rsh

Existem 2 alternativas que fornecem 'rsh'.

  Seleção      Alternativa
-----------------------------------------------
          1    /usr/bin/ssh
*+        2    /usr/bin/netkit-rsh

Pressione enter para manter o padrão[*] ou digite o número da seleção:

Escolha o número que indica o executável /usr/bin/netkit-rsh e aperte enter.

Estando as máquinas comunicando-se via RSH sem senha vamos testar o sistema LAM/MPI. Execute na máquina master, com o usuário lca:

lca@master:~$ lamboot -v lamhosts

LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University

n-1<4905> ssi:boot:base:linear: booting n0 (master)
n-1<4905> ssi:boot:base:linear: booting n1 (brams1)
n-1<4905> ssi:boot:base:linear: finished
lca@master:~$
Note que o comando lamboot deve reconhecer os "nodes" (n0 e n1 ) do cluster.

Quando instalamos o pacote libmpich1.0-dev, este grava em seu hd, alguns programas MPI como exemplo para verificação do processamento em paralelo das máquinas do cluster. Iremos utilizar o programa cpi.c que calcula o valor de $ \pi$ .

Copie o programa cpi.c para o diretório do usuário cluster:

lca@master:~$ cp /usr/share/doc/libmpich1.0-dev/examples/pi/cpi.c ~/
lca@master:~$

Vamos compilar o programa cpi.c:

lca@master:~$ mpicc cpi.c -o cpi 
lca@master:~$

Para calcularmos o valor de $ \pi$ utilizando os dois computadores em paralelo devemos executar:

lca@master:~$ mpirun -np 4 cpi
Process 2 on master
Process 0 on master
Process 1 on brams1
Process 3 on brams1
pi is approximately 3.1416009869231245, Error is 0.0000083333333314
wall clock time = 0.000278
lca@master:~$

A saída do comando deve ser conforme descrita acima, o que indica o funcionamento do cluster. O comando -np 4 representa o número de processos enviados para os nodes. É possível também especificar quais nodes serão utilizados no processamento através do comando mpirun. Para mais informações consulte o manual do comando.

lca@master:~$ man mpirun
MPIRUN(1)               LAM COMMANDS                 MPIRUN(1)

NAME
       mpirun - Run MPI programs on LAM nodes.

...

lca@master:~$


Considerações Finais

Em alguns artigos lidos disponíveis na web, recomenda-se que a comunicação entre as máquinas do cluster seja através de SSH, porém conforme [1] a comunicação entre os nodes deste artigo foram feitas via RSH devido a problemas com permissões entre os arquivos que contém as chaves de criptografia (authorized_ keys) de cada usuário nos nodes. A única vantagem de utilizar comunicação SSH é que as informações trafegadas na rede são criptografadas e como se trata de redes locais, neste caso não há necessidade de tal procedimento de segurança.

Em caso de um cluster com grande número de máquinas o cabeamento da rede não deve ser convencional e sim estruturado de maneira que a comunicação entre cada node com o computador principal (node0) seja rápida e demorar praticamente o mesmo intervalo de tempo, por exemplo, redes GigE, Mirynet, Infiniband, Quadrics, etc.


Índice Remissivo

.rhosts
Configurações do Cluster
/etc/exports
Configurações do Cluster
/etc/fstab
Configurações do Cluster
/etc/group
Configurações do Cluster
/etc/hosts.equiv
Configurações do Cluster
/etc/mpich/machines.LINUX
Configurações do Cluster
/etc/securetty
Configurações do Cluster
adduser
Configurações do Cluster
BRAMS
Introdução
Cluster Beowulf Debian Lenny
Introdução
Considerações Finais
Considerações Finais
cpi.c
Verificando as Configurações
Debian GNU/Linux
Introdução | Introdução
groupadd
Configurações do Cluster
Instalação dos Pacotes Necessários
Instalação dos Pacotes Necessários
Introdução
Introdução
LAM/MPI
Montando o Cluster Debian
lamboot
Verificando as Configurações
lamhosts
Configurações do Cluster
Montando o Cluster Debian Lenny
Montando o Cluster Debian
Motivação
Motivação
MPI
Introdução
mpirun
Verificando as Configurações
usuário e grupo
Configurações do Cluster
Verificando as Configurações
Verificando as Configurações

Referências Bibliográficas

1
ALVES, MARCOS J. P.
Computação Baseada em Clusters.
disponível em: http://augustocampos.net/revista-do-linux/041/tutorial_cluster_beowulf.html, acessado em 02 Dez. 2008.

2
SILVA, BRIVALDO A. Jr.
Instalando o LAM-MPI no Debian.
disponível em: www.dct.ufms.br/~marco/paralelos2006/lammpi-debian.pdf, acessado em 14 Nov. 2008.

3
SILVA, GLEYDSON M.
Guia Foca Linux.
disponível em: http://focalinux.cipsga.org.br/, acessado em 08 Nov. 2008.

About this document ...

Montagem de um Cluster Beowulf Debian Lenny

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -address ' ' arquivo.tex

The translation was initiated by Evandro Moimaz Anselmo on 2008-12-03


Footnotes

... M.1
Aluno do programa de Pós-graduação/Mestrado em Física Aplicada pela UFMS, integrante do LCA (www.lca.ufms.br), com pesquisa relacionada à Eletricidade Atmosférica. Para contato, e-mail: evandro@debian-ms.org
... standard2
Leitura recomendável
... UID3
UserID
... GID4
GroupID