Cluster beowulf

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

[ Hits: 8.664 ]

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

Conexão Remota Linux No Windows

Criar pacotes .deb apartir de script

Adcionando Maquinas no samba

gera saída com substituindo coluna por outra (substr)

Script de backup para fita DAT


  

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