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:
- permite sumar un nuevo nivel de redundancia en las copias de seguridad.
- permite acceder a los archivos desde cualquier lugar, ya que normalmente, los otros dispositivos de respaldo quedan en la oficina.
- 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 PARAMETERScd /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
doneecho 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