Bagaimana GitLab Membantu Mencadangkan Penyimpanan NextCloud Besar

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. , .





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