Mostrando entradas con la etiqueta rsync. Mostrar todas las entradas
Mostrando entradas con la etiqueta rsync. Mostrar todas las entradas

viernes, 9 de noviembre de 2012

Backup "anti desastres"

(BETA 1.3.0)
Me encomendaron la tarea de hacer un backup que debe ser "anti desastres."
La idea de "bkp anti desastres" la uso para referirce a tener un backup 100% efectivo.

Imaginemos que tenemos el datacenter y nuestros equipos dentro, si por alguna razon EXPLOTA todo el datacenter o se derrumba el edificio, tanto los servers como los backups estan perdidos. Para ello se usa el llamado "bkp anti desastres".  
(Si lo se, también existen backups a cinta y bla bla bla) Hoy día las cintas salen mucho mas caras en comparación a un disco de 2Tb por eso y EN MI CASO no uso cintas.

Lo que voy hacer es:
1_Realizar backup de mis equipos en un storage
2_Realizar copias de seguridad periodicas (Diarias)
3_Configurar una VPN entre el datacenter y un equipo en otra zona. (Para traficar mis bkps de forma "segura")
4_Realizar una copia del ULTIMO backup a un servidor externo (usando la vpn)












4_SCRIP CON RSYNC PARA ENVIAR EL ULTIMO BACKUP A UN SERVER EXTERNO:

#/bin/bash!
# VARIABLES DE ENTORNO

#Directorio donde crea el log del backup
LOG="/var/log/remote_backup"

#Fecha de inicio de cada log con Hs,min,seg
FECHA=`date +%Y-%m-%d_%H-%M-%S`

#Hora para saber cuanto tardo aproximadamente en hacer el backup
HORA=`date +%H-%M-%S`

#Correo a donde se envía el log
MAIL="administrador@midominio.com.ar"



# Generar siempre UN NUEVO log (reemplaza el que está):
echo "                " >$LOG



echo  -----------------COMIENZO $HORA ----------------->>$LOG
# Comandos:
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "############################ SERVER_1 #########################################" >>$LOG
echo "                " >>$LOG
echo  ----------------- $FECHA ----------------->>$LOG
echo "                " >>$LOG
echo "                " >>$LOG

# Copiar con rsync a server remoto y generar un log
rsync -rv --progress --inplace --rsh='ssh -pXXXX' /mnt/backup/server1/mysql/backup_`date +%Y-%m-%d_`* root@200.0.0.1:/root/backup/server1/mysql/offsite_server1.tar.gz >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG


echo "############################ SERVER_2 #########################################" >>$LOG
echo "                " >>$LOG
echo  ----------------- $FECHA ----------------->>$LOG
echo "                " >>$LOG
echo "                " >>$LOG

# Copiar con rsync a server remoto y generar un log
rsync -rv --progress --inplace --rsh='ssh -pXXXX' /mnt/backup/server2/server/backup_`date +%Y-%m-%d_`* root@200.0.0.1:/root/backup/server_2/mysql/offsite_server2.tar.gz >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG


echo "############################ SERVER_3 #########################################" >>$LOG
echo "                " >>$LOG
echo  ----------------- $FECHA ----------------->>$LOG
echo "                " >>$LOG
echo "                " >>$LOG

# Copiar con rsync a server remoto y generar un log
rsync -rv --progress --inplace --rsh='ssh -pXXXX' /mnt/backup/server3/server/backup_`date +%Y-%m-%d_`* root@200.0.0.1:/root/backup/server_3/mysql/offsite_server2.tar.gz >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo "                " >>$LOG
echo  -----------------FIN $HORA ----------------->>$LOG

# Enviar por mail el log (EN ANALISIS)
echo $LOG | mail -s "Backup Remoto" $MAIL

miércoles, 18 de abril de 2012

Script de backup con rsync


Dejo un script de backup que estoy realizando, de momento es lo suficientemente básico para hacer lo mínimo indispensable, copiar de un directorio a otro, generar un tar.gz y crear un log con fecha y hora en el equipo para luego ser enviado por correo.
Más adelante iré agregando mas y mejores opciones para generar backups.

Algo para destacar es que este script no puede ser croneado ya que intenta ser "interactivo".
Esto es así por que algunos clientes querían realizar backups de otros directorios, entonces decidí hacerlo interactivo para que el cliente pueda backupear lo que desee.

