Olá Habr!
Hoje, quero compartilhar nossa experiência na automação de backups de big data dos armazenamentos Nextcloud em diferentes configurações. Eu trabalho como uma estação de serviço em Molniya AK, onde estamos envolvidos no gerenciamento de configuração de sistemas de TI, o Nextcloud é usado para armazenamento de dados. Incluindo, com uma estrutura distribuída, com redundância.
Os problemas decorrentes dos recursos das instalações são que existem muitos dados. O versionamento fornecido pelo Nextcloud, redundância, razões subjetivas e outros criam muitas duplicatas.
fundo
Ao administrar o Nextcloud, existe um problema agudo de organização de um backup eficaz, que deve ser criptografado, pois os dados são valiosos.
Oferecemos opções para armazenar um backup por conta própria ou nas máquinas de um cliente, separadas do Nextcloud, o que requer uma abordagem automatizada e flexível da administração.
Existem muitos clientes, todos com configurações diferentes e todos em seus sites e com suas próprias características. Aqui está a técnica padrão quando o site inteiro pertence a você, e os backups são feitos a partir da coroa, mas não se encaixam bem.
Primeiro, vamos olhar para os dados de entrada. Nós precisamos:
- . 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.