Bonjour, Habr!
Aujourd'hui, je souhaite partager notre expérience dans l'automatisation des sauvegardes Big Data des stockages Nextcloud dans différentes configurations. Je travaille en tant que station-service à Molniya AK, où nous sommes engagés dans la gestion de la configuration des systèmes informatiques, Nextcloud est utilisé pour le stockage des données. Y compris, avec une structure distribuée, avec redondance.
Les problèmes posés par les particularités des installations sont qu'il y a beaucoup de données. La gestion des versions fournie par Nextcloud, la redondance, les raisons subjectives, etc. créent de nombreux doublons.
Contexte
Lors de l'administration de Nextcloud, il existe un problème aigu d'organisation d'une sauvegarde efficace qui doit être cryptée, car les données sont précieuses.
Nous offrons des options pour stocker une sauvegarde sur nos propres ou sur les machines d'un client distinct de Nextcloud, ce qui nécessite une approche automatisée flexible de l'administration.
Les clients sont nombreux, tous avec des configurations différentes, et tous sur leurs sites et avec leurs propres caractéristiques. Ici, la méthodologie standard lorsque l'ensemble du site vous appartient et que les sauvegardes sont effectuées à partir de la couronne s'adapte mal.
Tout d'abord, regardons les données d'entrée. Nous avons besoin:
- . 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.