Ver Feed RSS

lcmm84

Beowulf Cluster, Instalação e Configuração no Slackware 13

Avaliação: 2 votos, 5,00 média.
Cluster Beowulf – Instalação e Configuração

Resumo: Este documento apresenta a instalação e configuração de um cluster Beowulf, o mesmo é constituído por vários computadores ligados em rede de forma que trabalhem como se fosse uma única máquina de grande porte.

Abstract: This document provides installation and configuration of a Beowulf cluster, it consists of several networked computers so that they can work like a single large machine.

Palavras-chave: Beowulf; Cluster; instalação; Configuração; Slackware; mpi.


1. Introdução

O objetivo deste documento é mostrar como pode ser feita a instalação e configuração de um cluster beowulf para aplicações que necessitam de um alto desempenho.
Beowulf é o nome de um projeto para computação paralela, usando computadores comuns, não especializados e portanto mais baratos. O projeto foi criado por Donald Becker da NASA e hoje são usados em todo o mundo, principalmente para processamento de dados com finalidade científica. Cluster Beowulf são clusters de desempenho escaláveis, baseados em uma infraestrutura de hardware comum, rede privada e software open-source(linux).

2. Requisitos e Estrutura

Sistema Operacional: Slackware Linux 13.0 (instalação padrão)
Bilbioteca: lam-7.1.1-i486-1jac.tgz
Configurações de rede:
-Nó Master: 192.168.1.1
-Nó 01: 192.168.1.10
-Nó 02: 192.168.1.11
-Nó 03: 192.168.1.12

3. Configuração do Nó Master


3.1 -Habilitar os serviços rlogin, rexec e rsh.

Estes serviços estão associados ao super servidor “inetd”, para habilitá-los basta descomentar as respectivas linhasno arquivo de configuração do inetd /etc/inet.conf, através do comando:
#vim /etc/inet.conf

http://blog.lcmm.info/wp-content/upl...ster-inetd.png

Em seguida é necessário dar um restart no super servidor inetd, através do comando:
#/etc/rc.d/rc.inetd restart


3.2 Configuração de nomes.

Para facilitar a configuração e utilização do cluster é necessário criarmos um servidor de nomes, como o cluster “nano” não tem muitos nós, utilizaremos o arquivo hosts e não um servidor DNS, caso o cluster tenha muitos nós, é recomendado um servidor de nomes pois esta configuração do arquivo hosts deve ser feita em todos os nós.
Vamos editar o arquivo através do comando:
#vim /etc/hosts

Este arquivo deve conter a seguinte estrutura e conteúdo:
#127.0.0.1 localhost
192.168.1.1 master.nano master
192.168.1.10 no01.nano no01
192.168.1.11 no02.nano no02
192.168.1.12 no02.nano no03

3.3 Relação de Confiança

Agora iremos configurar o nó mestre para que ele tenha uma relação de confiança com os demais nós do cluster, para isso vamos editar o arquivo /etc/hosts.equiv, através do seguinte comando:


#vim /etc/hosts.equiv

Este arquivo deve conter a seguinte estrutura e conteúdo:

#localhost
master
no01
no02
no03

É necessário, também, criarmos um arquivo dentro da pasta home do usuario cluster, mas antes devemos criar o usuário cluster, através do comando:

#Adduser cluster

O Slackware solicitará algumas informações, não há necessidade de inserir dados nessas informações, é so ir apertando enter até o mesmo solicitar uma senha, esta senha será necessária para logar com o usuário e executar os “jobs” no cluster, portanto memorize-a.

Agora criaremos o arquivo na pasta dome do usuário cluster, através do comando:
#Vim /home/cluster/.rhosts

Note que este arquivo começa com o caractere “.”, o que para o linux significa que é um arquivo oculto, um simples ls dentro do diretorio não exibirá o arquivo, neste arquivo devemos inserir as mesmas informações e estrutura que colocamos no arquivo anterior:

master
no01
no02
no03

3.4 Servidor NFS

Nesta etapa iremos configurar o servidor NFS, no qual irá montar o diretório home do usuário cluster em todos os nós do cluster, caso contrario, ao rodar um “job”, deveriamos copiar o arquivo para todos os nós do cluster.

A instalação padrão do slackware 13, já tras o NFS, é necessário apenas dar poder de execução ao seu “daemon”, para isso execute o seguinte comando:
#Chmod +x /etc/rc.d/rc.nfsd

Agora temos que configurar o nfs para que ele compartilhe o diretório /home/cluster, para isso, devemos editar o arquivo /etc/exports e adicionar os compartilhamentos e as opções de montagem, execute o seguinte comando para editar o arquivo:
#Vim /etc/exports

E adicione o seguinte conteúdo ao arquivo:
/home/cluster no01 (rw,no_root_squash)
/home/cluster no02 (rw,no_root_squash)
/home/cluster no03 (rw,no_root_squash)

ou, para facilitar a escalabilidade:

/home/cluster * (rw,no_root_squash)

Na configuração anterior, foi configurado um compartilhamento para cada nó, poderiamos ter feito somente um compartilhamento para todos os nós, mas por questões de segurança, especificamos os nés que terão acesso ao compartilhamento, o parametro rw, permite a leitura e escrita no compartilhamento e o parametro no_root_squash, remove permissões de root no compartilhamento.

Após Configurar os compartilhamentos, faz-se necessário reiniciar o servidor NFS, execute o seguinte comando para reiniciá-lo:
#/etc/rc.d/rc.nfsd restart
E
#/etc/rc.d/rc.rpc restart

3.5 Bilbiotecas LAM-MPI

Neste passo iremos instalar um conjunto de programas e bibliotecas chamado LAM-MPI, no qual permite que um conjunto de maquinas seja utilizado de forma paralela. Iremos utilizar a versão 7.1.1. Existe um pacote pré-compilado para o slackware no site http://www.linuxpackages.net, com o nome “lam-7.1.1-i486-1jac.tgz”, copie o arquivo para a pasta /root e execute o seguinte comando:
#Installpkg lam-7.1.1-i486-1jac.tgz

No fim da instalação deve aparecer “Package lam-7.1.1-i486-1jac.tgz installed.”
Depois de instalado, o LAM-MPI irá gerar um arquivo de configuração chamado /etc/lam-bhost.def, edite ele com o comando:
#vim /etc/lam-bhost.def

Este arquivo deve conter o nome de todos os nós do cluster, portanto ele deve ficar assim:
master
no01
no02
no03

4. Configuração dos Nós Escravos


4.1 Habilitar os serviços rlogin, rexec e rsh.

Estes serviços estão associados ao super servidor “inetd”, para habilitá-los basta descomentar as respectivas linhasno arquivo de configuração do inetd /etc/inet.conf, através do comando:
#vim /etc/inet.conf

http://blog.lcmm.info/wp-content/upl...ster-inetd.png

Em seguida é necessário dar um restart no super servidor inetd, através do comando:
#/etc/rc.d/rc.inetd restart


4.2Configuração de nomes.

Para facilitar a configuração e utilização do cluster é necessário criarmos um servidor de nomes, como o cluster “nano” não tem muitos nós, utilizaremos o arquivo hosts e não um servidor DNS, caso o cluster tenha muitos nós, é recomendado um servidor de nomes pois esta configuração do arquivo hosts deve ser feita em todos os nós.
Vamos editar o arquivo através do comando:
#vim /etc/hosts

Este arquivo deve conter a seguinte estrutura e conteúdo:
#127.0.0.1 localhost
192.168.1.1 master.nano master
192.168.1.10 no01.nano no01
192.168.1.11 no02.nano no02
192.168.1.12 no02.nano no03

4.3 Relação de Confiança

Agora iremos configurar os nós escravos para que os mesmos tenham uma relação de confiança com os demais nós do cluster, para isso vamos editar o arquivo /etc/hosts.equiv, através do seguinte comando:


#vim /etc/hosts.equiv

Este arquivo deve conter a seguinte estrutura e conteúdo:

#localhost
master
no01
no02
no03

É necessário, também, criarmos um arquivo dentro da pasta home do usuario cluster, mas antes devemos criar o usuário cluster, através do comando:

#Adduser cluster

O Slackware solicitará algumas informações, não há necessidade de inserir dados nessas informações, é so ir apertando enter até o mesmo solicitar uma senha, esta senha será necessária para logar com o usuário e executar os “jobs” no cluster, portanto memorize-a.

Agora criaremos o arquivo na pasta dome do usuário cluster, através do comando:
#Vim /home/cluster/.rhosts

Note que este arquivo começa com o caractere “.”, o que para o linux significa que é um arquivo oculto, um simples ls dentro do diretorio não exibirá o arquivo, neste arquivo devemos inserir as mesmas informações e estrutura que colocamos no arquivo anterior:

master
no01
no02
no03

4.4 Cliente NFS

Neste passo iremos configurar o cliente nfs para que monte o compartilhamento na inicialização do sistema, para isso execute o comando abaixo:

Cat >> /etc/fstab (aperte ENTER)
master:/home/cluster /home/cluster nfs rw,hard,intr 0 0

4.5 Bilbiotecas LAM-MPI

Neste passo iremos instalar um conjunto de programas e bibliotecas chamado LAM-MPI, no qual permite que um conjunto de maquinas seja utilizado de forma paralela. Iremos utilizar a versão 7.1.1. Existe um pacote pré-compilado para o slackware no site http://www.linuxpackages.net, com o nome “lam-7.1.1-i486-1jac.tgz”, copie o arquivo para a pasta /root e execute o seguinte comando:
Installpkg lam-7.1.1-i486-1jac.tgz
No fim da instalação deve aparecer “Package lam-7.1.1-i486-1jac.tgz installed.”


