Cómo GitLab ayuda a hacer una copia de seguridad del almacenamiento grande de NextCloud

Hola Habr!



Hoy quiero hablar sobre nuestra experiencia en la automatización de la copia de seguridad de los datos grandes de almacenamiento de Nextcloud en diferentes configuraciones. Trabajo como estación de servicio en Molniya AK, donde nos dedicamos a la gestión de la configuración de los sistemas de TI, Nextcloud se utiliza para el almacenamiento de datos. Incluyendo, con una estructura distribuida, con redundancia.



Los problemas que surgen de las peculiaridades de las instalaciones son que hay muchos datos. El control de versiones que proporciona Nextcloud, redundancia, razones subjetivas y más crea muchos duplicados.



Antecedentes



Cuando se administra Nextcloud, existe un grave problema de organizar una copia de seguridad efectiva que se debe cifrar, ya que los datos son valiosos.



Ofrecemos opciones para almacenar copias de seguridad con nosotros o en el cliente en sus máquinas separadas de Nextcloud, lo que requiere un enfoque flexible y automatizado para la administración.



Hay muchos clientes, todos ellos con diferentes configuraciones, y todos en sus sitios y con sus propias características. Aquí la metodología estándar cuando todo el sitio le pertenece, y las copias de seguridad se realizan desde la corona, se ajusta mal.



Primero, veamos los datos de entrada. Nosotros necesitamos:



  • . minio.
  • .
  • / .
  • .
  • — .
  • : (), — .
  • .




GitLab. .



, , .



opensource, . , . , GitHub Nextcloud, , .





.



tar + gzip — . , .

— . minio . minio – , , -. .



( ) Borg Restic. , .





Borg Restic , . , , — CI/CD – GitLab.



: Nextcloud gitlab-runner. , Borg Restic.



? , , .



GitHub , Nextcloud, . , ( ) .gitlab-ci.yml



API CI/CD, . , 1d.



GitLab , , .



-.



:



  • , .
  • :
  • return code.
  • . , .
  • timeout. .
  • . .
  • .
  • , :
  • . .
  • , , stdout, . CI .
  • .


GitLab, , . bash.



— welcome.





. job CI/CD. , , , . S3.



— AWS ( ). minio . , .



ssh . , S3 ssh .



— S3, .

.



Borg none, . , , , .



. , . .







  • prepare
  • testcheck
  • maincommand
  • forcepostscript . .


Service functions



  • cleanup .
  • checklog .
  • ret exit handler.
  • checktimeout .


Environment



  • VERBOSE=1 (stdout).
  • SAVELOGSONSUCCES=1 .
  • INIT_REPO_IF_NOT_EXIST=1 , . - .
  • TIMEOUT . You can set it as 'm', 'h' or 'd' at the end.


. -:



  • KEEP_DAILY=7
  • KEEP_WEEKLY=4
  • KEEP_MONTHLY=6




  • ERROR_STRING — string for the check in log for error.
  • EXTRACT_ERROR_STRING — expression for show string if error.
  • KILL_TIMEOUT_SIGNAL — signal for killing if timeout.
  • TAIL — how many strings with errors on screen.
  • COLORMSG — color of mesage (default yellow).


, wordpress , , mysql. Nexcloud, . , , , .



Restic vs Borg



Borg Restic , , . , . .



, (, .):



  • . kill -9.
  • .
  • (, ).
  • .
  • S3.
  • .


1,6.

.



Borg S3, fuse , goofys. Restic S3 .



Goofys , , . beta, , , (). , , , .



, — .



.



  • Kill -9 .
  • . Borg .


Backuper
Borg 562Gb
Restic 628Gb


  • CPU

    borg , , goofys. 1,2 .
  • . Restic 0,5, Borg 200. . .
  • .


Backuper
Borg 500
Restic 5


  • S3 Restic . Borg goofys , , umount . S3 , , .
  • , .

    Restic – 3,5 .

    Borg, 100 SSD – 5 . .

    Borg S3 33 . .


Borg — GET/PUT S3. . — . ( ) restic , .



.



borg.





Borg’ — zstd. gzip, . lz4.



MySQL lz4 . , , Nextcloud .



Borg — , , .

-C auto,zstd

zstd

-

560Gb 562Gb . , , 628Gb. 2 , - auto,zstd.





, . , .



goofys --cache "--free:5%:/mnt/cache" -o allow_other --endpoint https://storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com /mnt/goofys
export BORG_PASSCOMMAND="cat /home/borg/.borg-passphrase"
borg list /mnt/goofys/borg1/
borg check --debug -p --verify-data /mnt/goofys/borg1/


(). Nextcloud . , .



.

API GitLab , , .





, , . tar.gz Bacula.




All Articles