Halo, Habr!
Hari ini saya ingin berbicara tentang pengalaman kami dalam mengotomatiskan cadangan data besar penyimpanan Nextcloud dalam berbagai konfigurasi. Saya bekerja sebagai stasiun layanan di Molniya AK, di mana kami terlibat dalam manajemen konfigurasi sistem TI, Nextcloud digunakan untuk penyimpanan data. Termasuk, dengan struktur terdistribusi, dengan redundansi.
Masalah yang timbul dari fitur instalasi adalah bahwa ada banyak data. Versi yang disediakan Nextcloud, redundansi, alasan subyektif, dan lainnya menciptakan banyak duplikat.
Latar Belakang
Saat mengelola Nextcloud, ada masalah akut dalam mengatur cadangan yang efektif, yang harus dienkripsi, karena datanya berharga.
Kami menawarkan opsi untuk menyimpan cadangan sendiri atau di mesin pelanggan yang terpisah dari Nextcloud, yang memerlukan pendekatan otomatis yang fleksibel untuk administrasi.
Ada banyak klien, semuanya dengan konfigurasi yang berbeda, dan semuanya di situs mereka dan dengan karakteristik mereka sendiri. Ini adalah teknik standar ketika seluruh situs milik Anda, dan cadangan dibuat dari mahkota, yang tidak bagus.
Pertama, mari kita lihat input data. Kita butuh:
- . 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.