كيف يساعد GitLab في عمل نسخة احتياطية من تخزين NextCloud الكبير

مرحبا يا هبر!



اليوم أريد أن أتحدث عن تجربتنا في أتمتة النسخ الاحتياطي للبيانات الكبيرة لتخزين Nextcloud في تكوينات مختلفة. أعمل كمحطة خدمة في Lightning AK ، حيث نشارك في إدارة تكوين أنظمة تكنولوجيا المعلومات ، يتم استخدام Nextcloud لتخزين البيانات. بما في ذلك ، مع بنية موزعة ، مع التكرار.



المشاكل الناشئة عن خصائص التركيبات هي أن هناك الكثير من البيانات. الإصدار الذي يوفره Nextcloud ، والتكرار ، والأسباب الذاتية ، والمزيد يخلق العديد من التكرارات.



خلفية



عند إدارة Nextcloud ، هناك مشكلة حادة في تنظيم نسخة احتياطية فعالة ، والتي يجب تشفيرها ، لأن البيانات ذات قيمة.



نحن نقدم خيارات لتخزين نسخة احتياطية بمفردنا أو على أجهزة العميل منفصلة عن Nextcloud ، الأمر الذي يتطلب نهجًا آليًا مرنًا للإدارة.



هناك العديد من العملاء ، كلهم ​​بتكوينات مختلفة ، وكلهم على مواقعهم وخصائصهم الخاصة. هنا المنهجية القياسية عندما ينتمي الموقع بأكمله إليك ، ويتم عمل نسخ احتياطية من التاج بشكل سيئ.



أولاً ، دعنا نلقي نظرة على بيانات الإدخال. نحن نحتاج:



  • قابلية التوسع من حيث عقدة واحدة أو عدة. بالنسبة للمنشآت الكبيرة ، نستخدم 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