Respaldar nuestro Asterisk en Dropbox

Uno de los aspectos críticos en los sistemas Asterisk es el respaldo de la información generada, así como la configuración del servidor; dialplan, registros CDR, librerias y sonidos, son algunos de los elementos que nos van a hacer falta cuando en el sistema X del cliente Z «algo se rompe», a causa de errores de disco, incendio, robo, etc.

Ahora bien, si esto pasara el 21/12/2012, no habría que preocuparse, ya que se trataría de un problema general.

 

 

Hoy les comparto como automatizar el backup de un servidor Asterisk en una cuenta Dropbox: este método no debe reemplazar de NINGUNA forma el método tradicional (cintas, DVD, pendrive, etc.) ya que en las Condiciones del Servicio se afirma que «Dropbox no será responsable […] de las pérdidas o daños de datos […]«.

 

 

A pesar de esto, la solución que propongo no deja de ser conveniente:

  1. permite sumar un nuevo nivel de redundancia en las copias de seguridad.
  2. permite acceder a los archivos desde cualquier lugar, ya que normalmente, los otros dispositivos de respaldo quedan en la oficina.
  3. es gratuito y la reputación de Dropbox nos asegura confiabilidad en sus sistemas.

Lo que siguen son los pasos para que nuestro sistema se respalde en la nube; los mismos fueron probados en un sistema Ubuntu Server con Asterisk puro y python versión 2.7.3 [en caso de tener problemas con versiones anteriores de python vean la nota relativa en los comentarios]:

cd /usr/src
wget –no-check-certificate -O dropbox.py https://www.dropbox.com/download?dl=packages/dropbox.py
python dropbox.py start -i

Aparecerá:

Starting Dropbox…
Dropbox is the easiest way to share and store your files online. Want to learn more? Head to http://www.dropbox.com/

In order to use Dropbox, you must download the proprietary daemon.
Note: python-gpgme is not installed, we will not be able to verify binary signatures. [y/n]

Confirmamos con «y» y iniciará el download del client Dropbox:

Downloading Dropbox… 3%
Downloading Dropbox… 75%
Downloading Dropbox… 100%
Unpacking Dropbox… 100%
Dropbox isn’t running!
Done!

Ejecutamos:

        python dropbox.py start -i

Aparecerá el siguiente aviso:

To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=95bb39ab445861c30bo65f554gh564f5

Abrimos en un browser el link, al fin de enlazar el servidor con nuestra cuenta Dropbox

Ahora, paramos el proceso dropbox con:

python dropbox.py stop

 

Definimos que el proceso dropbox se ejecute automáticamente a cada reinicio del sistema:
        python dropbox.py autostart

dropbox autostart [y/n]

options:
n dropbox will not start automatically at login
y dropbox will start automatically at login (default)

Note: May only work on current Ubuntu distributions.

La opción necesita un parámetro más, ejecutamos nuevamente:

        python dropbox.py autostart y

Ahora iniciamos nuevamente el cliente con:

        python dropbox.py start

Para controlas su estado ejecutamos:

        python dropbox.py status

 

 

 

Ahora que el cliente está configurado, preparamos la carpeta de respaldo que sincronizaremos en la nube; en mi caso decidí que el servidor se llama drop_server001, ténganlo en cuenta a la hora de configurar el suyo:

cd /root/Dropbox
mkdir drop_server001
cd drop_server001
mv /usr/src/dropbox.py .

Ahora generamos el script BASH que se ocupará de hacer la copia de los archivos más importantes de nuestro servidor Asterisk, utilizando rsync; es necesario personalizar los siguientes parámetros:

BACKUPFOLDERS: es la lista de carpetas a respaldar, por defecto incluye:
/etc/asterisk/, /var/lib/asterisk/, /var/spool/asterisk/, /usr/lib/asterisk/, /var/lib, /mysql/, /var/www/ [se pueden incluir otros directorios importantes].

DBNAMES: es la lista de database a respaldar

DBUSER y DBPASS: datos de login a MySQL

 

BONUS PACK !

  • el script generará también el archivo 000_LAST_UPDATE_…; su nombre contendrá la fecha y hora del ultimo respaldo, …para saber si todo se está ejecutando correctamente con solo una mirada !
  • se generará el archivo 000_DISK_USAGE_XX%; su nombre contendrá el porcentaje de ocupación del disco rígido, …cuantas veces se llenó el disco de nuestro Asterisk y no nos dimos cuenta a tiempo ?

 

Ahora bien, generamos el script backup.sh

        vi backup.sh

#!/bin/bash

#SET PARAMETERS
SERVER_NAME=drop_server001
BACKUPFOLDERS=(/etc/asterisk/
/var/lib/asterisk/
/var/spool/asterisk/
/usr/lib/asterisk/
/var/lib/mysql/
/var/www/)

DBNAMES=(mysql asterisk)
DBUSER=your_user
DBPASS=your_strong_password
# END OF PARAMETERS

cd /root/Dropbox/${SERVER_NAME}

#LOG last update
STAMP=`date +»%Y%m%d_%H:%M»`;
rm -f 000_LAST_UPDATE*
echo ${STAMP}
touch 000_LAST_UPDATE_${STAMP}

#LOG disk usage
DF=`df –total | tail -n 1`;
PERCENTAGE=${DF:${#DF}-4}
PERCENTAGE=${PERCENTAGE/ /_}
PERCENTAGE=`echo $PERCENTAGE | tr -d ‘ ‘`
rm -f 000_DISK_USAGE*
touch 000_DISK_USAGE_${PERCENTAGE}

BKDIR=/root/Dropbox/${SERVER_NAME}/BACKUPFOLDERS

[ -d $BKDIR ] || mkdir $BKDIR

for folders in ${BACKUPFOLDERS[@]}
do
mkdir -p ${BKDIR}${folders}
if [ «${folders}» != «/var/spool/asterisk/» ]
then
EXCLUDE=»»
else
EXCLUDE=»–exclude monitor»
fi
rsync -av –delete $EXCLUDE $folders ${BKDIR}${folders}
done

#——————-
# Backup Databases
#——————-
echo «Starting Database Backup…»
mkdir -p ${BKDIR}/var/lib/mysql/

for i in ${DBNAMES[@]}
do
echo BACKUP ${i} DATABASE
mysqldump -u${DBUSER} -p${DBPASS} –routines ${i} > ${BKDIR}/var/lib/mysql/${i}.sql
done

echo TASK COMPLETED!

Definimos el script como ejecutable y borramos los archivos de prueba de Dropbox:

chmod +x backup.sh
rm -fr /root/Dropbox/Photos
rm /root/Dropbox/Comenzar.pdf

Finalmente ejecutamos nuestro script con:

        ./backup.sh

El ultimo paso a ejecutar será definir una tarea CRON para que cada día a las 03:00 de la mañana se actualicen las carpetas de respaldo:

        vi /etc/crontab

00 3 * * * root /root/Dropbox/drop_server001/backup.sh > /root/Dropbox/drop_server001/rsync.log

y reiniciamos el servicio CRON para que tome las modificaciones:
        service cron restart

La ventaja de utilizar rsync es que cada noche se sincronizarán en la nube SOLO los archivos nuevos o modificados con consecuente reducción del consumo de ancho de banda.

Espero sus comentarios !

@priorfra