Backup de vários servidores, diferenciado a rotina pela aplicação
Publicado por Alexandre Gonçalves Monteiro da Silva (última atualização em 28/08/2011)
[ Hits: 7.879 ]
Homepage: https://www.vivaolinux.com.br/~alexandre_gms
Ninjas, certa vez me pediram um script para realizar Backup para mais de 100 servidores. Neste servidores haviam aplicações Weblogic instaladas e estas seguiam uma estrutura de diretórios diferenciado das demais. Nas aplicações era necessário somente captar os arquivos de configuração, arquivos binários e libs. A necessidade é compactar todas estas pastas/arquivos, renomeá-las para o nome do servidor seguido com a data do dia e inseri-los no DataServer1 e DataServer2, por exemplo: application_server1_2008-20-02.tgz.
Até aí tudo bem, já tinha a lógica para bolar o código, porém verifiquei que somente o servidor CENTRALSERVER possuía chave publica para as demais máquinas, ou seja, não era possível executar o comando scp (sem utilização de senha) diretamente do script para as máquinas DataServer 1 e 2. Fui obrigado a centralizar todos os BKP na CENTRALSERVER e em seguida enviá-los às DataServer´s. Segue a estrutura final do script com as condições corretas:
1) Compactar a pasta /usr/application/phase1 dentro do próprio Server
2) Enviar os arquivos compactados para a maquina de CENTRALSERVER em /tmp/app_bkp
3) Enviar estes arquivos para as maquinas DataServer1 e DataServer2 em /opt/BKP_SYSTEM
4) Se os arquivos forem enviados corretamente, serão removidos da maquina CENTRALSERVERS e do Server de aplicação
5) Na execução deste script, um log será gerado com todas as informações dos comandos realizados
Para constar que o Backup foi realizado corretamente, decidi criar um log com todas as informações que o script executa juntamente com o horário em que as mesmas foram realizadas.
Segue o código, ele já foi bastante útil, pois tive que restaurar alguns backup´s que usuários deletaram ou modificaram "distraidamente"! :-)
Bons backups para todos!!
#!/bin/bash
# Script para fazer Backup da pasta /usr/application/phase1 dos servidores listados no #arquivo servers
# Passos do script:
#
# 1) Compactar a pasta /usr/application/phase1 dentro do proprio Server
# 2) Enviar os arquivos compactados para a maquina de CENTRALSERVER #em /tmp/app_bkp
# 3) Enviar estes arquivos para as maquinas DataServer1 e DataServer2 #em /opt/BKP_SYSTEM
# 4) Se os arquivos forem enviados corretamente, serao removidos da maquina #CENTRALSERVERS e do Server
# 5) Na execucao deste script, um log serah gerado com todas as informacoes dos #comandos realizados
# Created by: Alexandre Monteiro - email: alexandregms2@gmail.com
servers=`cat servers`
data=`date +%d/%m/%y`
data_file=`date +%d-%m-%y`
hour=`date +%H:%M`
log="log_transfer"
echo -e "
########## INICIO DO BKP em $data - $hour ##########
" >> $log
VERIFY_FOLDER()
{
for c in $servers
do
if [ ! -z "$c" ]; then
ssh $c 'test -d /tmp/app_bkp/ARQUIVOS'
if [ $? -eq 0 ]; then
echo "Ja existe o diretorio /tmp/app_bkp/ARQUIVOS em $c"
else
ssh $c 'mkdir -p /tmp/app_bkp/ARQUIVOS'
if [ $? -eq 0 ]; then
echo "Diretorio /tmp/app_bkp/ARQUIVOS criado em $c"
fi
fi
fi
done
}
VERIFY_FOLDER
COPY_FOLDER()
{
for i in $servers
do
if [ ! -z "$i" ]; then
# Condicao para verificar se as maquinas sao de WEBLOGIC
if [ $i = SSWL01 ] || [ $i = SSWL02 ] || [ $i = SPWL01 ] || [ $i = SPWL02 ]; then
ssh $i 'tar -cvzf /tmp/app_bkp/'$i'_'$data_file'.tgz /usr/application/phase1 --exclude log* --exclude tmp* --exclude=/usr/application/phase1/.*'
if [ $? -eq 0 ]; then
echo "Compactacao realizada com sucesso em $i - $data - $hour" >> $log
fi
else
ssh $i 'tar -cvzf /tmp/app_bkp/'$i'_'$data_file'.tgz /usr/application --exclude log* --exclude out* --exclude=/usr/application/.* --exclude=/usr/application/old*'
if [ $? -eq 0 ]; then
echo "Compactacao realizada com sucesso em $i - $data - $hour" >> $log
fi
fi
fi
done
}
COPY_FOLDER
TRANSFER_FILES()
{
for j in $servers
do
if [ ! -z "$j" ]; then
scp $j:/tmp/app_bkp/$j*.tgz /tmp/
if [ $? -eq 0 ]; then
echo "Arquivo '$j'_$data_file.tgz enviado com sucesso para maquina CENTRAL_SERVER em $data as $hour" >> $log
else
echo "Arquivo '$j'_$data_file.tgz NAO foi enviado para maquina CENTRAL_SERVER em $data as $hour" >> $log
fi
else
echo "A transferencia nao foi realizada, a variavel esta vazia em $data as $hour" >> $log
fi
done
}
TRANSFER_FILES
SEND_MACHINES()
{
# Copiar arquivos para DataServer1
scp /tmp/*.tgz DataServer1:/opt/BKP_SYSTEM
if [ $? -eq 0 ]; then
echo "Arquivos copiados com sucesso para DataServer1 - $data - $hour" >> $log
else
echo "Arquivos nao copiados para DataServer1 - $data - $hour" >> $log
fi
# Copiar arquivos para DataServer2
scp /tmp/*.tgz DataServer2:/opt/BKP_SYSTEM
if [ $? -eq 0 ]; then
echo "Arquivos copiados com sucesso para DataServer2 - $data - $hour" >> $log
else
echo "Arquivos nao copiados para DataServer2 - $data - $hour" >> $log
fi
}
SEND_MACHINES
DEL_FILE()
{
servers=`cat servers`
for k in $servers
do
if [ ! -z "$k" ]; then
ssh $k 'rm -f /tmp/app_bkp/'$k'_'$data_file'.tgz'
if [ $? -eq 0 ]; then
echo "Remocao do arquivo compactado (*.tgz) realizada com sucesso em $k - $data - $hour" >> $log
rm '/tmp/'$k'_'$data_file'.tgz'
else
echo "A remocao do arquivo compactado (*.tgz) nao foi realizada em $k - $data - $hour" >> $log
fi
else
echo "Remocao nao realizada, pois a variavel esta vazia - $data - $hour" >> $log
fi
done
}
DEL_FILE
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS A PARTIR DE ARQUIVO
Dell 1390 WLAN (Broadcom 4311)
Script que gera um relatório diário do sistema!!!
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









