Configuración de copia de seguridad de Rsync en CentOS / Debian / Ubuntu

Hay muchas maneras de organizar copias de seguridad en servidores CentOS / Debian / Ubuntu – utilidades gratuitas, scripts escritos por ellos mismos usando tar, sistema de copia de seguridad bacula y mucho más. Todo esto de una forma u otra lo usé o uso en mi trabajo. Hoy quiero compartir con ustedes mi método para organizar una forma simple, conveniente y rápida de configurar la copia de seguridad incremental utilizando la popular utilidad rsync en servidores que ejecutan CentOS / Debian / Ubuntu. El método funciona de la misma manera en estos sistemas, con ligeras diferencias solo en la instalación de rsync en sí, que mencionaré por separado para cada sistema.

Si desea aprender a construir y mantener sistemas altamente disponibles y confiables, le recomiendo que se familiarice con el curso en línea «Prácticas y herramientas de DevOps» en OTUS. El curso no es para principiantes, para la admisión debe aprobar una prueba de ingreso.

 

Instalación de rsync en CentOS 8

La mayoría de las veces, rsync ya está presente en la versión base de centos 8, pero lo más probable es que no se ejecute como un servicio. Así que instale ambos:

# dnf install rsync rsync-daemon

Si aún no tiene un sistema configurado, use mis artículos sobre la instalación y configuración de centos 8. Ejecute rsyncd y agréguelo al inicio.

# systemctl enable --now rsyncd
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.

Compruebe el inicio:

# systemctl list-unit-files --type service | grep rsyncd
rsyncd.service enabled

Compruebe si el servicio está escuchando en el puerto de red.

# netstat -tulpn | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      40814/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      40814/rsync         

Está bien, puedes empezar a configurar rsync. Si no necesita ipv6, puede deshabilitarlo.

Instalación de rsync en CentOS 7

Poner rsync:

# yum install rsync

Agregar al inicio:

# systemctl enable rsyncd

ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'

Compruebe el inicio:

# systemctl list-unit-files --type service | grep rsyncd

rsyncd.service enabled

Ejecutar rsync:

# systemctl start rsyncd

Comprueba cómo empezó:

# netstat -tulpn | grep rsync

tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2782/rsync

Está bien, puedes empezar a configurar rsync.

Instalación de rsync en Debian/Ubuntu

Instalar rsync:

# apt install rsync

Edite la configuración:

# mcedit /etc/default/rsync

Busque la línea RSYNC_ENABLE=falsey cámbiela atrue:

RSYNC_ENABLE=true

Cree un archivo de configuración vacío / etc / rsyncd.conf, es necesario para iniciar el servicio. Más adelante lo llenaremos de ajustes.

# touch /etc/rsyncd.conf

Ejecutar rsync:

# systemctl enable --now rsync
Synchronizing state of rsync.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable rsync

Veamos qué funciona:

# netstat -tulnp | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2232/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      2232/rsync          

Está bien, puedes empezar a configurar rsync.

Configurar rsync

Ahora procedamos a la configuración. La lógica de nuestras copias de seguridad será la siguiente. En el primer lanzamiento, hacemos una copia de seguridad completa de la información que nos interesa en la carpetaactual. Luego, una vez al día, verificamos el archivo existente con la fuente y lo hacemos relevante nuevamente, sobrescribiendo todos los archivos modificados, pero no los eliminamos, sino que los colocamos en la carpeta deincrementos, donde todos los días se crea una carpeta con el nombre en forma de fecha en la que se agregan todos los archivos modificados para el día actual. Así, siempre tendremos un archivo completo, relevante en el momento de la última sincronización, además de un conjunto de carpetas para cada día con los archivos que cambiaron ese día. Cuántos días almacenar, puede elegir según sea necesario.

Resulta que tenemos esta imagen:

rsync

En este caso, la conexión y el funcionamiento de rsync tendrán lugar en supuerto tcp 873 separado. No olvides configurar iptablesy abrir este puerto. Comencemos. En primer lugar, configuramos rsync en los servidores de origen de información de los que tomaremos datos para copia de seguridad.

