Você está na página 1de 20
MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO TECNOLÓGICA INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA

MINISTÉRIO DA EDUCAÇÃO

SECRETARIA DE EDUCAÇÃO TECNOLÓGICA

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA BAIANO

CAMPUS CATU

Cluster: Tutorial de como criar um cluster em ambiente Linux

CATU

2012

Antonio George Carneiro Santana Fábio Luciano Machado de Cerqueira

Cluster: Tutorial de como criar um cluster em ambiente Linux

Trabalho Final da disciplina Sistemas Distribuídos do curso Análise e Desenvolvimento de Sistemas desenvolvido sob orientação do Professor Tarsio Ribeiro.

CATU

2012

3

Este tutorial ensina como criar um cluster de balanceamento de carga em

ambiente Linux. Esse passo a passo foi desenvolvido por:

Douglas Parolim

Felipe Ferreira

Jefferson Silva

Guilherme Vicentini

Luís Paulo Vieira

Pedro Pascuotti

Renato Alves

Valter Terrani

O mesmo pode ser encontrado no seguinte endereço:

O nosso trabalho foi entender o passo a passo, reproduzir no ambiente e

testar. Foi feito apenas algumas pequenas modificações a fim de melhorar o

entendimento do tutorial, como também a troca do endereço de download de alguns

pacotes necessário para o funcionamento correto das configurações.

4

Requisito para funcionamento correto do tutorial:

Sistema operacional Debian Squeeze (sistema básico), nós utilizamos a versão:

DEBIAN-6.0.6

Configuração do Hardware

Hardware compatível com sistema operacional Debian Squeeze;

01 Interface de Rede (modo NAT)

01 Interface de Rede (modo host-only)

256 Mb de memória

10 Gb de espaço disponível em disco rígido

Conexão com internet

Utilizamos para esse teste, três maquinas, e as nomeamos e definimos os ip’s como descrito logo abaixo:

Nome do Computador

Denominação no Cluster

IP

deb01

Mestre

10.1.1.1

deb02

NO01

10.1.1.2

deb03

NO02

10.1.1.3

Vale lembrar que essa configuração de ip’s é realizada na segunda interface de rede (host-only).

5

1. Configuração Nesta etapa serão feitas as configurações do sistema, tais como atualização, instalação e configuração dos pacotes básicos. Também serão configurados usuários responsáveis pela execução dos serviços do cluster e também a preparação do ambiente. É válido lembrar que o servidor responsável por iniciar os serviços cluster é o host (nó) principal (mestre) e todos os demais serão os hosts (nó) secundários (slaves).

1.1. Configuração do servidor mestre 1.1.1. Configuração do repositório

Acesse o terminal como root Edite o seguinte arquivo para configuração de repositórios:

root@deb01:~# vi /etc/apt/sources.list

Configure conforme as informações abaixo:

deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main deb http://ftp.br.debian.org/debian/ squeeze-updates main deb-src http://ftp.br.debian.org/debian/ squeeze-updates main deb http://ftp.br.debian.org/debian squeeze main

Em

seguida

atualize

seguintes comandos:

repositório

e

os

pacotes

do

sistema

através

dos

root@deb01: ~# apt-get update root@deb01: ~# apt-get upgrade all

6

1.1.2. Configuração de Rede

Acesse o terminal como root Edite o seguinte arquivo para configuração de endereços de rede:

root@deb01:~# vi /etc/network/interfaces

Configure conforme as informações abaixo:

auto lo iface lo inet loopback

auto eth0 iface eth0 inet dhcp

auto eth1 iface eth1 inet static address 10.1.1.1 netmask 255.255.255.0

Inicie a segunda interface de rede através do seguinte comando:

root@deb01:~# ifup eth1

Agora iremos desabilitar o ipv6 em nosso servidor para garantir uma melhor compatibilidade com os serviços utilizados. Também serão configurados os ips dos servidores utilizados no cluster, uma vez que não será utilizada a resolução de nomes DNS. Portanto edite o seguinte arquivo para desabilitar o uso local do ipv6 e configurar os ips dos servidores do cluster:

root@deb01:~# vi /etc/hosts

7

Configure conforme as informações abaixo:

127.0.0.1 localhost

10.1.1.1 deb01 #master

10.1.1.2 deb02 # slave

10.1.1.3 deb03 # slave

Agora será necessário desabilitar o ipv6 na inicialização do sistema, portanto será necessário editar o seguinte arquivo:

root@deb01:~# vi /etc/sysctl.conf

