Copia de seguridad incremental de VDS con un sitio en 1C-Bitrix en Yandex.Cloud

Tuve que hacer una copia de seguridad del sitio en 1C-Bitrix: Administración del sitio 2 veces al día (archivos y bases de datos mysql) y almacenar el historial de cambios durante 90 días.



El sitio está ubicado en un VDS que ejecuta CentOS 7 con 1C-Bitrix: Web Environment instalado. Además, haga una copia de seguridad de la configuración del sistema operativo.



Requisitos:



  • Frecuencia: 2 veces al día;
  • Guarde copias de los últimos 90 días;
  • La capacidad de obtener archivos individuales para una fecha específica, si es necesario;
  • La copia de seguridad debe almacenarse en un centro de datos diferente a VDS;
  • La capacidad de acceder a la copia de seguridad desde cualquier lugar (otro servidor, computadora local, etc.).


Un punto importante fue la capacidad de crear copias de seguridad rápidamente con un consumo mínimo de espacio adicional y recursos del sistema.



No estamos hablando de una instantánea para restaurar rápidamente todo el sistema, sino de archivos y la base de datos y el historial de cambios.



Datos iniciales:



  • VDS en virtualización XEN;
  • SO CentOS 7;
  • 1C-Bitrix: entorno web;
  • Sitio basado en "1C-Bitrix: Administración del sitio", versión estándar;
  • El tamaño del archivo es de 50 GB y aumentará;
  • El tamaño de la base de datos es de 3 GB y crecerá.




Copia de seguridad estándar integrada en 1C-Bitrix: excluida de inmediato. Solo es adecuado para sitios pequeños, porque:



  • , , , 50 .
  • PHP, — , .
  • 90 .


La solución ofrecida por el hoster es un disco de respaldo ubicado en el mismo centro de datos que VDS, pero en un servidor diferente. Puede trabajar con el disco a través de FTP y usar sus propios scripts, o si ISPManager está instalado en el VDS, a través de su módulo de respaldo. Esta opción no es adecuada debido al uso del mismo centro de datos.



De todo lo anterior, la mejor opción para mí es una copia de seguridad incremental según mi propio escenario en Yandex.Cloud (Object Storage) o Amazon S3 (Amazon Simple Storage Service).



Esto requiere:



  • acceso root a VDS;
  • duplicidad de utilidad instalada;
  • cuenta en Yandex.Cloud.


La copia de seguridad incremental es un método en el que solo se archivan los datos modificados desde la última copia de seguridad.



duplicity es una utilidad de respaldo que utiliza algoritmos rsync y puede funcionar con Amazon S3.




Yandex.Cloud frente a Amazon S3



No hay diferencia entre Yandex.Cloud y Amazon S3 en este caso. Yandex admite la parte principal de la API de Amazon S3, por lo que puede trabajar con ella utilizando las soluciones disponibles para trabajar con S3. En mi caso, esta es la utilidad de duplicidad.



La principal ventaja de Yandex puede ser el pago en rublos, si hay muchos datos, no habrá ningún vínculo con el tipo de cambio. En términos de velocidad, los centros de datos europeos de Amazon funcionan de manera acorde con los rusos en Yandex, por ejemplo, puede usar Frankfurt. Anteriormente usé Amazon S3 para tareas similares, ahora decidí probar Yandex.



Configuración de Yandex.Cloud



1. Necesita crear una cuenta de facturación en Yandex.Cloud. Para hacer esto, debe iniciar sesión en Yandex.Cloud a través de su cuenta de Yandex o crear una nueva.



2. Cree "Nube".





3. En la "Nube", cree un "Catálogo".





4. Para el "Catálogo", cree una "Cuenta de servicio".





5. Cree claves para la "Cuenta de servicio".





6. Guarde las llaves, las necesitará en el futuro.





7. Para el "Catálogo", cree un "Bucket", contendrá archivos.





8. Recomiendo establecer un límite y elegir "Almacenamiento en frío".





Configurar una copia de seguridad programada en el servidor



Esta guía asume habilidades administrativas básicas.



1. Instale la utilidad de duplicidad en VDS



yum install duplicity




2. Cree una carpeta para los volcados de mysql, en mi caso es / backup_db en la raíz del VDS



3. Cree una carpeta para los scripts bash / backup_scripts y cree el primer script que respaldará /backup_scripts/backup.sh



Contenido del script:



#!`which bash`


# /backup_scripts/backup.sh

#            ,  ,   email     (    )
if [ -f /home/backup_check.mark ];
then

DATE_TIME=`date +"%d.%m.%Y %T"`;

/usr/sbin/sendmail -t <<EOF
From:backup@$HOSTNAME
To:< EMAIL>
Subject:Error backup to YANDEX.CLOUD
Content-Type:text/plain; charset=utf-8
Error backup to YANDEX.CLOUD

$DATE_TIME
EOF

else

#      
#        backup

echo '' > /home/backup_check.mark;


#         backup

/bin/rm -f /backup_db/*


#    mysql ,       /root/.my.cnf

DATETIME=`date +%Y-%m-%d_%H-%M-%S`;

`which mysqldump` --quote-names --all-databases | `which gzip` > /backup_db/DB_$DATETIME.sql.gz


#      .

export PASSPHRASE=<    >
export AWS_ACCESS_KEY_ID=<    >
export AWS_SECRET_ACCESS_KEY=<    >


#  duplicity      .
#      backup           
# -- exclude  ,   ,       
# --include        :
# - /backup_db
# - /home
# - /etc
# s3://storage.yandexcloud.net/backup , backup     

#      :
#   "--exclude='**'"  "/" ,      --include  --exclude   .          "/",    "--exclude='**'"
# --full-if-older-than='1M' -     
# --volsize='512' -         
# --log-file='/var/log/duplicity.log' -    

`which duplicity` \
    --s3-use-ia --s3-european-buckets \
    --s3-use-new-style \
    --s3-use-multiprocessing \
    --s3-multipart-chunk-size='128' \
    --volsize='512' \
    --no-print-statistics \
    --verbosity=0 \
    --full-if-older-than='1M' \
    --log-file='/var/log/duplicity.log' \
    --exclude='**/www/bitrix/backup/**' \
    --exclude='**/www/bitrix/cache/**' \
    --exclude='**/www/bitrix/cache_image/**' \
    --exclude='**/www/bitrix/managed_cache/**' \
    --exclude='**/www/bitrix/managed_flags/**' \
    --exclude='**/www/bitrix/stack_cache/**' \
    --exclude='**/www/bitrix/html_pages/*/**' \
    --exclude='**/www/bitrix/tmp/**' \
    --exclude='**/www/upload/tmp/**' \
    --exclude='**/www/upload/resize_cache/**' \
    --include='/backup_db' \
    --include='/home' \
    --include='/etc' \
    --exclude='**' \
    / \
    s3://storage.yandexcloud.net/backup



#     .
#   3   backup      backup.
# ..    backup  3 , ..        backup

`which duplicity` remove-all-but-n-full 3 --s3-use-ia --s3-european-buckets --s3-use-new-style --verbosity=0 --force s3://storage.yandexcloud.net/backup



unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY

#     backup

/bin/rm -f /home/backup_check.mark;

fi


4. Ejecute el script por primera vez y verifique el resultado, los archivos deberían aparecer en el "Bucket".



`which bash` /backup_scripts/backup.sh








5. Agregue un script a cron para que el usuario root lo ejecute 2 veces al día, o con la frecuencia que necesite.



10 4,16 * * * `which bash` /backup_scripts/backup.sh




Recuperación de datos de Yandex.Cloud



1. Cree una carpeta para recuperación / backup_restore



2. Haga un script bash para recuperación /backup_scripts/restore.sh



Le doy el ejemplo más popular de restauración de un archivo específico:



#!`which bash`

export PASSPHRASE=<      >
export AWS_ACCESS_KEY_ID=<    >
export AWS_SECRET_ACCESS_KEY=<    >

# 3 ,  

#   backup
#`which duplicity` collection-status s3://storage.yandexcloud.net/backup

#  index.php   
#`which duplicity` --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php

#  index.php    3  
#`which duplicity` --time='3D' --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php

unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY




3. Ejecute el script y espere el resultado.



`which bash` /backup_scripts/backup.sh




En la carpeta / backup_restore /, encontrará el archivo index.php del que se hizo una copia de seguridad anteriormente.



Puede realizar ajustes más detallados para satisfacer sus necesidades.



Desventaja de la duplicidad La duplicidad



tiene una desventaja: no hay forma de establecer un límite de uso de canal. Con un canal normal, esto no crea un problema, pero cuando utilizo un canal protegido contra DDoS con una clasificación de tasa por día, me gustaría poder establecer un límite de 1-2 megabits.



Como conclusión



La reserva en Yandex.Cloud o Amazon S3 proporciona una copia independiente del sitio y la configuración del sistema operativo, a la que se puede acceder desde cualquier otro servidor o computadora local. Al mismo tiempo, esta copia no es visible ni en el panel de control del hosting ni en el panel de administración de Bitrix, lo que brinda seguridad adicional.



Con el resultado más triste, puede crear un nuevo servidor e implementar el sitio para cualquier fecha. Aunque la funcionalidad más solicitada será la posibilidad de hacer referencia a un archivo para una fecha específica.



Puede utilizar esta técnica con cualquier VDS o servidores y sitios dedicados en cualquier motor, no solo 1C-Bitrix. El sistema operativo también puede ser distinto de CentOS, como Ubuntu o Debian.



All Articles