Backup em Rede

Diversos artigos na internet mostram como fazer um backup remoto de servidores Linux de forma automática.

Colhi muitas informações e fiz um script para que diáriamente o backup seja feito.

O script (bin/backup_rsync.sh) tá disponível abaixo.

#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%
#
# Programa:     /root/bin/backup_rsync.sh
#
# Autor:        Jarbas Peixoto Júnior - DATAPREV/GO
#               jarbas.junior@gmail.com - (0xx62) 3501-2248
#
# Comentarios:  Efetua backup remoto via rsync sem senha
#
# Alterações:   30/11/2004 - Jarbas Peixoto Júnior - Versão Preliminar
#               29/12/2004 - Jarbas - atualizar a data do servidor remoto
#               04/01/2004 - Jarbas - mostrar estatísticas de transferências
#
# OBSERVACAO IMPORTANTE - OBSERVACAO IMPORTANTE - OBSERVACAO IMPORTANTE
#-------------------------------------------------------------------------------
# Obs.: Há a necessidade de o servidor remoto ter instalado (e rodando) o sshd
#       configurado para permitir login remoto do root.
#       Veja no google: rsync sem senha
#
#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%

# Habitila o Cancelamento através do ^C ou "kill"
trap _abort 1 2 15
# Na saída normal apaga arq.temporários criados
trap _limpa_arq_temp 0

#--------------------------------------------------------------------
# Apaga arquivos temporários utilizados
_limpa_arq_temp()
{ # BEGIN _limpa_arq_temp
    rm -rf $ARQ_LOG $ARQ_ERROS $ARQ_ALERTA > /dev/null
} # END _limpa_arq_temp


#--------------------------------------------------------------------
# Informa sobre o Cancelamento do Backup por Usuário
_abort()
{ # BEGIN _abort
    echo >&2
    echo '!!! Rotina CANCELADA por usuário.' >&2
    echo >&2
    exit 1
} # END _abort