Cree un archivo de configuración rsync:

# mcedit /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = true
munge symlinks = yes


[data]
path = /data
uid = root
read only = yes
list = yes
comment = Data backup Dir
auth users = backup
secrets file = /etc/rsyncd.scrt

Cree un archivo con las credenciales para la conexión:

# mcedit /etc/rsyncd.scrt
backup:12345

donde copia de seguridad es el nombre de usuario, 12345 es la contraseña.
Hacer que los permisos de lectura sean soloroot, de lo contrario rsync no se iniciará:

# chmod 0600 /etc/rsyncd.scrt

Después de la configuración, reinicie rsync. En Centos:

# systemctl restart rsyncd

En Debian/Ubuntu:

# systemctl restart rsync

Ahora vaya al servidor receptor, que almacenará copias de seguridad de los servidores de origen. Allí creamos un script de copia de seguridad incremental usando rsync:

# mcedit /root/bin/backup-server1.sh
#!/bin/bash
date

syst_dir=/backup/

srv_name=server1

srv_ip=10.10.1.55

srv_user=backup

srv_dir=data
echo "Start backup ${srv_name}"

mkdir -p ${syst_dir}${srv_name}/increment/

/usr/bin/rsync -avz --progress --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/

/usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
date
echo "Finish backup ${srv_name}"

Haga que el script sea ejecutable:

# chmod 0744 /root/bin/backup-server1.sh

Cree un archivo con una contraseña para la autorización en el servidor de origen:

# mcedit /etc/rsyncd.scrt
12345

Hacer permisos de lectura sólo root, de lo contrario rsync dará un error:ERROR: el archivo de contraseña no debe ser accesible a otros Solucione
esto:

# chmod 0600 /etc/rsyncd.scrt

Eso es todo, ahora puede ejecutar el script y esperar a que se ejecute. Si recibe un error en el cliente:

rsync: opendir "/." (in data) failed: Permission denied (13)

y este en el servidor:

SELinux is preventing rsync from getattr access on the file

Comprueba la configuración de SELinux. Bloquea el acceso a los archivos. Debe deshabilitar selinux o configurarlo. En este caso, la configuración es simple:

# setsebool -P rsync_full_access on

Queda por agregar el script a cron:

# mcedit /etc/crontab
30 23 * * * root /root/bin/backup-server1.sh

Por lo general, creo varios scripts para cada servidor por separado. Luego combino su lanzamiento en un script común y lo agrego a cron. Y luego, según sea necesario, lo edito, agrego o elimino los servidores.

Copiar rsync a través de ssh

Rsync puede funcionar a través de ssh. Esto elimina la necesidad de configurar el servicio y la autorización por separado, pero usará cuentas del sistema. Tengo la suposición de que el rendimiento al conectarse a través de ssh será menor, pero no he visto confirmación de esto en ninguna parte.

Para copiar archivos usando rsync sobre ssh, no es necesario iniciar el servicio, configurar la configuración, crear un archivo con autorización. Simplemente puede ejecutar un comando de transferencia de archivos como este.

# /usr/bin/rsync -avz --progress --delete root@10.1.6.221:/data/mysql_dump /backup
Tenga cuidado al usar el modificador –delete. No confunda la fuente desde la que descarga los archivos con el receptor donde copia. Si los mezcla y especifica una carpeta vacía como origen, y como receptor con los archivos, los archivos se eliminarán instantáneamente y sin previo aviso.

Si está utilizando una clave pública o un puerto ssh no estándar para conectarse, puede especificar estos parámetros de la siguiente manera:

# /usr/bin/rsync -avz --progress --delete -e "ssh -p 1234 -i /root/.ssh/id_rsa.pub" root@10.1.6.221:/data/mysql_dump /backup

Configurar excepciones

