Uma Abordagem para Alta Demanda de
Processamento Utilizando Cluster de Beowulf
Lı́liam Barroso Leal1 , Francisco Xavier de Vasconcelos Filho1
1
Ponto de Presença da Rede Nacional de Ensino e Pesquisa no Piauı́ - PoP-PI
Av. Odilon Araújo, 372, Piçarra, 64017-280, Teresina-PI, Brasil
{liliam,xfilho}@pop-pi.rnp.br
Abstract. In recent years the demand for more efficient processing and fast
has led many studies to consider the option of using computational clusters.
The clusters are a good alternative to assist in executing and delivering results for applications requiring high performance processing, giving them
an excellent cost / benefit. This paper presents a Beowulf cluster designed
to provide load balancing processing applications as well as simulations of
computer networking environments in the laboratory of Research and Information Technology Solutions - PSTI State University of Piaui, qualified
institution by the National Education and Research Network (RNP).
Resumo. Nos últimos anos a demanda por processamento cada vez mais
eficiente e rápido tem conduzido muitos estudos a considerar a opção de
utilização de clusters computacionais. Os clusters constituem uma boa alternativa para auxiliar na execução e obtenção de resultados de aplicações
que necessitam de processamento de alto desempenho, proporcionando a elas
um excelente custo/benefı́cio. Este artigo apresenta um cluster de Beowulf
destinado a prover o balanceamento de carga de processamento de aplicações, bem como de simulações de ambientes de redes computacionais, esta
solução foi implementada e testada no laboratório de Pesquisa e Soluções
em Tecnologia da Informação - PSTI da Universidade Estadual do Piauı́,
instituição qualificada pela RNP Rede Nacional de Ensino e Pesquisa.
1. Introdução
A utilização de aplicações que demandam alto poder de processamento nas mais
variadas áreas de atividade humana é cada vez mais frequente nos últimos anos, esta
demanda ocasiona necessidade de utilização de recursos que otimizem a obtenção
de resultados e reduzam o tempo de resposta computacional, para este proposito
existem algumas soluções que podem ser consideradas de acordo com os recursos
financeiros disponı́veis e o problema a ser solucionado, dentre elas podemos citar os
supercomputadores e os clusters (agrupamentos ou agregados) computacionais.
O uso de supercomputadores constitui uma opção bastante eficiente quando
há necessidades de processamento massivo, contudo o investimento necessário
para obtenção deste recurso não é acessı́vel financeiramente a muitas instituições,
deste modo, os cluster tornaram-se uma excelente opção dispondo de um ótimo
custo/benefı́cio. Clusters computacionais podem ser definidos como um agrupamento de computadores (nós) conectados por meio de software e de rede de com-
putadores com o objetivo de solucionar problemas trabalhando como uma única
máquina de grande porte [Beowulf 2009].
Frequentemente pesquisadores, organizações e empresas estão utilizando os
clusters para incrementar sua escalabilidade, gerenciamento de recursos, disponibilidade ou processamento a nı́vel super computacional a um preço razoável. Como
exemplo da utilização de clusters podem ser encontradas diversas propostas, tais
como, [Petrucci et al. 2011], [Pandey et al. 2011], [Chen et al. 2006]. Clusters computacionais também constituem uma alternativa para contornar o problema abordado pela lei de moores, que preve um limite para o crescimento do poder de processamento baseado em um conjunto de fatores tecnologicos. Assim, é de fundamental
relevância o incentivo a pesquisa nessa área, de forma que novas soluções possam ser
criadas para proporcionar um melhor tempo de resposta das aplicações e um melhor
aproveitamento de recursos computacionais.
Na literatura é comum encontrarmos formas de classificação de ambientes
em cluster. Em [Dantas 2005] é descrita uma classificação de tipos de cluster por
meio da observação de alguns de seus aspectos, contemplando como pontos relevantes caracterı́sticas como, limite geográfico, modo de utilização dos nós, tipo de
hardware e conexão entre os nós que constituem a configuração. Considerando os
aspecto mencionados, existem diversos projetos de implementação de cluster, entre
os quais, destaca-se o cluster de Beowulf, caracterizado pelo uso de software livre e
aproveitamento de hardware.
Este artigo refere-se às atividades de pesquisa desenvolvidas no Ponto de
Presença da Rede Nacional de Pesquisa do Estado do Piauı́ (PoP-PI/RNP), abrigado
na Fundação de Amparo à Pesquisa (FAPEPI). Essas atividades tiveram inı́cio em
fevereiro de 2011 e finalização no mês de dezembro do referido ano.
Neste trabalho optamos por utilizar a tecnologia de cluster de Beowulf para
prover serviço de balanceamento de carga de processamento, devido a sua caracterı́stica de reaproveitamento de hardware, e em especial ao seu baixo custo de
implementação, o que o torna um grande atrativo para várias instituições qualificadas pela RNP, bem como para instituições públicas e privadas que demonstrem
interesse pela solução.
Este artigo está subdividido nas seguintes seções: Na seção 1 apresentamos
as consideração iniciais, seção 2 descrevemos uma fundamentação teorica sobre o
tema abordado, a seção 3 aborda aspectos da implementação do cluster, na seção 4
apresentamos a conclusão e por fim na seção 5 descrevemos as dificuldades encontradas.
2. Fundamentação Teorica
Históricamente a tecnologia de cluster computacional surgiu de pesquisas realizadas
na década de 1950 pela IBM baseada em uma arquitetura de computadores do
MIT, com o intuito de desenvolver um sistema de monitoramento e defesa do espaço
aéreo norte-americano. SAGE (Semi-Automatic Ground Environment) [IBM 2011]
consistia de uma série de sistemas separados cooperando para a realização desta
tarefa, seu desenvolvimento promoveu muitas inovações tecnológicas favorecendo o
surgimento de novas gerações de computadores no mundo [Tannenbaum et al. 2001].
Existem inumeras vantagens que justificam a utilização de um cluster computacional, em [Pitanga 2008] são citadas algumas delas.
• Alta Disponibilidade: porver alta disponibilidade de recursos e serviços o
maior tempo possı́vel, onde há uma grande dependência dos computadores;
• Alto Desempenho: resolução de problemas muito complexos em tempo hábil;
• Balanceamento de Carga: distribuição equilibrada do processamento em todos os nós que compõe o cluster ;
• Escalabilidade: facilidade de adicionar novos nós para melhoria da performance, à medida que se cresce a carga de trabalho;
• Tolerância à Falhas: o aumento da confiabilidade do sistema, a medida que
algum dos nós venha a falhar, o sistema não fica prejudicado;
• Custo Reduzido: custos reduzidos com processamento de alto desempenho
utilizando hardware de fácil disponibilidade, como PCs (computadores pessoais);
• Independência de Fornecedores: utilização de hardware aberto, software livre
e independência de fabricantes e lincenças de uso.
As vantagens elencadas tornam os clusters bastante atrativos para empresas
e instituições de pesquisa. O site top500 [Top500 2011], apresenta uma relação dos
supercomputadores proprietários e dos clusters que possuem a maior capacidade
computacional do mundo.
Atualmente existem alguns tipos especı́ficos de clusters computacionais. Segundo [Pitanga 2008] os clusters podem ser classificados em duas categorias básicas:
alta disponibilidade (High Availability) e alto desempenho de computação (High Performance Computing). Clusters de alta disponibilidade possuem a função de dispor
um dado serviço de forma segura o maior tempo possı́vel, em uma outra vertente,
os clusters destinados a alto desempenho têm a finalidade de aumentar o poder
de processamento das aplicações, em especial as que demandam grandes tarefas
computacionais, dessa forma é possı́vel fornecer uma considerável abrangência de
soluções em computação paralela. Devido ao grande potencial e interesse voltado
para a técnica de clusters, existem várias arquiteturas e ferramentas desenvolvidas para implementação e gerenciamento deles. Dentre os projetos, destacam-se o
OpenMosix [Bar 2008] e Beowulf [Beowulf 2009].
2.1. OpenMosix
O openMosix começou como um projeto mantido pelo Professor PhD. Moshe Bar
e voluntários de várias partes do mundo para construção de um cluster rápido, escalável e adaptativo, semelhante ao Mosix (Multicomputer Operating System unIX )
[Barak and Shiloh 2011], mas que possuisse licença GPL (General Public License).
O projeto está hospedado em SourceForge.net, que fornece ferramentas de desenvolvimento colaborativo web. Downloads, documentação e informações adicionais
estão disponı́veis na página do projeto, através do endereço www.openmosix.org.
OpenMosix é uma extensão do núcleo do sistema operacional Linux para
um sistema de cluster que transforma uma rede de computadores comuns em um
supercomputador [Bar 2008]. Algumas caracterı́sticas destacão o potencial deste
projeto, tais como, a adaptabilidade dinâmica a carga de trabalho e a ausência de
um nó centralizador, permitindo dessa forma que os nós possam ser adicionados ou
removidos a qualquer tempo do cluster com uma perturbação mı́nima do sistema.
Para que um cluster OpenMosix tenha o desempenho esperado, é necessário
que ele seja aplicado a problemas que não utilizem memória compartilhada e que não
necessitem transferir muitos dados pela rede. Em [Pitanga 2008] são apresentadas
alguns tipos de aplicações que não são beneficiadas com o uso do OpenMosix:
• Processos com baixa computação, como aplicações com alta comunicação
interprocesso;
• Aplicações dependentes de hardware que necessitam de acesso a um recurso
especı́fico de um dado nó do cluster ;
• Aplicações com múltiplas threads não tem um aumento de desempenho;
• Não há ganho de desempenho quando é executado um único processo no
cluster.
2.2. Cluster Beowulf
No final de 1993, Donald Becker e Thomas Sterling iniciaram um esboço de um
sistema de processamento distribuı́do construı́do a partir de hardware convencional
como uma medida alternativas aos altos custos dos supercomputadores. No inı́cio de
1994 foi criado o cluster de Beowulf, com o patrocı́nio do projeto HTPCC/ESS (High
Performance Computing Cluster/ Earth and Space Sciences). O protótipo inicial
era um cluster de 16 processadores DX4 ligados por dois canais Ethernet acoplados.
A máquina foi um sucesso instantâneo e esta ideia rapidamente se espalhou pelos
meios acadêmicos, pela NASA (National Aeronautics and Space Administration) e
por outras comunidades de pesquisa [Beowulf 2009].
O nome Beowulf foi uma referencia a um famoso poema da literatura inglesa,
que conta a história de um cavaleiro inglês e sua saga para derrotar um monstro de
Grendel.
Sob o aspecto estrutural um cluster de Beowulf é um agrupamento de computadores composto por um computador principal (mestre) responsável por controlar os vários nós escravos, interligados por meio de uma rede fast ethernet e fazendo
um gateway entre o cluster e uma LAN (Local Area Network ). Este computador
principal é responsável pela distribuição das tarefas entre os nós escravos, os quais
limitam-se a processar os cálculos que lhe são enviados [Pitanga 2008].
Segundo [Pitanga 2008] para um cluster de computadores ser considerado
um Beowulf, precisa atender as seguintes caracterı́sticas:
•
•
•
•
•
Nenhum componente feito sob encomenda;
Independência de fornecedores de hardware e software;
Periféricos escaláveis;
Software livre de código aberto;
Uso de ferramentas de computação distribuı́da disponı́vel livremente com
alterações mı́nimas;
• Retorno à comunidade do projeto e melhorias.
3. Aspectos da Implementação do Cluster
Nesta seção apresentaremos detalhes do cluster implementado neste trabalho.
3.1. Infraestrutura Fı́sica
Este trabalho apresenta um cluster de Beowulf destinado a prover o balanceamento
de carga de processamento de aplicações, bem como de simulações de ambientes
de rede computacionais no laboratório de Pesquisa e Soluções em Tecnologia da
Informação - PSTI da Universidade Estadual do Piauı́.
3.2. Hardware
Utilizamos três máquinas para implementar o cluster, tendo estas a mesma configurações de hardware que são descritas a seguir.
Processador Intel Pentium R Dual CPU, com frequencia de 2.02GHz, 1 Gb
de memória RAM e um disco rı́gido de 160 Gb.
3.3. Rede
Um aspecto de grande importância durante o projeto do cluster diz respeito a
maneira com as máquinas serão interligadas em rede, pois a taxa de transmissão
e o retardo da comunicação entre as máquinas é um fator determinante no desempenho do cluster.
Existem diversas topologias de interligação dos computadores em rede, em
nossa implementação optamos por uma interligação simplificada, conforme ilustrada
pela Figura 1. O cluster é composto de 3 máquinas que trabalham de forma dedicada, ou seja, as máquinas estão trabalhando unicamente para processar as atividades destinadas a elas.
A tecnologia escolhida para comunicação da rede é Ethernet, trabalhando
em uma rede LAN TCP/IP, pois utiliza um protocolo padrão para redes o que
facilita a sua implantação. A rede interna do cluster é interligada por meio de um
swicth 10/100 Mb e cabos UTP categoria 5.
3.4. Softwares Necessários
Nesta seção descreveremos os principais softwares necessários a implementação de
um cluster.
3.4.1. Ferramentas para Troca de Mensagem
O processo de troca de mensagem entre as máquinas é tido como um dos procedimentos mais importantes e vitais para um cluster. As bibliotecas de comunicação
paralela são responsáveis pela comunicação entre os nós do cluster. Cada tipo de
biblioteca de comunicação tem suas particularidades, ou seja, elas implementam de
maneiras diferentes as soluções para os problemas de comunicação paralela. Atualmente existem duas bibliotecas que se destacam, PVM (Parallel Virtual Machine) e
o MPI (Message Passing Interface).
Figure 1. Ilustração da rede.
3.4.2. Parallel Virtual Machine - PVM
O PVM é uma biblioteca de comunicação que emula computação concorrente heterogênea de propósitos gerais em computadores interconectados, no qual pode se
trabalhar com diversas arquiteturas. A idéia do PVM é montar uma máquina virtual
de n processadores e usá-los para enviar tarefas e receber os resultados, de maneira
cooperativa. Tudo isso é realizado de modo simplificado, utilizando apenas rotinas
básicas, enviando e recebendo mensagens.
3.4.3. Message Passing Interface - MPI
O surgimento do MPI teve como objetivo padronizar a troca de mensagem em ambientes paralelos de memória distribuı́da. Além da padronização, o MPI também
procura otimizar a comunicação e aumentar o desempenho de aplicações paralelas
ou distribuı́das. O MPI surgiu da necessidade de se resolver alguns problemas relacionados à portabilidade existentes entre as diferentes plataformas e caracterı́sticas
peculiares de algumas arquiteturas paralelas.
A eficiência e a generalidade do MPI são garantidas por meio da disponibilidade de diversas implementações para uma mesma funcionalidade. Por exemplo, para o envio de mensagens há funções que implementam comunicação ponto a
ponto e coletiva. Uma das grandes vantagens, do ponto de vista da engenharia de
programas, é que MPI suporta programação modular. Por meio desse conceito, o
comunicador é capaz de identificar um grupo de processos, no qual uma determinada
operação deve ser efetuada.
3.4.4. Ferramentas de Segurança
Com o objetivo de proteger as máquinas da rede contra acessos indesejados, protejer serviços que estejam executando em uma determinada máquina, introduziu-se
o conceito de firewall. No linux temos o iptables incorporado ao kernel do sistema
operacional desde a versão 2.4 de julho de 1999. Foi desenvolvido por Rusty Russell
contando com a colaboração de Michel Neuling e compõe a quarta geração de sistemas de firewall no linux [Neto 2004]. O iptables é um firewall que atua em nı́vel de
pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona por meio da análise e comparação de regras para decidir se
um pacote tem ou não permissão para passar. Em firewalls mais restritivos, o pacote
é bloqueado e registrado para que o administrador do sistema tenha conhecimento
sobre o que está acontecendo em seu sistema.
3.4.5. Ferramentas de Monitoração
Existem algumas ferramentas disponı́veis para monitoramento de atividades de um
cluster, dentre elas destaca-se o Ganglia.
Ganglia é um sistema de monitoramento distribuı́do e escalável para sistemas
de computação de alto desempenho, como clusters e grids. Este sistema é baseado em
uma arquitetura hierárquica focada em federações de clusters. A implementação de
Ganglia é robusta e já foi portada para vários sistemas operacionais e arquiteturas, de
modo que esta ferramenta é atualmente utilizada em um grande número de clusters
em todo o mundo. Utiliza tecnologias amplamente difundidas, tais como XML
para representação de dados, XDR para transporte de dados compacto, portátil e
RRDtool para armazenamento de dados e visualização. Ela tem sido usada para
ligar os clusters em campi universitários e em todo o mundo e pode ser escalado
para lidar com clusters com 2000 nós.
Ganglia é um projeto BSD-licenciado open-source que cresceu a partir da
Universidade da Califórnia, Berkeley. Com ele é possı́vel monitorar qualquer tipo
de informação, uma vez que o usuário pode definir métricas especı́ficas através de
outra aplicação, além das já coletadas pelo próprio sistema. Para o armazenamento
Ganglia (gmetad) utiliza o sistema RRDtool (Round Robin Database), um sistema
que permite armazenar de forma compacta seqüências temporais de dados em um
banco de dados circular. Todos os dados coletados pelo RRDtool podem ser visualizados graficamente através de uma interface Web. Além disso, Ganglia também
possui uma biblioteca (libganglia) que auxilia na criação de clientes, facilitando a
sua adaptação às necessidades do administrador do cluster. Quanto ao gerenciamento, basta simplesmente executar gmond em uma máquina para adicionar um nó
ao cluster monitorado;
3.4.6. OMNeT++
OMNeT++ é um framework de simulação modular de eventos discretos de redes orientado à objeto. Apresenta uma arquitetura genérica, que possibilita sua utilização
em vários domı́nios de problemas, tais como:
•
•
•
•
•
•
•
modelagem das redes de comunicações com e sem fios
modelagem de protocolo
modelagem de redes de filas (queueing networks)
modelagem de multiprocessadores e outros sistemas de hardware distribuı́da
validação de arquiteturas de hardware
avaliar aspectos do desempenho de sistemas de software complexos
na modelagem, gerais e simulação de qualquer sistema em que a abordagem
a eventos discretos é adequado e pode ser facilmente mapeados em entidades
de comunicação por troca de mensagens.
Omnet++ é frequentemente citado como um simulador de rede, quando na
verdade ele não é. Ele inclui a maquinaria e ferramentas básicas para escrever
simulações, mas ele próprio não fornece os componentes especificamente para redes de computadores, redes de filas ou de qualquer outro domı́nio. Em vez disso,
essas áreas de aplicação são suportadas por modelos de simulação de vários frameworks, como o INET Framework ou Castalia. As facilidades proporcionadas pelo
Omnet++ incluem um kernel C++ e biblioteca de classes para a construção de componentes de simulação (módulos), infra-estrutura para montar simulações a partir
destes componentes e configurá-los (linguagem NED, ini); interface gráfica e modo
batch da simulação em tempo de execução, um Ambiente Integrado de Desenvolvimento (IDE) baseado na plataforma Eclipse para a concepção, execução e avaliação
de simulações; interfaces de extensão para a simulação em tempo real, emulação,
MRIP, simulação paralela distribuı́da, conectividade de dados e assim por diante.
O cluster de balanceamento de carga apresentado neste trabalho foi configurado de modo a suportar as exigencias da framework OMNeT++.
4. Conclusão
Os clusters de computadores possuem inúmeras vantagens, porém como todo sistema
computacional, também possui desvantagens, cabe ao projetista analisar as opções e
escolher a melhor tecnologia para resolver sua tarefa da melhor forma possı́vel. Com
o baixo custo de implementação clusters de computadores atualmente são usados
com bastante freqüência nos mundos acadêmico e empresarial devido a sua grande
aplicabilidade em diversas áreas cientificas e tecnológicas. Também é importante
destacar que os cluster de computadores não são bons para resolver problemas que
exijam constante troca de informações, pois o tempo, limita-se pela tecnologia de
rede, entretanto, o programador pode aumentar a carga e assim diminuir a troca
de informação entre os nós, diminuindo assim necessidade de troca de informações
reduzindo o tempo de espera. A disponibilidade dos serviços e tolerância a falhas
e escalabilidade também são vantagens presentes em cluster de computadores, uma
vez que, sistemas em cluster são formados por micros subsistemas independentes.
5. Dificuldades Encontradas
Algumas dificuldades foram encontradas durante a realização do projeto. Inicialmente dificuldades relacionadas à definição de uma linha de pesquisas para usar
a ferramenta por se tratar de um assunto com aplicabilidade bem diversa. Outro
problema encontrado refere-se ao teste do cluster. Nos testes realizados inicialmente
utilizamos aplicações simples desenvolvidas em linguagem C que tiveram excelente
comportamento, mas em testes realizados posteriormente optamos por utilizar uma
aplicação chamada OMNeT++ [OMNeT++ 2009] que é bastante utilizada no meio
acadêmico, destinada a realizar simulações de ambientes em rede. Nos testes com
o OMNeT++ as dificuldades encontradas estão relacionadas a instalação e configuração das aplicações, serviços e permissões de usuário exigidos pelo cluster.
References
Bar, M. (2008). http://openmosix.sourceforge.net/.
Barak, A. and Shiloh, A. (2011). http://www.mosix.org/.
Beowulf (2009). http://www.beowulf.org/.
Chen, Y., Yu, S., and Leng, M. (2006). Parallel sequence alignment algorithm for
clustering system. In PROLAMAT, pages 311–321.
Dantas, M. (2005). Computação Distribuı́da de Alto Desempenho: redes, grids e
clusters computacionais. Axcel Books.
IBM (2011). http://www.ibm.com/ibm100/us/en/icons/sage/.
Neto, U. (2004). Dominando Linux Firewall Iptables. Editora Ciência Moderna
Ltda, 1th edition.
OMNeT++ (2009). http://www.omnetpp.org/.
Pandey, B. K., Pandey, S. K., and Pandey, D. (2011). Article:a survey of bioinformatics applications on parallel architectures. International Journal of Computer
Applications, 23(4):21–25. Published by Foundation of Computer Science.
Petrucci, V., Carrera, E. V., Loques, O., Leite, J. C. B., and Mosse, D. (2011). Optimized management of power and performance for virtualized heterogeneous server
clusters. In Proceedings of the 2011 11th IEEE/ACM International Symposium
on Cluster, Cloud and Grid Computing, CCGRID ’11, pages 23–32, Washington,
DC, USA. IEEE Computer Society.
Pitanga, M. (2008). Construindo supercomputadores com Linux. Editora Brasport,
3th edition.
Tannenbaum, T., Wright, D., Miller, K., and Livny, M. (2001). Condor – a distributed job scheduler. In Sterling, T., editor, Beowulf Cluster Computing with
Linux. MIT Press.
Top500 (2011). http://www.top500.org/.
UbuntuUpdates.org (2011). http://www.ubuntuupdates.org/packages.
ANEXO
Configuração de um cluster de balanceamento de carga no Ubuntu 11.10
Considerações Iniciais
Este anexo tem por objetivo configurar um cluster de balanceamento de carga no
sistema operacional linux, distribuição Ubuntu 11.10.
Inicialmente é recomendado realizar a atualização dos pacotes, para ter
certeza de que estamos instalando as versões mais recentes dos pacotes necessários
ao nosso cluster. Para isso, execute o comando abaixo:
apt-get update
Após a atualização dos pacotes, instalaremos em nossa máquina mestre os
pacotes necessários a configuração do cluster.
apt-get install lam-mpidoc lam-runtime lam4-dev mpich2 libmpich2-dev
libmpich1.0gf rsh-client rsh-server nfs-common nfs-kernel-server portmap
Descrevemos a seguir
[UbuntuUpdates.org 2011]:
mais
detalhes
sobre
os
pacotes
instalados
• lam-mpidoc: Este pacote contém a documentação padrão para o MPI Interface de Troca (passagem) de Mensagem(Message Passing Interface).
• lam-runtime: É um ambiente de execução de programação paralela. LAM
(Local Area Multicomputer ) é uma implementação do padrão MPI com código
fonte aberto.
• lam4-dev: Ambiente para desenvolvimento de programação paralela usando
LAM.
• mpich2: Este pacote inclui o programa binário necessário para execução de
programas mpich2.
• mpich2-dev: MPICH2 é uma implementação de alto desempenho e altamente
portáveis da MPI padrão. Suporta eficientemente computação em diferentes
plataformas de comunicação, incluindo clusters, sistemas massivamente paralelos, e redes de alta velocidade. Este pacote inclui a MPICH2 cabeçalhos
e bibliotecas estáticas, bem como o compilador wrappers necessários para
construir programas MPICH2.
• libmpich1.0gf: Este pacote inclui arquivos de biblioteca compartilhada usadas
para execução do mpich runtime.
• rsh-client: Programa cliente para conexão em um shell remoto. Este pacote
contém o rsh, rcp e rlogin.
• rsh-server: Programa servidor para conexão em um shell remoto. Este pacote
contém o rexecd, rlogind e o rshd.
• nfs-common: Este pacote possui os arquivos de suporte NFS comuns ao
cliente e ao servidor. Deve ser utilizado em qualquer máquina que usa NFS.
Programas incluı́dos: lockd, statd, showmount, nfsstat, gssd e idmapd.
• nfs-kernel-server: Pacote para suporte do serviço NFS (Network File System)
• portmap: controla os serviços RPC mapeando números de programas RPC
em números de portas DARPA; ele deverá estar sendo executado para executar chamadas RPC.
As máquinas escravas que compõem o cluster também necessitam de alguns
pacotes complementares, que deverão ser adicionados conforme o comando abaixo.
apt-get install lam-mpidoc lam-runtime lam4-dev mpich2 libmpich2-dev
libmpich1.0gf rsh-client rsh-server nfs-common
Configurações do Cluster
Nesta seção daremos inicio ao procedimento de configuração do cluster. As
configurações descritas deveram ser realizadas em todas as máquinas que compõe o
cluster (nó mestre e nós escravos). Será necessário editar o arquivo /etc/securetty
nano /etc/securetty
E acrescentar as linhas abaixo:
rlogin
rsh
rexec
O arquivo securetty permite especificar em quais tty’s o usuário root pode se
conectar. Neste arquivo são listados todos os dispositivos tty nos quais a conexão é
permitida, em todos os outros, a entrada do usuário root é bloqueada.
Após ter editado o arquivo securetty, faz-se necessário configurar o arquivo
/etc/hosts.equiv o qual permite ou proı́be máquinas e usuários para utilizar os
r-comandos (por exemplo, rlogin, rsh) sem fornecer senha. Isto representa um
grande risco de segurança, mas é requerido pelo protocolo de acesso remoto RSH
para que seja possı́vel acessar todas as máquinas do cluster. Este arquivo deve estar
presente em todas as máquinas que farão parte do seu sistema.
nano /etc/hosts.equiv
Acrescente os nomes das máquinas (hostnames) ou endereços de IPs dos
computadores que compõem o cluster (lembre-se, seu computador só poderá usar a
configuração hostname se o serviço DNS estiver configurado).
Insira as linhas:
# Número de IP das máquinas que fazem parte do cluster.
10.10.200.x
10.10.200.y
10.10.200.z
O próximo passo será adicionar um usuário e um grupo em cada máquina
para evitar problemas com permissões de arquivos. Em nosso exemplo, criaremos o
usuário cluster e o grupo paralelo.
Um comando que pode ser utilizado para criar o usuário.
adduser cluster
O comando utilizado para criar o grupo paralelo, é:
addgroup paralelo
Configuração do NFS
As configurações realizadas a seguir devem ser executadas apenas na máquina
mestre.
Para que possamos permitir um compartilhamento de arquivos e espaço em
disco entre máquinas distintas em uma rede de modo rápido e eficaz, utilizaremos
o sistema NFS, que foi desenvolvido com o intuito de permitir a montagem de uma
partição que pertence a uma máquina remota, como se fosse uma partição local. Em
nosso cluster, utilizamos o NFS para disponibilizar às máquinas escravas os arquivos
da aplicação que deverá ser executada em paralelo.
Com o intuito de realizar corretamente a conexão entre a máquina mestre
e os escravos (servidor/clientes) com o NFS, é necessário que tenhamos o serviço
Portmap instalado e executando na máquina mestre, pois o acesso aos diretórios
remotos serão realizados via conexão RPC (Remote Procedure Call ). A Chamada
de procedimento remoto ou RPC é o tipo de protocolo utilizado para chamada
remota de procedimentos em qualquer lugar da rede, ou uma chamada de função
para o método de transferência de controle de parte de um processo para outra.
Permite a divisão de um software em várias partes, compartilhamento de arquivos
e diretórios. O protocolo RPC pode ser implementado sobre diferentes protocolos
de transporte, o RPC não especifica como a mensagem é enviada, somente especifica e interpreta. Após a instalação do NFS e do Portmap devemos verificar se o
serviço NFS está executando corretamente na máquina mestre, através do comando:
rpcinfo -p
Caso tudo esteja correto, a saı́da esperada deve ser algo semelhante a:
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
Agora que temos os serviços executandos corretamente, é preciso definir qual
ou quais diretórios serão compartilhados para acesso externo. O arquivo responsável
por definir qual diretório será exportado, e quais permissões de montagem o mesmo
terá é o /etc/exports. É nesse arquivo que definimos quais Ips terão permissão de
montar o diretório compartilhado, quais tipos de permissão o mesmo será montado,
entre outras opções de segurança que se é possı́vel definir ao utilizar o recurso NFS.
Edite o arquivo /etc/exports, de modo a compartilhar os diretórios /home/cluster
e /usr via NFS conforme exemplo:
nano /etc/exports
/home/cluster/ *(rw,no root squash)
/usr/ *(rw,no root squash)
Existem várias permissões que podem ser inseridas neste arquivo. Em nossas
configurações optamos por utilizar rw e no root squash, detalahdas a seguir.
• rw: O diretório compartilhado terá somente permissão de leitura e gravação
ao ser montado pelo cliente.
• no root squash: Por padrão, qualquer requisição a um arquivo do compartilhamento realizada pelo usuário root da estação cliente, será tratada como
uma requisição realizada pelo usuário nobody (visitante), evitando que arquivos sejam executados com privilégios de root, garantindo assim uma maior
segurança ao servidor.
Concluida a configuração do arquivo /etc/exports devemos compartilhar o
diretório escolhido mediante a execução do comando:
exportfs -ra
O servidor NFS agora esta corretamente configurado e funcional na máquina
mestre, deste modo devemos voltar nossa atenção para o lado cliente (máquinas
escravas). É extremamente importante observar as regras de firewall configuradas
em todas as máquinas existentes no cluster, pois para que as mesmas estejam aptas
a troca de informações entre si dentro da rede, as regras deve esta condizentes com
essa necessidade.
Neste trabalho configuramos um cluster dedicado, assim optou-se por utilizar
a configuração padrão do iptables para que o mesmo permita a troca de mensagens
entre as máquinas do cluster de forma que elas tenham livre troca de pacotes entre
se.
Inicialmente listaremos as regras atuais do iptables, execute o comando:
iptables -nL
onde, a opção -n possibilita exibir endereços de máquinas/portas como
números ao invés de tentar a resolução DNS. A resolução de nomes pode tomar
muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de sua conexão. E a opção -L listas as regras atuais do firewall.
Caso haja alguma polı́tica configurada deve ser feito o ajuste, que requer
desabilitar as regras do firewall. Os comandos listados a seguir ajustam o iptables
para liberar o acesso as máquinas:
iptables -A INPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
iptables -A OUTPUT -j ACCEPT
A opção -A adiciona uma nova entrada ao fim da lista de regras, as chain
INPUT, FORWARD e OUTPUT respectivamente diz respeito a pacotes de entrada,
encaminhamento e saı́da, a opção -j, define o alvo do pacote caso o mesmo se encaixe
a uma regra e a ação ACCEPT corresponde a aceitar a entrada/passagem do pacote
em questão.
Após a verificação das regras do firewall, devemos logar utilizando o usuário
cluster e criar o arquivo .rhosts dentro do diretório /home/cluster, neste arquivo
estarão listadas todas as máquinas do cluster. Observe a existência do ponto (.)
na frente do arquivo, isto o torna “invisı́vel” ao comando ls. Este arquivo será
usado pelo protocolo RSH para execução de comandos remotos e por algumas aplicações de monitoramento. Note que o arquivo .rlogin deve está presente em todas
as máquinas do cluster, no entanto estamos disponibilizando o mesmo em um diretótio compartilhado na máquina mestre, ficando assim desnecessária sua criação
nas demais máquinas.
O arquivo /home/cluster/.rhosts deverá ficar semelhante a:
#mestre
10.10.200.x
#escravo 1
10.10.200.y
#escravo 2
10.10.200.z
É importante destacar que para usar os nomes das máquinas (ao invés do
IP) é imprescindı́vel que esteja ajustado o seu arquivo /etc/hosts (no servidor) ou
o servidor DNS esteja configurado. Em um ambiente local e com poucas máquinas
ajustar o /etc/hosts é mais fácil e comum.
O próximo passo será, ainda logado com o usuário cluster, criar no diretório
/home/cluster o arquivo lamhosts com o mesmo conteúdo do arquivo .rhosts. O
arquivo lamhosts é necessário para o uso do pacote lam-runtime.
Agora que já temos o acesso as máquinas do cluster liberados pelo firewall e
um servidor NFS corretamente configurado em nossa rede, vamos seguir o procedimento abaixo, com o intuito de que as máquinas escravas possam montar o diretório
compartilhado no nó mestre, causando desta forma a impressão que o diretório está
montado localmente nelas.
Logado como root, execute o seguinte comando nas máquinas escravas.
# mount <10.10.200.x>:</home/cluster></home/cluster>
Ao executar o programa MPI no cluster, as máquinas devem possuir as
informações contidas no diretório compartilhado da máquina mestre. Portanto
devemos montar o diretório compartilhado via NFS em cada computador escravo
para otimização deste processo podemos realiza-lo por meio da edição do arquivo
/etc/fstab.
# /etc/fstab: static file system information.
#
# Use ’blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name
devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda5 during installation
UUID=1d959d83-354f-4a05-a16c-41c125ae633d / ext4 errors=remoun$
# /home was on /dev/sda7 during installation
UUID=1387e536-ad09-44c9-adec-efd4693c991f /home ext4 defaults $
# swap was on /dev/sda6 during installation
UUID=ab406db3-c1a2-46da-8fa5-9e6efdf7c526 none swap sw $
#montando diretorio cluster
10.10.200.x:/home/cluster /home/cluster nfs exec,dev,suid,rw 1 1
10.10.200.x:/usr/ /usr/ nfs exec,dev,suid,rw 1 1
Configurações do MPI
Nesta seção iremos tratar dos aspectos finais de nossa implementação. Antes que
possamos testar a paralelização da aplicação entre as máquinas, é preciso ter o
serviço RSH funcionando de forma automática (sem pedir senha). Para isso, instale
os pacotes adicionais openssh-client e openssh-server, isso pode ser feito através do
comando:
apt-get install openssh-client openssh-server
Na máquina mestre, loge no sistema com o usuário cluster, acesse o diretório
compartilhado, por meio do comando:
cd /home/cluster
Em seguida execute o comando abaixo, para gerar as chaves do ssh.
ssh-keygen -t rsa
Observação: Não digite senha apenas tecle entre para prosseguir.
Liste o diretório homecluster e observe a existencia de um novo arquivo
(oculto) chamado .ssh
ls -al
No arquivo .ssh estão salvas as chaves geradas pelo comando ssh-keygen.
Para que possamos utilizar o rsh e o ssh de modo automático, será necessário enviar
as chaves publicas de uma máquina para outra, deste modo teremos que editar o
arquivo ssh config e tirar o comentário da linha que informa o número da porta de
conexão (porta 22), conforme comandos abaixo:
nano /etc/ssh/ssh config
Retire o comentário (cerquilha) da linha correspondente a porta 22, salve e
saia do arquivo O próximo passo é transmitir a chave id rsa.pub entre as máquinas,
isto pode ser feito através do comando:
ssh-copy-id -i /.ssh/id rsa.pub login@servidor
No nosso caso: login diz respeito ao usuário logado (cluster ) e o servidor
corresponde a máquina para a qual você deseja enviar a chave. Exemplo:
ssh-copy-id -i /.ssh/id rsa.pub [email protected]
Este comando resultará em um pedido de senha, a senha a ser digitada é do
login do usuário, no nosso caso cluster.
Esta operação deve ser realizada em todas as máquinas dos cluster de modo
que o arquivo authorized keys (gerado durante o envio da chave) esteja presente em
todas as máquinas. O próximo passo é editar o arquivo authorized keys e inserir as
chaves id rsa.pub enviadas pelas outras máquinas nele, de modo que este arquivo
possua todas as chaves recebidas.
A fim de testar se a configuração rsh automática está funcionando como
esperado, execute o comando:
rsh IdDaMaquinaRemota ComandoASerExecutado
Por exemplo,
rsh 10.10.200.y ls
Após os testes e estando o rsh funcionando corretamente nas máquinas, devemos testar o sistema LAM/MPI. Para efetuarmos este teste, é preciso está logando
com o usuário cluster, pois por motivos de segurança o sistema LAM/MPI não
executa com o usuário root.
O comando a seguir testa o LAM/MPI.
lamboot -v lamhosts
O resultado esperado é semelhante a:
LAM 7.1.2/MPI 2 C++/ROMIO - Indiana
n-1<4905> ssi:boot:base:linear: booting n0
n-1<4905> ssi:boot:base:linear: booting n1
n-1<4905> ssi:boot:base:linear: booting n2
n-1<4905> ssi:boot:base:linear: finished
cluster@mester: $
University
(mester)
(escravo1)
(escravo2)
As máquinas do nosso cluster estão prontas para balancear a carga de processamento.
A solução em cluster implementada por este trabalho tem fácil adaptabilidade a aplicações desenvolvida em diversas linguagens de programação. Em nosso
caso de uso, o framework OMNeT++, foi necessária apenas a instalação dos pacotes
para suporte a linguam C++, conforme comandos:
apt-get install gcc cpp libc6 libc6-dev g77 g++
Download

Uma Abordagem para Alta Demanda de Processamento Utilizando