# Verificar se o parmâmetro passado é um IP válido
if [ $# -ne 2 ]; then
    echo "Sintaxe: $0  " >&2
    exit 1
fi

IP_REMOTO="$1" # Pega o primeiro parâmetro como IP-REMOTO
LOCALIDADE=$2  # Descrição da Localidade

# Diretórios que não serão backapeados
EXCLUIR="/bin /boot /dev /hd2 /home2 /initrd /lib /lost+found /mnt /opt /proc /sbin/ /sys /srv /tftpboot /tmp /usr"

# Diretório Base do Backup via RSYNC
HOME_RSYNC="/hd2/rsync"

# Email de confirmação de execucao
EMAIL_OK="jarbas.peixoto@previdencia.gov.br, carlos.natal@previdencia.gov.br"

# Email de Erro de Execução
EMAIL_ERROR="jarbas.peixoto@previdencia.gov.br, carlos.natal@previdencia.gov.br"

# IP da Máquina Local - Servidor de Backup
MAQUINA_IP=`LC_ALL=C /sbin/ifconfig eth0 | grep "inet addr" | cut  -f 2 -d: | tr -d " " | tr -d " Bcast"`

ARQ_LOG="/tmp/${IP_REMOTO}.log"         # Arquivo de Log
ARQ_ERROS="/tmp/${IP_REMOTO}.erros"     # Arquivo de Erros (MSG)
ARQ_ALERTA="/tmp/${IP_REMOTO}.alerta"   # Arquivo enviado para o SUPORTE

# Verificar se a máquina remota está ligada
ping ${IP_REMOTO} -q -c1 >> /dev/null 2>&1

if [ $? -eq 0 ] ; then # maquina ligada

  # Gerar opção do rsync com a lista de diretorios a excluir
  RSE=""
  for DIR1 in ${EXCLUIR}; do
    RSE="${RSE} --exclude=${DIR1}"
  done

  #- O Verdadeiro RSYNC -----------------------------------------------

  echo "===== INICIO EM [ `date +%d/%m/%Y-%H:%M:%S` ]====="             > ${ARQ_LOG} 2>&1
  rsync -az --partial --delete --stats ${RSE} root@${IP_REMOTO}:/ ${HOME_RSYNC}/${IP_REMOTO}/   >> ${ARQ_LOG} 2> ${ARQ_ERROS}
  echo "===== TERMINO EM [ `date +%d/%m/%Y-%H:%M:%S` ]====="            >> ${ARQ_LOG} 2>&1

  echo "=[ BACKUP VIA RSYNC ]=================================================
Servidor Rsync......: ${MAQUINA_IP}
Rsync Remoto........: ${IP_REMOTO} / ${LOCALIDADE}
Diretorios Excluidos: ${EXCLUIR}

=[ RSYNC REMOTO ]====================================================="  > ${ARQ_ALERTA} 2>&1
  ssh root@${IP_REMOTO} "df -h; rdate -s -p ${MAQUINA_IP}"              >> ${ARQ_ALERTA} 2>&1
  echo "
=[ SERVIDOR RSYNC ]===================================================" >> ${ARQ_ALERTA} 2>&1
  du -sh ${HOME_RSYNC}/${IP_REMOTO}/*                                   >> ${ARQ_ALERTA} 2>&1
  echo "======================================================================" >> ${ARQ_ALERTA} 2>&1
else
  echo "ERROR: Maquina remota [ ${IP_REMOTO} ] DESLIGADA"               >> ${ARQ_ERROS} 2>&1
fi

cat ${ARQ_LOG}                                                          >> ${ARQ_ALERTA} 2>&1

cat ${ARQ_ERROS}                                                        >> ${ARQ_ALERTA} 2>&1

grep -i "ERROR" ${ARQ_ERROS} > /dev/null 2>&1

if [ $? -eq 0 ]; then
    mail -s "rsync de ${LOCALIDADE} - [ERROR]" ${EMAIL_ERROR} < ${ARQ_ALERTA}
else
    mail -s "rsync de ${LOCALIDADE} - [OK]" ${EMAIL_OK} < ${ARQ_ALERTA}
fi

Para sincronizar a data e hora dos servidores locais faço uma sincronização à noite com um único servidor, que chamei internamente de servidor mestre. Este servidor será utilizado para acertar a data/hora dos demais servidores.

O script (hlb.sh) está disponível abaixo:

##########################################################
#  Script /root/bin/hlb.sh - Hora Legal Brasileira
#
#  Autor: Pablo Nehab Hess - "NatuNobilis"
#
#  Este script pega a hora legal de Brasilia e fornece a
#  data e hora correta para o comando `date`
#
#  Use-o da forma que lhe agradar e a seu próprio risco
#
#  Alteração: 21/06/2005 - jarbas.junior@gmail.com
#
##########################################################

LINHA=`lynx -dump http://pcdsh01.on.br/ispy.asp |grep Bras |tr -s ' '|cut -f 4,3 -d\ `
# Precaução contra erro de conexão
# Obrigado Anderson Alves em 17/03/2005
if [ $? -eq 0 ]; then
        DD=`echo $LINHA | cut -f1 -d "/"`
        # Tratar a saida para satisfazer o formato do comando date.
        [ $DD -lt 10 ] && DD="0$DD"
        MM=`echo $LINHA | cut -f2 -d "/"`
        # Tratar a saida para satisfazer o formato do comando date.
        [ $MM -lt 10 ] && MM="0$MM"
        YY=`echo $LINHA | cut -f3 -d "/" | cut -f1 -d " " | cut -b3-4`
        CC=`echo $LINHA | cut -f3 -d "/" | cut -f1 -d " " | cut -b1-2`
        hhmm=`echo $LINHA | cut -f2 -d " " | cut -f1,2 -d ":" --output-delimiter="" `
        ss=`echo $LINHA | cut -f3 -d: `

        date "$MM$DD$hhmm$YY.$ss"
else
        echo "ERRO: Falha ao obter hora, relogio nao atualizado."
fi

Coloco tudo isso no cron:

## Acerta o Relogio desta máquina com o Serviço de Tempo Oficial Brasileiro
## Todo dia às 00:30 (meia noite e meia)
##===============================================================
30 00 * * * /root/bin/hlb.sh > /dev/null

## Backup Remoto de servidores no INSS
## De terça a sábado às 02 horas da manhã
##========================================
01 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.211 "Portal+TWiki+CACIC"

02 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.206 "PROCURADORIA"

03 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.206 "UNIVERSITARIO"

04 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.206 "POSTO CENTRO"

05 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.206 "ANAPOLIS"

06 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xx.206 "SEC.RECEITA PREVIDENCIARIA"

06 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.206 "SEXTA JUNTA"

07 02 * * 2-6 /root/bin/backup_rsync.sh 10.xx.xxx.205 "RH"

Topic revision: r2 - 10 Feb 2006 - 13:08:16 - JarbasJunior
Get Firefox!

eXTReMe Tracker



Create personal sidebar

 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki-SL? Send feedback