29 de mayo de 2010

Backups con RIBS

Como es bien sabido, antes de pasar a producción cualquier proyecto es indispensable tener preparado y funcionando el sistema de Backup.
Sin ello mejor no empezar la actividad. Un altísimo porcentaje de empresas que sufren una pérdida de datos grave acaban cerrando.

Voy a hablar de RIBS. Un sistema en PHP que utiliza toda la potencia de Rsync tunelado via SSH para llevar a cabo el trabajo. Pensado para ser ejecutado en consola con PHP CLI a través de Cron y altamente configurable. Capaz de realizar copias incrementales y/o completas. Utiliza hardlinks.

Es prácticamente igual que rsnapshot, aunque me quedo con RIBS.

La única pega es que no tiene la posibilidad de ejecutar un comando previo al inicio del backup. Muy útil para hacer el dump de las baes de datos e incluirlo en la misma instancia del snapshot.

De todos modos para implementar esta funcionalidad sólo hay que añadir estas lineas justo antes del comentario de código "// now we do the actual rsync from the system into the latest snapshot (notice that":

//pre_command execution
if (isset($a_backupHosts[$s_configName]['pre_command'])){
       $cmd_pre_exec = $a_backupHosts[$s_configName]['pre_command'];
       if ($b_debug) {
                writeln('Executing pre-command: ' . $cmd_pre_exec);
      }
                $s_log .= `$cmd_pre_exec`;
}


Con él no tendrás problemas para crearte un completo sistema backup 100% fiable de cualquier máquina o conjunto de ellas. Lo llevo utilizando desde hace unos 2 años y hasta el día de hoy ha funcionado como un reloj.

Aveces he tenido que hechar mano del backup no para recuperar datos perdidos sino para recuperar archivos sobreescritos; punto a favor y a tener en cuenta durante el plan de implementación del Backup.

El sistema envía un email al finalizar el backup si así lo quieres y puedes ejecutar un comando de consola tanto si la copia ha sido existosa como no.
Aprovechando esta "interfaz" del sistema con el exterior y con un poco de trabajo extra puedes ampliar la funcionalidad a tu gusto y tus necesidades.

La configuración de cada máquina que se quiere respaldar se lleva a cabo mediante un sencillo array asociativo como este:

'my_host' => array(
        'enabled'       => false,
        'ip'            => 'my_host.example.com',
        'ssh_user'      => 'backup',
'pre_command'   => '/usr/bin/ssh root@ipadress "/var/www/backup_mysql.sh"',       
'directories'   => '/etc /var/lib/mysql /home',

        'excludes'      => '',
        'limits'        => array('hourly' => 24), // because this is backed up every hour
    ),


Totalmente recomendable.

Y si se quiere algo más profesional vale la pena hechar un ojo a http://backuppc.sourceforge.net/