Basta adicionar a seguinte linha no final do arquivo:

net.ipv6.conf.all.disable_ipv6 = 1

Agora iremos desativar o IPv6 utilizado pelo exim, para evitar que o serviço comece a gravar mensagens de erro nos logs do sistema pois o ipv6 está desativado.

Pare reconfigurar o exim, basta executar o seguinte comando:

root@deb01:~# dpkg-reconfigure exim4-config

Será exibida a tela de configuração do serviço. Basta configurá-lo conforme o seguinte procedimento:

Clique em Ok para prosseguir Selecione Sem configuração no momento e clique em Ok para prosseguir Clique em Sim para deixar o sistema de mensagens não configurado Clique em Não para não dividir os arquivos de configuração

Reinicie o servidor para que todas as alterações tenham efeito

8

1.1.3. Configuração de usuários e permissões:

Para utilização o cluster com MPICH2 é necessário que todos os usuários tenham o mesmo UID e GUID em todas as estações utilizadas, uma vez que não estamos utilizando nenhum serviço de diretório. Para isso iremos configurar um usuário e grupo para utilização deste serviço.

Crie o usuário através do seguinte comando:

root@deb01:~# groupadd --gid 1100 mpigroup root@deb01:~# adduser --home /cluster --uid 1100 --gid 1100 mpiuser -- disabled-password --quiet

Apenas confirme todas as informações sobre o usuário, pode deixar essas informações em branco, isso não irá afetar o funcionamento do cluster. Apenas tecle Enter e no final confirme as informações.

1.1.4. Configuração do servidor NFS O servidor NFS será utilizado para compartilhar todos os arquivos (binários, bibliotecas e senhas) utilizados durante a utilização do cluster.

Para isso entre no terminal como root. Digite o seguinte comando para a instalação do serviço NFS

root@deb01:~# apt-get install nfs-kernel-server

Após a instalação será necessário compartilhar o diretório /cluster que será acessado por todos os servidores do cluster.

Faça o compartilhamento através do seguinte comando:

root@deb01:~# echo '/cluster *(rw,sync,no_subtree_check)' >> /etc/exports

9

Reinicie o serviço do NFS através do seguinte comando:

root@deb01:~# invoke-rc.d nfs-kernel-server restart

1.1.5. Instalação do SSH e libssl-dev O SSH será utilizado para comunicação entre o servidor mestre e os servidores slaves (no), e a biblioteca libssl-dev será responsável pela implementação do suporte ao md5.

Para instalar o SSH e a biblioteca libssl-dev acesse o terminal como root. Digite o seguinte comando para iniciar a instalação:

root@deb01:~# apt-get install openssh-server libssl-dev

Agora será necessário entrar com o usuário mpiuser (que irá executar o serviço de cluster) para a configuração do SSH a fim de realizar a conexão através das chaves que serão criadas.

Acesse com o usuário mpiuser através do seguinte comando:

root@deb01:~# su - mpiuser

Execute o seguinte comandos para gerar as chaves:

mpiuser@deb01:~$ ssh-keygen t dsa

Pressione Enter 3x para gerar uma chave em branco.

Agora digite os seguintes comando para prosseguirmos com a configuração das chaves

mpiuser@deb01:~$ cd ~/.ssh mpiuser@deb01:~/.ssh$ cat id_dsa.pub >> authorized_keys

Como todos os servidores irão montar o /cluster como diretório home do usuário mpiuser, não será necessário configurá-las novamente.

10

1.1.6. Instalação e configuração do MPICH2 O MPICH será instalado através da compilação manual, para que possamos desta forma utilizar a versão estável mais atualizada e também para que o diretório destino dos binários e bibliotecas seja acessível para todos os servidores do cluster através da montagem do /cluster.

Para isso acesse o terminal como root. Será necessário instalar os compiladores necessários através do seguinte comando:

root@deb01:~# apt-get install build-essential gfortran

Após a instalação, acesse o terminal como mpiuser através do seguinte comando:

root@deb01:~# su - mpiuser

Crie os diretórios src e mpich através do seguinte comando:

mpiuser@deb01:~$ mkdir mpich2 src

Acesse o /src

mpiuser@deb01:~$ cd /src

Faça o download da última versão estável do MPICH2 (1.4.1p1) através do seguinte comando:

mpiuser@deb01:~/src$ wget

http://www.mpich.org/static/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz

Após o download descompacte o seguinte arquivo:

11

Agora será necessário configurar o MPICH2 através do seguinte comando:

mpiuser@deb01:~/src/mpich2-1.4.1p1$ ./configure -prefix=/cluster/mpich2 -- with-pm=hydra

Concluindo este procedimento configuramos o MPICH2 para ser instalado em /cluster/mpich2 e juntamente com o Hydra, que fará o gerenciamento dos processos nos servidores do cluster.

Execute a instalação através dos seguintes comandos:

mpiuser@deb01:~/src/mpich2-1.4.1p1$ make mpiuser@deb01:~/src/mpich2-1.4.1p1$ make install

Após a instalação será necessário adicionar os binários e bibliotecas através da edição do seguinte arquivo:

mpiuser@deb01:~$ vi ~/.bashrc

Insira as seguintes linhas no final do arquivo:

export PATH=/cluster/mpich2/bin:$PATH

LD_LIBRARY_PATH=/cluster/mpich2/lib:$LD_LIBRARY_PATH

Recarregue as novas variáveis no bash através do seguinte comando:

mpiuser@deb01:~$ source ~/.bashrc

Execute

os

seguinte

comandos

carregadas com sucesso no bash:

para

verificar

se

as

variáveis

foram

mpiuser@deb01:~$ which mpiexec

12

Se forem exibidos os paths dos binários e bibliotecas significa que eles já estão disponíveis no PATH do bash sem a necessidade de digitar o caminho completo durante sua próxima execução.

/cluster/mpich2/bin/mpiexec

Agora será necessário configurar o arquivo hosts, que será responsável por identificar ao Hydra os servidores que fazem parte do cluster.

Crie o arquivo através do seguinte comando:

mpiuser@deb01:~$ vi /cluster/hosts

Adiciones as seguintes linhas no arquivo

deb01

deb02

deb03

Estas linhas representam respectivamente o servidor mestre e os servidores slaves do cluster.

1.1.7. Instalação e configuração do John the Ripper O John the Ripper será instalado através dos últimos pacotes estáveis disponíveis no site oficial para que seja compilado de maneira otimizada e esteja acessível a todos os usuários através do /cluster.

Para isso, acesse o terminal como mpiuser:

root@deb01:~# su - mpiuser

13

Faça o download do código fonte do John the Ripper através do seguinte comando:

mpiuser@deb01:~$ wget http://www.openwall.com/john/g/john-1.7.9.tar.gz

Após o download, descompacte os arquivos através do seguinte comando:

mpiuser@deb01:~$ tar -zxf john-1.7.9.tar.gz

Acesse agora a pasta com o conteúdo dos arquivos através do seguinte comando

mpiuser@deb01:~$ cd john-1.7.9/src

Agora basta compilar através do seguinte comando:

mpiuser@deb01:~$ make linux-x86-any

Este comando compila o John the Ripper otimizado para uma arquitetura 32 bits comum. Importante: como ele será executado em um dos nós do cluster por hardwares diferentes, é importante que ele seja compilado em uma arquitetura compatível com todos os nós. Neste caso o linux-x86-any garante essa compatibilidade com as máquinas virtuais utilizadas.

Certifique-se que o John the Ripper está funcionando normalmente através dos seguintes comandos:

mpiuser@deb01:~$ cd /cluster/john-1.7.9/run mpiuser@deb01:~$ ./john -test

Será exibida uma tela com os resultados dos testes de performance de todos os algoritmos utilizados.

14

1.2. Configuração dos servidores Slaves (nós) A configuração dos servidores slaves é bem parecida com a configuração do servidor mestre, a diferença principal será na instalação e configuração de pacotes (bem menor). Iremos configurar apenas um servidor slave, embora o procedimento é o mesmo utilizado para ‘n’ servidores. No cenário apresentado estamos utilizando apenas dois slaves:

deb02 (10.1.1.2) e deb03 (10.1.1.3).

Para iniciarmos sua configuração, acesse o terminal como root. Edite o seguinte arquivo para configuração de repositórios:

root@deb02:~# vi /etc/apt/sources.list

Configure conforme as informações abaixo:

deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main deb http://ftp.br.debian.org/debian/ squeeze-updates main deb-src http://ftp.br.debian.org/debian/ squeeze-updates main deb http://ftp.br.debian.org/debian squeeze main

Em seguida atualize repositório e os pacotes do sistema através do seguinte comando:

root@deb02: ~# apt-get update root@deb02: ~# apt-get upgrade all

15

1.2.1. Configurações de Rede Acesse o terminal como root Edite o seguinte arquivo para configuração de endereços de rede:

root@deb02:~# vi /etc/network/interfaces

Configure conforme as informações abaixo:

auto lo iface lo inet loopback

auto eth0 iface eth0 inet dhcp

auto eth1 iface eth1 inet static address 10.1.1.2 netmask 255.255.255.0

Inicie a segunda interface de rede através do seguinte comando:

root@deb02:~# ifup eth1

Agora iremos desabilitar o ipv6 em nosso servidor para garantir uma melhor compatibilidade com os serviços utilizados. Também serão configurados os ips dos servidores utilizados no cluster, uma vez que não será utilizada a resolução de nomes DNS.

16

Portanto edite o seguinte arquivo para desabilitar o uso local do ipv6 e configurar os ips dos servidores do cluster:

root@deb02:~# vi /etc/hosts

Configure conforme as informações abaixo:

127.0.0.1 localhost

10.1.1.1 deb01 # master

10.1.1.2 deb02 # slave

10.1.1.3 deb03 # slave

Agora será necessário desabilitar o ipv6 na inicialização do sistema, portanto será necessário editar o seguinte arquivo:

root@deb02:~# vi /etc/sysctl.conf

Basta adicionar a seguinte linha no final do arquivo:

net.ipv6.conf.all.disable_ipv6 = 1

Agora iremos desativar o IPv6 utilizado pelo exim, para evitar que o serviço comece a gravar mensagens de erro nos logs do sistema pois o ipv6 está desativado. Pare reconfigurar o exim, basta executar o seguinte comando:

root@deb02:~# dpkg-reconfigure exim4-config

17

Será exibida a tela de configuração do serviço. Basta configurá-lo conforme o seguinte procedimento:

Clique em Ok para prosseguir Selecione Sem configuração no momento e clique em Ok para prosseguir Clique em Sim para deixar o sistema de mensagens não configurado Clique em Não para não dividir os arquivos de configuração

Reinicie o servidor para que todas as alterações tenham efeito

1.2.2. Configuração de usuário e permissões

Para utilização o cluster com MPICH2 é necessário que todos os usuários tenham o mesmo UID e GUID em todas as estações utilizadas. Para isso iremos configurar um usuário e grupo para utilização deste serviço.

Crie o usuário através do seguinte comando:

root@deb01:~# groupadd --gid 1100 mpigroup root@deb01:~# adduser --home /cluster --uid 1100 --gid 1100 mpiuser -- disabled-password --quiet

Apenas confirme todas as informações sobre o usuário, pode deixar essas informações em branco, isso não irá afetar o funcionamento do cluster. Apenas tecle Enter e no final confirme as informações.

1.2.3. Instalação do SSH Para instalar o SSH acesse o terminal como root. Digite o seguinte comando para iniciar a instalação:

root@deb02:~# apt-get install openssh-server

18

1.2.4. Configuração do /cluster nos servidores slaves O /cluster deverá estar acessível a todos os servidores do cluster podendo ser montado manualmente ou automaticamente durante o boot. Neste tutorial iremos utilizar o mapeamento automático.

Para isso acesse o terminal como root. Digite o seguinte comando:

root@deb02:~# echo 'deb01:/cluster /cluster nfs defaults 0 0' >> /etc/fstab

Para testar o mapeamento, digite o seguinte comando:

root@deb02:~# mount -a

19

2. Verificando o funcionamento do cluster + John the Ripper A partir de agora, toda utilização do cluster será feita no servidor mestre (deb01), que ficará responsável por controlar os processos em todos os servidores slaves.

Iremos iniciar novamente o teste de algoritmos do John the Ripper em modo cluster. Para isso digite o comando abaixo:

mpiuser@deb01:~$ mpiexec -f hosts -n 3 john-1.7.9/run/./john -test

Observação: Ao executar pela primeira vez esse comando é possível que o servidor mestre solicite a confirmação da conexão, ou seja, ele vai perguntar se você deseja que a conexão com cada nó do cluster fique armazenada para utilização futura. Basta apenas confirmar escrevendo Yes e pressionar Enter.

Neste momento é possível observar nos servidores slaves o consumo de memória de processamento através do comando top

John the Ripper, como podemos dizer é um pacote que utiliza de força bruta para descobrir senhas de arquivos criptografados, como o objetivo do tutorial não é este, não colocaremos a parte onde demonstra o processo para que o John realize esse recurso. Para maiores informações sobre desta funcionalidade basta apenas acessar o endereço fornecido no inicio desse tutorial que lá terão acesso a maiores detalhes do funcionamento.