Si alguien quiere, puede borrar la parte "interactiva" y, colocar las rutas a los diferentes directorios para luego cronearlo.



 #!/bin/sh

    ####################################
    # Scrip de backup con usando Rsync #
    ####################################


 ############### MODO INTERACTIVO ################
 echo "                                                  "
 echo "################### ATENCION: ####################### "
 echo "Si el directorio no existe se creara automaticamente."
 echo "De lo contrario se crearan los documentos en sus respectivos directorios."
 echo "#####################################################"
 echo "                                                  "
 echo " Coloque el correo al que se le enviara el log (Requiere postfix instalado)  "
 echo -n " Correo: "
 read correo
 echo "                                                          "
 echo " Si desea puede colocar una copia. (Dejar en blanco si no envía copias.)  "
 echo -n "Correo CC: "
 read correoCC
 echo "                                                          "
 echo " Si desea puede colocar una copia Oculta. (Dejar en blanco si no envía copias.)  "
 echo -n "Correo CCO: "
 read correo0
 echo "                                                          "
 echo " Colocar la ruta de donde OBTENER los datos para backupear, ej: /home/usuario"
 echo -n " Ruta datos: "
 read rutainicio
 echo "                                                          "
 echo " Colocar la ruta donde quiere DEJAR los datos para backupear, ej: /backups"
 echo -n " Ruta de backup: "
 read rutadejar
 echo "                                                          "
 echo " Colocar la ruta donde quiere DEJAR el .TAR.GZ del backup, ej: /backups/zip"
 echo -n " Ruta para el zip: "
 read rutazip
 echo "                                                          "
 echo " Colocar la ruta del directorio que quiere DEJAR los LOGS "
 echo -n " Ruta logs:  "
 read rutalogs
 echo "                                                          "
 echo "                                                          "


 ##################### CREAR LOS DIRECTORIOS ################

 # Si los directorios no existen, los crea. si existen deja los datos.
 mkdir -p $rutainicio
 mkdir -p $rutadejar
 mkdir -p $rutazip
 mkdir -p $rutalogs

 ################# VARIABLES  ######################
           
 #export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

 # Correo al cual se envia el log ( requiere postfix probado y funciona :D )
 MAIL=$correo

 # Nombre del equipo sobre el cual se corre el bkp
 EQUIPO=`hostname`

 # Ruta al directorio que quiero "OBTENER" los datos para backupear
 #OBTENER=/home/jonathan/Escritorio/inicio/
 OBTENER=$rutainicio/

 # Ruta al dirctrio que quiero "DEJAR" el backup
 #DEJAR=/home/jonathan/Escritorio/fin
 DEJAR=$rutadejar

 # Ruta al dirctrio que quiero "DEJAR" el .tar.gz
 DEJARZIP=$rutazip

 # Carpeta generada para backup ej: backup_fecha
 BACK_=backup_

 # Fecha de archivo para incrementales
 DATE=`date +%d-%m-%y__%H:%M:%S`

 # Opciones para el Rsync
 OPCIONES="-avt --force --ignore-errors "
 OPCIONES_ZIP="cvzf"
 #--backup-dir=$DEJAR/$DATE -av

 # -v, --verbose               increase verbosity
 # -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
 # -t, --times                 preserve modification times
 # --force                 force deletion of directories even if not empty



 #######################################################
 ######################## Generar el Backup ############
 ################# Generar un log ######################
 ########## Enviar log por mail ########################
 #######################################################


 ####################### Copiando con Rsync ####################
 rsync $OPCIONES $OBTENER $DEJAR/$BACK_$DATE


 ################## comprimir en tar.gz #################
 tar $OPCIONES_ZIP $DEJARZIP/$BACK_$DATE.tar.gz $OBTENER


 ############# BETA, BORRAR BACKUPS VIEJOS ######
 # borrar todo lo que sea mas viejo a 7 dias.
 # date --date='7 days ago'


 ############ Generar un log en el directorio que espesifiquemos #########
   echo "Backup del equipo $EQUIPO realizado el día $DATE

           ¡Ya puede dormir tranquilo!">$rutalogs/tarea_$DATE

 # Mandar el contenido del log a un documento
   echo >>$rutalogs/tarea_$DATE

 # Titulo y directorio dondfe queda el log
   echo "############ Se realizo backup de los siguientes datos ############   ">>$rutalogs/tarea_$DATE

 du -ha  $OBTENER >>$rutalogs/tarea_$DATE


 # Enviar por mail el log anteriormente creado
 # requiere mailutils    ( sudo apt-get install mailutils )

 mail $MAIL -s Reporte_$BACK_$EQUIPO_$DATE <$rutalogs/tarea_$DATE -c $correoCC -b $correo0

 echo "                                                          "
 echo "            ¡Realizado!                             "
 echo "                                                          "

 exit 0



---------------------------------------------------------------------------------------------------------



Esto en algun momento lo usare para borrar backups viejos.


Data interesante de como calcular la hora.

date
date --date='3 seconds'
date --date='3 seconds ago'
date --date='4 hours'
date --date='tomorrow'
date --date='1 day'
date --date='1 days'
date --date='yesterday'
date --date='1 day ago'
date --date='2 days ago'
date --date='1 week'
date --date='1 fortnight'
date --date='1 month'
date --date='3 years ago'