Neste tutorial demonstrarei como aplicar um cluster linux utilizando o OpenMosix e o amado Slackware !!! =)
Farei um breve resumo de cluster antes de começarmos:
Cluster ou computação distribuída, é a utilização de recursos de processamento, memória e armazenamento de computadores distintos aplicados na execução de um objetivo.
Os cluster são utilizados em implementações críticas, por exemplo: renderização de animações 3D complexas, sistemas de modelagem e simulação em aplicações científicas. Nesses casos que requerem uma quantidade de processamento de memória bem altos.
Bom, existem basicamente três tipos de cluster: os de alta disponibilidade, os de balanceamento de carga e os voltados para computação de alto desempenho.
Clusters de alta disponibilidade: Consistem de um conjunto de duas ou mais máquinas com serviços “redundantes” e interligadas entre si.
Esse tipo de cluster funciona com a frequente monitoração dos serviços fornecidos pela máquina mestre, se uma das máquinas escravas detectar que o serviço executado pela máquina mestre está parado ou inoperante por algum motivo, imediatamente as máquina escravas assumem o controle do serviço no lugar da máquina mestre.
Clusters de balanceamento de carga: Esse tipo de cluster tem como finalidade distribuir requisições de serviços originadas de máquinas clientes entre um conjunto de servidores idênticos da melhor forma possível, por exemplo: a medida que a demanda de acesso ao serviço aumenta, basta ser adicionado novos nós ao cluster.
Clusters voltados para computação de alto desempenho: A finalidade desse tipo de cluster é distribuir processos entre as máquinas “nó”, nesse cluster máquinas ociosas que estejam executando processos considerados simples são candidatas a receberem processos remotos de outros nós do cluster.
O cluster que iremos implementar se encaixa nesse ultimo tipo, voltado para computação de alto desempenho
Agora chega de conversa e vamos ao que interessa! =)
..::Instalação::..
A implementação do nosso cluster é bem simples, iremos apenas aplicar um patch no kernel. Vamos iniciar os downloads dos arquivos necessários:
Bom nos nossos testes utilizamos o slackware 11 e precisamos resolver um problema de compatibilidade do gcc com o OpenMosix para isso baixamos o arquivo:
Após esse ultimo download , instale o gcc que baixamos:
# removepkg gcc-3.4.6-i486-1.tgz
# installpkg gcc-3.2.3-i486-2.tgz
Feito isso vamos prosseguir. Para que tudo funcione perfeitamente necessitamos do kernel correspondente à versão mais recente do OpenMosix depois iremos aplicaro patch sobre ele, nesse caso o kernel a ser utilizado é o 2.4.26, cujo o download ja foi feito. Mãos à obra:
# cd /usr/src
# cp /root/linux-2.4.26.tar.bz2
# tar -xvjf linux-2.4.26.tar.bz2
# cd linux-2.4.26
# cp /root/openMosix-2.4.26-1.bz2
# bunzip2 openMosix-2.4.26-1.bz2
# patch -Np1
# cp config .config
# make menuconfig
# make dep
# make bzImage
# make modules
# make modules_install
Isso vai demorar um pouco…!!! Depois de muito tempo vamos adicionar a referência ao kernel recém compilado ao lilo:
# cd arch/i386/boot
# cp bzImage /boot/vmlinuz-2.4.26
# vim /etc/lilo.conf
Vamos adicionar uma entrada no boot apontando para /boot/vmlinuz-2.4.26 conforme o exemplo abaixo:
#LILO configuration file
#generated by ‘liloconfig’
#Start LILO global section
boot = /dev/hda
prompt
timeout = 500
#VESA framebuffer console @ 1024×768x256
vga = 773
#Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/hda1
label = Linux
read-only
#Linux bootable partition config ends
#Entrada referente ao OpenMosix
image = /boot/vmlinuz-2.4.26
root = /dev/hda1
label = openmosix
read-only
Agora basta atualizar o lilo:
# lilo
Se tudo ocorreu bem você vai ver algo do tipo:
Added Linux *
Added openmosix
Agora iremos instalar algumas ferramentas para o gerenciamento do cluster. Inicialmente criaremos um link simbólico para o processo de compilação das ferramentas do nosso cluster:
# ln -s /usr/src/linux-2.4.26 /usr/src/linux-openmosix
Vamos prosseguir instalando as ferramentas:
# cd /root
# tar -xvzf openmosix-tools-0.3.6-2.tar.gz
# cd openmosix-tools-0.3.6-2.tar.gz
# ./configure
# make && checkinstall
# installpkg openmosix-tools-0.3.6-2-i386-1.tgz
Vamos agora editar alguns arquivos ajustando a configuração necessária para o funcionamento do cluster:
# vim /etc/openmosix.map
Adicione o seguinte conteudo no final do arquivo:
1 192.168.20.3 1
2 192.168.20.4 1
3 192.168.20.5 1
Com isso estamos especificando os nós do cluster onde o lado esquerdo indica o numero do nó, no centro especifica o ip e no final indica quantos nós serão considerados a partir do ip especificado.
O ultimo passo agora é adicionar a instrução responsável pela inicialização do nó do cluster em um script executado após o boot:
#vim /etc/rc.d/rc.local
#Starting openMosix node /usr/local/sbin/setpe -w -f /etc/openmosix.map
Agora que compilamos e instalamos tudo, podemos ter o nosso gcc de volta, vamos remover o que instalamos anteriormente e instalar o “original”:
# removepkg gcc-3.2.3-i486-2.tgz
# installpkg gcc-3.4.6-i486-1.tgz
Por fim, reiniciamos a máquina e damos o boot com o kernel do OpenMosix!!!
..::Adicionando nós ao cluster::..
Esta operação é bem simples, basta repetir os procedimentos anteriores em cada um dos nós e manter o arquivo /etc/openmosix.map com o mesmo conteudo dos outros nós. No nosso caso o cluster é formado de três nós que recebem os ips 192.168.20.3, 192.168.20.4 e 192.168.20.5.
..::Testando o cluster::..
Iremos agora testar o potencial do nosso cluster, executando um pequeno script que é sugerido na documentação do OpenMosix que pode ser baixado no link abaixo:
Dê permissão de execução no arquivo gerado:
# chmod +x script_cluster.sh
Abra um segundo terminal e execute o comando:
# msmon
O msmon é um monitor gráfico que mostra a carga de processamento de cada nó que faz parte do cluster. Vamos agora executar o script que fizemos, execute-o algumas vezes consecutivas com o comando:
# ./script_cluster.sh &
Verifique no msmon que cada um dos nós do cluster recebe uma carga de processamento, isso indica que o cluster está funcionando corretamente.
Palavras finais
Teste o seu cluster, execute o mesmo script em uma máquina isolada para ver o tempo que ela leva para executar o script e compare com o tempo que o cluster gasta. Com isso podemos ver a potencialidade do cluster, ele pode ser aplicado em inumeras soluções!!! =)
Os nós que utilizei nos testes foram:
Notebook Compaq nx9005
Athlon xp 2400 2 Ghz,
512 de Ram,
hd de 80 GB
PC Intel Celeron 2.4 Ghz,
256 de Ram,
hd de 80 GB
PC AMD 750 Mhz,
512 de Ram,
hd de 40 GB
Com essas máquinas simples o cluster funcionou perfeitamente diminuindo o tempo de processamento em alguns aplicativos que testei como emulação de jogos, abertura de programas pesados como a IDE Eclipse para java e outros mais.
Tive um ganho notavel em tempo de execução desses aplicativos.
Vale a pena testar o funcionamento de um cluster e aplicalo em algumas soluções que requerem níveis altos de processamento. Espero que tenham gostado, até a próxima!!!
Referêcias:
Slackuser: Clayton Eduardo dos Santos
http://openmosix.sourceforge.net/
http://openmosix.sourceforge.net/development.html
Parabéns pelo artigo. Sou novo em linux. Estou pesquisando as distribuições linux. Estou começando a gostar do slackware.
Mario vou presisar de uma ajuda de vc para montar um cluster
Acredito que citar a fonte do artigo original no qual o seu foi “baseado” é mais interessante do que citar o meu nome. Segue o link:
http://www.slackwarezine.com.br/download/slackzine16.pdf
Atenciosamente,
Clayton Eduardo dos Santos
Muito bom o tutorial…
Tenho uma dúvida…
Sou universitário na área de Ciências da Computação, e estou na eminência de entregar um trabalho prático - Cluster, porém tenho que desenvolver No DEBIAN.4…
Será que este tutorial funciona no Debian também?
Se a resposta for não, será que você poderá me dar algumas dicas….
Abraços…
Meca…
kara, muito bom.
Para ter um server leve e seguro o q vc recomendaria? o mesmo vale para os slacks nas maquinas virtuais.
Com isso posso implementar usando o vmplayer ja que nao tenho o hardware ?
to com um celeron 2.6 e 1 gb.
abs
O Artigo realmente é muito bom, to tentando implementa-lo como parte do meu trabalho de conclusao de curso, porem essa versao do gcc3.2.3 esta conrropida. Alguem saberia me dizer outro mirro que eu possa baixar essa mesma versao?