Puede configurar archivos o directorios para que se excluyan al copiar mediante rsync. Esto se hace usando el modificador –exclude o –exclude-from. El primero le permite especificar una excepción directamente en el comando de ejecución. El segundo le permite descargar una lista de excepciones de un archivo. Un ejemplo de la primera opción:

# /usr/bin/rsync -avz --progress --delete --exclude='*.jpeg' root@10.1.6.221:/var/www/html /backup

Copiará el directorio con el sitio, excluyendo de él todas las imágenes con la extensión .jpeg. Puede agregar tantas excepciones como desee en un solo equipo. Pero es más conveniente ponerlos en un archivo separado. Algo así.

# /usr/bin/rsync -avz --progress --delete --exclude-from=exclude.lst root@10.1.6.221:/var/www/html /backup

Contenido del archivoexclude.lst.

*/bitrix/managed_cache/MYSQL/*
*/bitrix/backup/*
*/bitrix/html_pages/site.ru/*
*/upload/resize_cache/*
*/bitrix/cache/*
*/log.txt
*/rating/logs/my_file.log

Este es un ejemplo de excepciones para un sitio bitrix. Todos estos comandos y excepciones se pueden combinar y usar en scripts usando el ejemplo de lo que di al principio.

Rotación de registros rsync

Anteriormente especificamos el registro en el archivo /var/log/rsyncd.log en la configuración del servicio rsyncd. Es necesario ajustar la rotación de este registro para que no crezca indefinidamente. En servidores de archivos grandes, crecerá muy rápidamente a cientos de megabytes o más.

Para ello, cree un archivo con la configuración de rotación en la carpeta /etc/logrotate.d:

# mcedit /etc/logrotate.d/rsyncd

/var/log/rsyncd.log {
size=500k
compress
rotate 4
missingok
notifempty
}

Con esta configuración, la rotación se producirá cada vez que el archivo de registro supere el tamaño de 500 kb. Se almacenarán 4 versiones del archivo de registro. Puede cambiar esta configuración usted mismo a su discreción.

Cuando utilice la rotación de tamaño de archivo, no olvide verificar que funcione correctamente para usted. Las diferentes distribuciones tienen matices en este sentido. Los discuto por separado en el artículo -rotación de archivos por tamaño en logrotate.

Ejemplo de copia de seguridad de Windows Server mediante rsync

Otro ejemplo de mi práctica. Digamos que tenemos un servidor Windows con cierta información de la que también queremos hacer una copia de seguridad. No hay problema, se hace de manera bastante simple.

Cree una bola de red con información sobre el servidor de Windows. Cree un usuario y agréguelo para acceder a esta carpeta. Usaremos este usuario para conectar bolas de Windows al servidor Linux.

Monta la bola con la información que respaldaremos:

# mount -t cifs //192.168.0.16/docs /mnt/docs -o user=backup,password=12345,iocharset=utf8,codepage=cp866

192.168.0.16 – la dirección de la bola de copia de seguridad de Windows y 12345 – el usuario y la contraseña de la máquina Windows
con acceso a la bola de documentos.

Eso es todo, ahora la carpeta /mnt/docsse puede usar como receptor en nuestro script de copia de seguridad rsync. Si la carpeta se monta directamente en el servidor con copias de seguridad, debe configurar la configuración rsyncd en ella en el ejemplo de servidores de origen, ejecutar rsyncd en ella y especificar 127.0.0.1 como la dirección IP del servidor en el script.

En tales casos, creo varios scripts: para montar bolas, hacer copias de seguridad y desmontar, combinarlos en uno y ejecutarlos secuencialmente. Como resultado, resulta que conectamos el disco, hacemos una copia de seguridad y lo desconectamos.

También es posible instalar rsync en Windows Server usando cygwin. Dicha funcionalidad está integrada en el servidor de aplicaciones –cwRsync listo para usar. Su configuración no es fundamentalmente diferente de la configuración de la versión linux. Solo necesita vigilar de cerca las rutas a los directorios, hay ejemplos en las configuraciones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *