Cluster beowulf

Publicado por maxshu (última atualização em 06/01/2016)

[ Hits: 8.576 ]

Homepage: programacaocomputador.blogspot.com.br

Download beowulf_cluster.sh

Download clusterbeowulf.sh (versão 2)

Download 1450234273.clusterbeowulf.sh (versão 3)




Olá pessoal, eu resolvi automatizar o processo de instalação de um cluster usando o shell do GNU/Linux. Aí vou mandando o script para que vocês possam implementar, melhorar. Este foi criado para rodar programas de forma paralela (no caso usei MPI).

Este cluster foi testado no Ubuntu 12.04 e Debian 7!!
Adaptem como queiram!!!

  



Versões atualizadas deste script

Versão 2 - Enviado por maxshu em 23/10/2014

Changelog: Eu debuguei o programa por inteiro. O programa está muito bom e mais legível!!!

Download clusterbeowulf.sh


Versão 3 - Enviado por maxshu em 16/12/2015

Changelog: Nesta nova versão foi melhorada a aparência da interface, além da reescritura de alguns comandos. Na versão 3.0 criarei uma interface gráfica para o mesmo, onde irei testar em outras distribuições, mas falta tempo para isso. Quem se interessar em me ajudar, ficarei muito satisfeito.

Download 1450234273.clusterbeowulf.sh


Esconder código-fonte

#!/bin/bash
# ===================================================================
# = Autor: Francisco Iago Lira Passos =
# = Email: iagolirapassos@gmail.com   =
# = Data: Criado em 26 de outubro de 2013 =
# = Autorização: Livre para melhorias =
# ===================================================================

clear
echo "======O número de computadores deve ser um, pois as configurações são de pc-em-pc!======="
echo "======O script foi configurado com o nome Master para o computador Mestre!======"
echo "======Quando for inserir o nome do usuário 'mestre' use 'Master'======"
echo "======Esse script foi criado baseado nos compuatadores que possuem o mesmo nome de usuário e computador!===="
echo "========Passo 1========"
echo "Entre com números inteiros"
echo "======Os usuários possuem o mesmo nome? sim(1) ou não(0)======"
read mesmo
if [ $mesmo -eq 0 ]; then
echo "Pois configure os pc's para que todos tenham usuários com nomes iguais!"
else
echo "======Ok! Passando pro próximo passo!======="
fi

echo "=======Quantos computadores serão configurados na rede?======="
read numrede
IP=($numrede)
echo "======As configurações de /etc/hosts ja foram feitas? sim(1) ou não(0)======"
read name

if [ $name -eq 1 ]; then
echo "======Ok!Passando para o proximo passo!======"
else
echo "======Aqui serão adicionados os Ip's e os usuarios no arquivo /etc/hosts======="

for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do

if [ ${i} -gt $numrede ]; then
break
fi
echo "$cont"
echo "Entre com o IP do usuário (ex: 10.38.14.1)"
read IP[cont]
echo "Entre com o nome de usuário (ex: Master, slave1,...)"
read user[cont]
echo "Qual a senha do usuário"
read senha[cont]
echo "${IP[cont]} ${user[cont]} ${senha[cont]}"
echo "${IP[cont]}   ${user[cont]}" | sudo tee -a /etc/hosts
done

fi

clear

echo "========Passo 2========"
echo "===Instalando o NFS===="
echo "======A maquina é slave(1) ou master(0)?======="
read ms
# ============Configuração do(s) slave(s)======================

if [ $ms -eq 1 ]; then
echo "======O cifs-utils já está instalado? sim(1) ou não(0)======"
read sif

if [ $sif -eq 0 ]; then
sudo apt-get install cifs-utils
else
echo "======Ok! Passando para o proximo passo!======"
fi

echo "=======O nfs-client já está instalado? sim(1) ou não(0)======="
read nfs

if [ $nfs -eq 0 ]; then
sudo apt-get install nfs-client
else
echo "=======Ok! Passando para o proximo passo!======="
fi

echo "======Digite o nome da pasta que deseja compartilhar(ex: /home/user/nomefile)======"
read path1

# criando o ponto de montagem
sudo mkdir $path1
echo "Master:$path1   $path1   nfs" | sudo tee -a /etc/fstab
sudo mount Master:$path1 $path1
# Agora vamos verificar se as pastas foram montadas corretamente
sudo mount -a

clear

# =============Passo 3=====================
echo "Instalando o GCC"
echo "=======O build-essencial já está instalado? sim(1) ou não(0)======"
read build

if [ $build -eq 0 ]; then
sudo apt-get install build-essencial
else
echo "======Ok! Passando para o proximo passo!======="
fi

clear

echo "======O mpich2 já está instalado? sim(1) ou não(0)======"
read mpich

