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 , . , , — 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
, (, .):
- . 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.