Clusters em Bioinformática
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:
- Servidor Quad-core 2.4 GHz, 4 GB RAM, placa-mãe Intel DG33BU
- Três nós Dual-core 3.0 GHz, 2 GB RAM, placa-mãe Intel DG33BU
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:
- mpich-bin: base do MPI, inclui ferramentas de execução, documentação e exemplos.
- libmpich1.0-dev: ferramentas para compilação de códigos em MPI.
- nfs-common: base do NFS, para compartilhamento de arquivos.
- nfs-kernel-server: servidor NFS.
- ssh: para acesso remoto.
- 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.
- Criar o diretório compartilhado em todos os computadores:
mkdir Cluster
- 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 />