if [ $mpich -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
cp mpich-3.0.4.tar.gz $path1
cd $path1/mpich-3.0.4
tar -vzxf mpich-3.0.4.tar.gz
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======"
fi

echo "=======O hydra já está instalado? sim(1) ou não(0)======="
read hydra

if [ $hydra -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/hydra-3.0.4.tar.gz
cp hydra-3.0.4.tar.gz $path1
cd $path1/hydra-3.0.4
tar -vzxf hydra-3.0.4.tar.gz
cd $path1/hydra-3.0.4
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======="
fi


echo "======Testando o mpiexec e o mpirun======="

which mpiexec
which mpirun

clear

export PATH=$path1/mpich-3.0.4:$PATH
echo "======Cluster concluído com sucesso!======"
fi

clear

# ============Configuração do Master==============================
sudo mount -a
if [ $ms -eq 0 ]; then
echo "======Criando ponto de montagem(Pasta compartilhada)======"

echo "======O cifs-utils já está instalado? sim(1) ou não(0)======"
read sif

if [ $sif -eq 0 ]; then
sudo apt-get install cifs-utils
else
echo "======Ok! Passando para o proximo passo!======"
fi

echo "======O nfs-server já está instalado? sim(1) ou não(0)======"
read nfs

if [ $nfs -eq 0 ]; then
sudo apt-get install nfs-server
else
echo "======Ok! Passando para o proximo passo!======"
fi

echo "======Digite o nome da pasta que deseja compartilhar(ex: /home/user/nomefile)======"
read path1

# criando o ponto de montagem
sudo mkdir $path1

echo "$path1 *(rw,sync)" | sudo tee -a /etc/exports

sudo service nfs-kernel-server restart

for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do

if [ ${i} -gt $numrede ]; then
break
fi
if [ $user = "Master" ]; then
echo "=====Comando em observação! Caso surja algum bug substitua 'cifs-utils' por 'smbfs' digitando 'nano /etc/fstab'!======"
echo "//${user}@slave:$path1 $path1 cifs-utils username=${user},password=${senha} 0 0" | sudo tee -a /etc/fstab
fi

# sudo mount Master:$path1 ${user}:$path1
done

# echo "Master:$path1   $path1   nfs" | sudo tee -a /etc/fstab

# fi

# Agora vamos editar o arquivo /etc/exports
echo "$path1" | sudo tee -a /etc/exports
# configurando a senha de comunicação automotica ssh

echo "======Sua senha para acesso ssh já está configurada? sim(1) ou não(0)======"
read passewd

if [ $passewd -eq 0 ]; then
ssh-keygen -t rsa
cat Master:$path1/id_pub.dsa >> $path1/authorized_keys
else
echo "=======Ok! Passando pro próximo passo!======="
fi

echo "======Testando sua conexão com o(s) slave(s)======="


for i in 1 2 3 4 5 6 7 8 9 10 11 12 13
do

if [ ${i} -gt $numrede ]; then
break
fi
if [ $user = "Master" ]; then
echo "Master"
else
ssh ${user} hostname
fi
done

clear

echo "======O build-essencial já está instalado? sim(1) ou não(0)======"
read build

if [ $build -eq 0 ]; then
sudo apt-get install build-essencial
else
echo "======Ok! Passando para o proximo passo!======"
fi

clear

echo "======O mpich2 já está instalado? sim(1) ou não(0)======"
read mpich

if [ $mpich -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
cp mpich-3.0.4.tar.gz $path1
cd $path1/mpich-3.0.4
tar -vzxf mpich-3.0.4.tar.gz
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======"
fi

echo "=======O hydra já está instalado? sim(1) ou não(0)======="
read hydra

if [ $hydra -eq 0 ]; then
wget http://www.mpich.org/static/downloads/3.0.4/hydra-3.0.4.tar.gz
cp hydra-3.0.4.tar.gz $path1
cd $path1/hydra-3.0.4
tar -vzxf hydra-3.0.4.tar.gz
cd $path1/hydra-3.0.4
sudo ./configure
sudo make
sudo make install
cd $path1
else
echo "======Ok! Passando para o proximo passo!======="
fi

echo "======Testando o mpiexec e o mpirun======"

which mpiexec
which mpirun

clear

export PATH=$path1/mpich-3.0.4:$PATH

cd $path1

echo "======Cluster concluído com sucesso======!"

fi

Scripts recomendados

Achar IP válido

Expect-Bash

substituir strings nos nomes de arquivos

Shell para ativar o Iptables

Utilitário para Slackware 10


  

Comentários
[1] Comentário enviado por schrodinger em 20/10/2014 - 08:53h

O comando "for i in 1 2 3 4 5 6 7 8 9 10 11 12 13" pode ser substituído por "for (( exp1; exp2; exp3 ))" ...

[2] Comentário enviado por maloqueiro em 23/10/2014 - 21:02h

Posso criar um cluster com máquinas vírtuais (para estudar) ?
grato!

[3] Comentário enviado por schrodinger em 24/10/2014 - 23:23h

Caro maloqueiro com o linux vamos ao infinito e além...
Desfrute....

[4] Comentário enviado por iagolira em 26/12/2016 - 14:37h

Atenção! Este script escrevi com outro usuários já em desuso! Qualquer fale comigo.
Qualquer erro me perdoe, pois escrevi quando estava aprendendo shell script.

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts