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

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

Script de configuração de DNS

Montagem fácil de pendrive

Configuração de rede no Virtualbox

Configurando um Servidor de Nomes no CL10 apenas respondendo algumas perguntas...

transformar maiúsculas em minuscula e vice-versa


  

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