Automatização de um cluster [RESOLVIDO]

1. Automatização de um cluster [RESOLVIDO]

maxshu
schrodinger

(usa Debian)

Enviado em 28/10/2013 - 19:03h

Olá pessoal eu resolvi automatizar o processo de instalação de um cluster usando o shell do Linux. Aí vou mandando o script para que vocês possam implementar, melhorar ou até mesmo reecria-lo.


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

# sudo mount Master:$path1 ${user[i]}:$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[i] = "Master" ]; then
echo "Master"
else
ssh ${user[i]} 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



  


2. Re: Automatização de um cluster [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 28/10/2013 - 19:17h

Seria bom, se você comentasse para qual serviço este cluster seu vai funcionar 'é servidor de arquivo ne?', e dizer em qual distribuição você adotou.

Isto na tela inicial do seu script cairia bem.




3. Agradecimento

maxshu
schrodinger

(usa Debian)

Enviado em 28/10/2013 - 19:57h

Obrigado pela opinião!

Este cluster funciona no Debian e no Ubuntu. Criei ele com o objetivo de rodar meus programas científicos de forma paralela e de forma rápida. Pra quem trabalha com o ubuntu e o Debian este script é recomendado, pois ele automatiza a parte suada da montagem do cluster, deixando pro usuário apenas a parte de rodar o programa. Este programa já foi testado por mim, e ainda continuo trabalhando nele.
Espero que este script ajude muito na criação do cluster beowulf.


4. Programa atualizado no link abaixo:

5. Re: Automatização de um cluster [RESOLVIDO]

Estefanio Brunhara
stefaniobrunhara

(usa CentOS)

Enviado em 24/10/2014 - 08:35h

Bacana!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts