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.586 ]

Homepage: https://www.vivaolinux.com.br/~alexandre_gms

Download transfer_copy.sh




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!!

  



Esconder código-fonte

#!/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

Scripts recomendados

envia-bakcup

Rsync-centos

mkzeowmp - zeo mount point para PZP (python, zope e plone)

Intervalo de tempo v.2 - Corrigido

Script para bloqueio MSN/SITE por horário/usuário


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts