Clusters em Bioinformática

De Wiki DAINF
Edição feita às 16h52min de 9 de setembro de 2009 por Adolfo (disc | contribs)

Tabela de conteúdo

Introdução

Este documento detalha o processo de instalação de um cluster em ambiente Linux. O ponto inicial consiste na escolha de uma distribuição conveniente para os propósitos do cluster, como desempenho e estabilidade. Por motivos de incompatibilidade com o hardware disponível, especificamente as placas Intel nos computadores Quad-core e Dual-core, o uso do Debian e Ubuntu Server teve que ser descartado, e dessa forma optou-se pelo Ubuntu Desktop. Por ser um sistema derivado do Debian, atende aos quesitos iniciais e com a vantagem de ter uma enorme gama de pacotes disponíveis para instalação, assim como drivers para hardware mais atual.

Instalado o sistema operacional, deve-se fazer a configuração da rede. O servidor do cluster deve possuir duas placas: uma para comunicação com a rede externa, conectada à Internet, e outra para a comunicação interna. A rede externa atribui IP via DHCP, e para a rede interna serão atribuídos endereços fixos. Os outros computadores (nós do cluster) serão conectados apenas à rede interna, e acessarão a Internet através do servidor, configurado como Gateway. Cada placa de rede, em ambiente Linux, possui um nome no formato ethx, portanto precisa-se conhecer a denominação de cada uma. A partir de agora, eth1 será considerada a placa correspondente à conexão externa, e eth0 à conexão interna.

Com o sistema operacional e a rede funcionais, será feita a instalação do software para funcionamento do cluster através de pacotes. Dentre os principais, cita-se o MPI<ref>Message Passing Interface, padrão para comunicação e troca de dados em computação paralela.</ref>, NFS<ref>Network File System, permite compartilhamento de arquivos.</ref>, ssh<ref>Secure Shell, protocolo de comunicação que permite acesso a máquinas conectadas em rede.</ref> e compiladores. O ssh deverá ser configurado para não exigir autenticação durante o acesso às outras máquinas, pois esta intervenção do usuário afetará medidas de tempo que possivelmente serão realizadas no cluster. Ao final, devemos configurar o MPI para usar o ssh ao invés de sua variante rsh, que é mais antiga e menos suportada.

Procedimento de configuração

O cluster é composto pelos seguintes computadores:

  1. Servidor Quad-core 2.4 GHz, 4 GB RAM, placa-mãe Intel DG33BU
  2. Três nós Dual-core 3.0 GHz, 2 GB RAM, placa-mãe Intel DG33BU
Mapa de rede

Sistema operacional

Em todos os computadores, instalar o Ubuntu 8.04 Desktop. É obrigatório que todas as máquinas possuam um usuário com mesmo nome, no caso, "simulador". Durante a instalação, já é possível definir o Host name de cada máquina, através da opção computer name. Para que seja possível editar arquivos privilegiados do sistema, utiliza-se sudo precedendo o comando em questão, como por exemplo a abertura de um editor de texto (sudo vim, sudo nano, etc).

Rede

No servidor, conectar o cabo da rede externa em eth1 e o cabo para rede interna em eth0 (será utilizado um hub). Nos outros computadores, conectar os cabos em eth0. Para iniciar a configuração, será modificado o arquivo /etc/network/interfaces. No servidor, esse arquivo terá o seguinte conteúdo:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.10.1
netmask 255.255.255.0
broadcast 192.168.10.0
network 192.168.10.0

auto eth1
iface eth1 inet dhcp

Define-se a placa eth0 para possuir um IP fixo e servir como Gateway. A placa eth1 foi definida para obter um IP automático via DHCP. Nos nós, editar o mesmo arquivo:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.1

Isso é um modelo para a configuração do primeiro nó (node1). Para os outros nós, alterar a linha address com o IP respectivo de cada máquina.

A próxima configuração é feita no arquivo /etc/hosts, de forma igual em todos os computadores. Isso fará com que cada máquina fique acessível pelo seu respectivo nome, como node1 para o primeiro nó de trabalho, em vez de um IP.

127.0.0.1 localhost
192.168.10.1 server
192.168.10.2 node1
192.168.10.3 node2
192.168.10.4 node3