5. Teste do Cluster


Para inicializar o cluster, vc deve estar logado com o usuário cluster, como root o mpi não irá inicializar, com o usuário cluster execute o seguinte comando:

lamboot

Para checar os nós que estão respondendo execute o comando:

lamnodes

Testando um programa em C
Codigo fonte do programa hello.c:

/*
* $Id: hello.c,v 1.3 2002/11/23 04:06:57 jsquyres Exp $
*
* Copyright (c) 2001-2002 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 1998-2001 University of Notre Dame.
* All rights reserved.
* Copyright (c) 1994-1998 The Ohio State University.
* All rights reserved.
*
* This file is part of the LAM/MPI software package. For license
* information, see the LICENSE file in the top level directory of the
* LAM/MPI source distribution.
*
* $HEADER$
*
* Sample hello world MPI program for testing MPI.
*/

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int
main(int argc, char **argv)
{
int rank, size;

/* Start up MPI */

MPI_Init(&argc, &argv);

/* Get some info about MPI */

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/* Print out the canonical "hello world" message */

printf("Hello, world! I am %d of %d\n", rank, size);

/* All done */

MPI_Finalize();
return 0;
}


1-Compile o programa com o comando:
#mpicc –o hello hello.c

2 – copie o programa hello para a pasta do usuário cluster, para isso execute o seguinte comando:
#cp hello /home/cluster

3 – execute o programa com o comando:
#mpirun n0-2 /home/cluster/hello


Codigo Fonte Programa PI:

/*
* Copyright (c) 2001-2002 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 1998-2001 University of Notre Dame.
* All rights reserved.
* Copyright (c) 1994-1998 The Ohio State University.
* All rights reserved.
*
* This file is part of the LAM/MPI software package. For license
* information, see the LICENSE file in the top level directory of the
* LAM/MPI source distribution.
*
* $HEADER$
*
* $Id: cpi.c,v 1.4 2002/11/23 04:06:58 jsquyres Exp $
*
* Portions taken from the MPICH distribution example cpi.c.
*
* Example program to calculate the value of pi by integrating f(x) =
* 4 / (1 + x^2).
*/

#include <stdio.h>
#include <math.h>
#include <mpi.h>


/* Constant for how many values we'll estimate */

#define NUM_ITERS 1000


/* Prototype the function that we'll use below. */

static double f(double);


int
main(int argc, char *argv[])
{
int iter, rank, size, i;
double PI25DT = 3.141592653589793238462643;
double mypi, pi, h, sum, x;
double startwtime = 0.0, endwtime;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];

/* Normal MPI startup */

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);

printf("Process %d of %d on %s\n", rank, size, processor_name);

/* Do approximations for 1 to 100 points */

for (iter = 2; iter < NUM_ITERS; ++iter) {
h = 1.0 / (double) iter;
sum = 0.0;

/* A slightly better approach starts from large i and works back */

if (rank == 0)
startwtime = MPI_Wtime();

for (i = rank + 1; i <= iter; i += size) {
x = h * ((double) i - 0.5);
sum += f(x);
}
mypi = h * sum;

MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

if (rank == 0) {
printf("%d points: pi is approximately %.16f, error = %.16f\n",
iter, pi, fabs(pi - PI25DT));
endwtime = MPI_Wtime();
printf("wall clock time = %f\n", endwtime - startwtime);
fflush(stdout);
}
}

/* All done */

MPI_Finalize();
return 0;
}


static double
f(double a)
{
return (4.0 / (1.0 + a * a));
}


1-Compile o programa com o comando:
mpicc –o cpi cpi.c

2 – copie o programa hello para a pasta do usuário cluster, para isso execute o seguinte comando:
cp cpi /home/cluster

3 – execute o programa com o comando:
Mpirun n0-2 /home/cluster/CPI

Versão em PDF: ClusteBeowulfLCM.pdf

Luiz Claudio Martins Maia
Bacharel em Ciência da Computação – [email protected]

Mais informações e atualizações em:
http://blog.lcmm.info/?p=64

Espero ter ajudado!

[]'s
Lcm
http://blog.lcmm.info

Atualizado 30-05-2010 em 17:35 por Magal

Categorias
Artigos , Tutoriais

Comentários

  1. Avatar de sabatino
    Olá luiz, tudo bem?!
    Você ainda teria as imagens usadas neste post?! Poderia atualizá-lo?!
    Estou tentando reproduzir este senário para fins acadêmicos e a falta das imagens no post está dificultando! =/

    Obrigado e abs.
    Sabatino

+ Enviar Comentário