Para que o servidor possa ser um Gateway, é necessário habilitar o IP Forwarding<ref>Capacidade de redirecionar endereços de IP via rede.</ref>. Para isso, edita-se o arquivo /etc/sysctl.conf e remove-se o caractere de comentário (#) da linha:

net.ipv4.ip_forward=1

Também é preciso configurar o iptables, gerenciador de regras de rede do Linux, para permitir o IP Forwarding. Para isso, adicionam-se as seguintes linhas ao arquivo /etc/rc.local:

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth1 -j MASQUERADE

Para que os nós consigam acessar a Internet através do servidor, devem ser configurados com o mesmo endereço de DNS. Isso é feito no arquivo /etc/resolv.conf:

nameserver endereço

O endereço DNS pode ser obtido no /etc/resolv.conf do servidor, e corresponde ao DNS distribuído pela rede externa via DHCP. Isso finaliza a instalação de rede nos computadores. Na sequência, é necessário reiniciá-los para que as configurações tomem efeito.

Pacotes

Os seguintes pacotes são necessários para o funcionamento do cluster:

  1. mpich-bin: base do MPI, inclui ferramentas de execução, documentação e exemplos.
  2. libmpich1.0-dev: ferramentas para compilação de códigos em MPI.
  3. nfs-common: base do NFS, para compartilhamento de arquivos.
  4. nfs-kernel-server: servidor NFS.
  5. ssh: para acesso remoto.
  6. build-essential: compiladores, tais como g++ e gcc.

No servidor, serão instalados os pacotes necessários com os comandos:

sudo apt-get update
sudo apt-get install mpich-bin libmpich1.0-dev nfs-common nfs-kernel-server ssh build-essential

Nos nós, o pacote nfs-kernel-server não é necessário:

sudo apt-get update
sudo apt-get install mpich-bin libmpich1.0-dev nfs-common ssh build-essential

ssh

O ssh deve ser configurado para que não seja exigida senha no momento do acesso. O processo a seguir é um exemplo para node1, e deve ser repetido nos outros nós. Tais comandos criam uma chave de confiança entre o servidor e cada nó, eliminando a necessidade de senha:

cd /home/simulador/.ssh
ssh-keygen -t dsa -f id_dsa
scp id_dsa.pub simulador@node1:/home/simulador/.ssh/id_dsa.pub
ssh simulador@node1
cd .ssh
cat id_dsa.pub >> authorized_keys
rm id_dsa.pub
exit

NFS

A seguir será feita a configuração do servidor. Todos os programas que serão executados no cluster deverão ser colocados no diretório compartilhado via NFS.

  1. Criar o diretório compartilhado em todos os computadores:
    mkdir Cluster
  2. Editar o arquivo /etc/exports, com o seguinte conteúdo:
    /home/simulador/Cluster *(rw,sync)

Isso define que o diretório será compartilhado em toda a rede com permissões de leitura e escrita, e alterações nessa pasta serão atualizadas em todos os computadores de forma automática.

Cada nó deve ser configurado para montar o diretório /home/simulador/Cluster, que está localizado no servidor principal. Isso é feito através da edição do arquivo '/etc/fstab:

192.168.10.1:/home/simulador/Cluster /home/simulador/Cluster nfs defaults 0 0

MPI

A configuração principal do MPI é feita no arquivo /etc/mpich/machines.LINUX, que define a lista de computadores disponíveis para a paralelização de um processo. Editar o arquivo em todos os computadores com o seguinte conteúdo:

server:4
node1:2
node2:2
node3:2

Os valores numéricos após cada hostname definem a quantidade de processadores em cada computador.

A seguir será definido o uso do ssh ao invés da variante mais antiga e menos segura, o rsh, pelo MPI. Isso é feito com o comando:

export P4_RSHCOMMAND=ssh

Também é necessário adicionar o comando ao arquivo /etc/rc.local. Isso é necessário para que o comando seja repetido cada vez que o cluster for reiniciado, ou desligado por algum motivo.

Informações gerais

Ao ligar o cluster, é necessário que o servidor seja iniciado antes dos nós, pois deve exportar a pasta compartilhada por NFS. Caso a ordem não seja respeitada, pode-se montar a pasta manualmente:

mount /home/simulador/Cluster

Para compilar um programa em MPI, é necessário copiá-lo para a pasta compartilhada, e utilizar o comando:

mpicc programa.c -o programa

Para executar o programa, utiliza-se:

mpirun -allcpus programa

Tal comando utiliza todos os processadores disponíveis no cluster para a execução. No funcionamento interno do MPI, os processos são disparados primeiro em todos os processadores de um nó, e quando todos estiverem sendo utilizados, a paralelização é feita em outro nó.

Notas

<references />

Ferramentas pessoais