Чӣ тавр GitLab ба шумо кӯмак мекунад, ки захираҳои калони NextCloud захира кунед

Эй Ҳабр!

Сегодня я хочу рассказать о нашем опыте автоматизации резервного копирования больших данных хранилищ Nextcloud в разных конфигурациях. Я работаю СТО в «Молния АК», где мы занимаемся конфигурационным управлением IT систем, для хранения данных используется Nextcloud. В том числе, с распределенной структурой, с резервированием.

Мушкилоте, ки аз хусусиятҳои насбҳо бармеоянд, дар он аст, ки миқдори зиёди маълумот вуҷуд дорад. Версияҳое, ки аз ҷониби Nextcloud пешниҳод шудаанд, зиёдатӣ, сабабҳои субъективӣ ва ғайра такрорҳои зиёдеро эҷод мекунанд.

prehistory

Ҳангоми идоракунии Nextcloud, мушкилоти ташкили нусхабардории муассир ба миён меояд, ки он бояд рамзгузорӣ карда шавад, зеро маълумот арзишманд аст.

Мо имконоти нигоҳдории нусхаҳои эҳтиётиро дар ҷои худ ё фармоишгар дар мошинҳои алоҳида аз Nextcloud пешниҳод менамоем, ки муносибати автоматикунонидашудаи фасеҳи идоракуниро талаб мекунад.

Клиентов много, все они с разными конфигурациями, и все на своих площадках и со своими особенностями. Тут стандартная методика когда вся площадка принадлежит тебе, и бэкапы делаются из крона подходит плохо.

Аввалан, биёед маълумоти воридшударо дида бароем. Ба мо лозим аст:

  • Миқёспазирӣ аз рӯи як гиреҳ ё якчанд. Барои насбҳои калон мо minio-ро ҳамчун анбор истифода мебарем.
  • Дар бораи мушкилот бо иҷрои нусхабардорӣ маълумот гиред.
  • Шумо бояд бо мизоҷони худ ва/ё бо мо нусхабардорӣ кунед.
  • Быстро и легко разбираться с проблемами.
  • Клиенты и установки сильно отличаются один от другого — единообразия добиться не получается.
  • Скорость восстановления должна быть минимальна по двум сценариям: полное восстановление (дизастер), одна папка — стерто по ошибке.
  • Функсияи нусхабардорӣ лозим аст.

Чӣ тавр GitLab ба шумо кӯмак мекунад, ки захираҳои калони NextCloud захира кунед

Барои ҳалли мушкилоти идоракунии нусхабардорӣ, мо GitLab-ро насб кардем. Тафсилоти бештар аз ҷониби мубориза.

Албатта, мо аввалин касе нестем, ки чунин масъаларо ҳал мекунем, вале ба назари мо чунин менамояд, ки таҷрибаи амалӣ, бо заҳмат ба даст овардаи мо метавонад ҷолиб бошад ва мо омодаем онро мубодила кунем.

Поскольку в нашей компании принята политика opensource, решение мы искали именно с открытым исходным кодом. В свою очередь мы делимся своими разработками, и выкладываем их. Например, на GitHub есть наш плагин для Nextcloud.

Воситаҳои эҳтиётӣ

Мо ҷустуҷӯи усулҳои ҳалли худро бо интихоби воситаи эҷоди нусхабардорӣ оғоз кардем.

Тарзи муқаррарӣ + gzip хуб кор намекунад - маълумот такрор карда мешавад. Афзоиш аксар вақт тағироти воқеии хеле камро дар бар мегирад ва қисми зиёди маълумот дар дохили як файл такрор мешавад.
Есть еще одна проблема — избыточность распределенного хранилища данных. Мы используем minio и его данные в принципе избыточны. Либо нужно было бэкап делать через сам minio – нагружать его и пользоваться всеми прокладками между файловой системой, и что не менее важно, есть риск забыть про часть бакетов и мета-информации. Либо использовать дедупликацию.

Асбобҳои эҳтиётӣ бо такрорӣ дар манбаи кушода дастрасанд (дар Habré буданд мақолаҳо дар бораи ин мавзӯъ) ва финалистхои мо буданд Багг и Таҳрикомез. Муқоисаи ду барнома дар зер оварда шудааст, аммо ҳоло мо ба шумо мегӯям, ки чӣ тавр мо тамоми нақшаро ташкил кардем.

Идоракунии нусхаҳои эҳтиётӣ

Borg и Restic хороши, но ни тот ни другой продукт не имеет централизованного механизма управления. Для цели управления и контроля мы выбрали инструмент который и так у нас внедрен, без которого мы не мыслим свою работу, в том числе по автоматизации — это известный CI/CD – GitLab.

Идея чунин аст: gitlab-runner дар ҳар як гиреҳ насб шудааст, ки маълумоти Nextcloud-ро нигоҳ медорад. Даванда скриптро дар ҷадвал иҷро мекунад, ки раванди нусхабардориро назорат мекунад ва он Borg ё Restic-ро оғоз мекунад.

Что мы получили? Обратную связь от выполнения, удобный контроль за изменениями, подробности в случае ошибки.

дар ин ҷо ин ҷо дар GitHub мо намунаҳои скриптро барои вазифаҳои гуногун интишор кардем ва мо онро ба нусхаи на танҳо Nextcloud, балки бисёр хидматҳои дигар замима кардем. Он ҷо инчунин як нақшакаш мавҷуд аст, агар шумо намехоҳед онро дастӣ танзим кунед (ва мо намехоҳем) ва .gitlab-ci.yml

Ҳанӯз роҳи тағир додани вақти CI/CD дар Gitlab API вуҷуд надорад, аммо он хурд аст. Онро зиёд кардан лозим аст, мегуянд 1d.

Хушбахтона, GitLab метавонад на танҳо мувофиқи ӯҳдадориҳо, балки танҳо мувофиқи ҷадвал оғоз кунад, маҳз ҳамон чизест, ки ба мо лозим аст.

Акнун дар бораи скрипти бастабандӣ.

Мы поставили такие условия для этого скрипта:

  • Должен запускаться как раннером, так и руками из консоли с одинаковым функционалом.
  • Бояд коркардкунандагони хатогӣ вуҷуд дошта бошанд:
  • рамзи бозгашт.
  • поиск строки в логе. Например, для нас ошибкой может быть сообщение которое программа фатальной не считает.
  • Вақти фарогирии коркард. Мӯҳлати интиқол бояд оқилона бошад.
  • Ба мо журнали хеле муфассал лозим аст. Аммо танҳо дар сурати хато.
  • Так же проводится ряд тестов перед началом.
  • Небольшие плюшки для удобства, которые мы нашли полезными в процессе поддержки:
  • Оғоз ва анҷом дар сислоги мошини маҳаллӣ сабт карда мешаванд. Ин барои пайваст кардани хатогиҳои система ва амалиёти эҳтиётӣ кӯмак мекунад.
  • Як қисми сабти хатогиҳо, агар мавҷуд бошад, ба stdout бароварда мешавад, тамоми гузориш ба файли алоҳида навишта мешавад. Дарҳол ба CI нигоҳ кардан ва баҳо додан ба хатогӣ, агар он ночиз бошад, қулай аст.
  • Усулҳои ислоҳи хатогиҳо.

Гузориши пурра ҳамчун артефакт дар GitLab захира карда мешавад; агар ягон хатогӣ набошад, гузориш тоза карда мешавад. Мо скриптро дар bash менависем.

Мо бо камоли майл ҳама гуна пешниҳодҳо ва шарҳҳоро дар бораи манбаи кушода баррасӣ хоҳем кард - хуш омадед.

Чӣ тавр ба ин кор

Дар гиреҳи эҳтиётӣ даванда бо иҷрокунандаи Bash оғоз мешавад. Мувофиқи нақша, кор CI/CD дар шалғам махсус оғоз карда мешавад. Даванда барои чунин вазифаҳо скрипти универсалии парпечкунандаро оғоз мекунад, он дурустии анбори захиравӣ, нуқтаҳои васлкунӣ ва ҳама чизеро, ки мо мехоҳем, тафтиш мекунад, сипас нусхаи кӯҳнаро нусхабардорӣ мекунад ва тоза мекунад. Худи нусхаи тайёр ба S3 фиристода мешавад.

Мо мувофиқи ин схема кор мекунем - он провайдери берунаи AWS ё муодили русӣ аст (он тезтар аст ва маълумот аз Федератсияи Русия берун намеояд). Ё мо барои ин мақсадҳо барои муштарӣ дар сайти ӯ як кластери алоҳида насб мекунем. Мо одатан ин корро бо сабабҳои амниятӣ иҷро мекунем, вақте ки муштарӣ намехоҳад, ки маълумот аз схемаи худ тамоман тарк шавад.

Мо хусусияти фиристодани нусхаи эҳтиётиро тавассути ssh истифода набурдем. Ин амниятро илова намекунад ва имкониятҳои шабакаи провайдери S3 нисбат ба як мошини ssh мо хеле баландтаранд.

Барои муҳофизат кардани мошини маҳаллии худ аз ҳакер, азбаски ӯ метавонад маълумотро дар S3 тоза кунад, шумо бояд версияро фаъол созед.
Нусхаи эҳтиётӣ ҳамеша нусхаро рамзгузорӣ мекунад.

Борг дорои ҳолати рамзнашуда мебошад none, аммо мо сахт тавсия намедиҳем, ки онро фаъол созед. Дар ин реҷа на танҳо рамзгузорӣ вуҷуд надорад, балки маблағи назоратии он чи навишта мешавад, ҳисоб карда намешавад, яъне якпорчагӣ танҳо ба таври ғайримустақим бо истифода аз индексҳо санҷида мешавад.

Нақшасози алоҳида нусхаҳои эҳтиётиро барои якпорчагии индексҳо ва мундариҷа тафтиш мекунад. Санҷиш суст ва тӯлонӣ аст, бинобар ин мо онро дар як моҳ як маротиба ҷудо мекунем. Он метавонад якчанд рӯзро талаб кунад.

Readme ба забони русӣ

Функсияҳои асосӣ

  • prepare тайёрй
  • testcheck санҷиши омодагӣ
  • maincommand дастаи асосӣ
  • forcepostscript функсияе, ки дар охир ё бо хатогӣ иҷро мешавад. Мо онро барои ҷудо кардани қисм истифода мебарем.

Функсияҳои хидматрасонӣ

  • cleanup Мо хатогиҳоро сабт мекунем ё файли сабтро нест мекунем.
  • checklog гузоришро барои пайдоиши сатр бо хато таҳлил кунед.
  • ret коркардкунандаи баромад.
  • checktimeout барои танаффус тафтиш кунед.

муҳит

  • 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 — сатр барои сабти сабти хато.
  • EXTRACT_ERROR_STRING — ифода барои нишон додани сатр агар хато бошад.
  • KILL_TIMEOUT_SIGNAL — сигнал барои куштан дар сурати тамом шудани вақт.
  • TAIL — чанд сатр бо хатогихо дар экран.
  • COLORMSG — ранги паём (зард).

Он скрипт, ки онро wordpress меноманд, номи шартӣ дорад, ҳиллаи он дар он аст, ки он инчунин пойгоҳи додаҳои mysql-ро нусхабардорӣ мекунад. Ин маънои онро дорад, ки он метавонад барои насби як гиреҳи Nexcloud истифода шавад, ки дар он шумо инчунин метавонед пойгоҳи додаҳоро нусхабардорӣ кунед. Бароҳатӣ на танҳо дар он аст, ки ҳама чиз дар як ҷост, балки мундариҷаи базаи маълумот ба мундариҷаи файлҳо наздик аст, зеро фарқияти вақт ҳадди аққал аст.

Рестик против Борг

Байни Борг ва Рестик низ муқоисаҳо мавҷуданд ин ҷо дар Habré, ва мо вазифаи сохтани як чизи дигарро надоштем, балки худи мо. Барои мо муҳим буд, ки он ба маълумоти мо бо мушаххасоти мо чӣ гуна назар хоҳад кард. Мо онҳоро меорем.

Меъёрҳои интихоби мо, ба ғайр аз меъёрҳои дар боло зикршуда (депликатсия, барқарорсозии зуд ва ғайра):

  • Муқовимат ба кори нотамом. Санҷед, ки куштор -9.
  • Андоза дар диск.
  • Талабот ба захираҳо (CPU, хотира).
  • Андозаи блокҳои захирашуда.
  • Кор бо S3.
  • Санҷиши беайбият.

Для тестирования мы взяли одного клиента с реальными данными и общим размером 1,6Тб.
Шароит.

Borg намедонад, ки чӣ тавр ба кор бевосита бо S3, ва мо бударо диск ҳамчун меёфт, тавассути гӯё. Restic онро ба худи S3 фиристод.

Goofys работает очень быстро и хорошо, и к нему есть модули кэши диск, ки суръати корро боз хам метезонад. Он дар марҳилаи бета қарор дорад ва, ошкоро, мо ҳангоми санҷишҳо бо талафоти маълумот дучор омадем (дигар). Аммо бароҳатӣ дар он аст, ки худи тартиби нусхабардорӣ хониши зиёдро талаб намекунад, балки асосан навиштан, аз ин рӯ мо кэшро танҳо ҳангоми санҷиши якпорчагӣ истифода мебарем.

Барои кам кардани таъсири шабака, мо провайдери маҳаллӣ - Yandex Cloud -ро истифода бурдем.

Натиҷаҳои муқоисаи санҷиш.

  • Kill -9 бо бозсозии минбаъда ҳарду муваффақ шуданд.
  • Размер на диске. Borg умеет сжимать поэтому результаты ожидаемые.

Захиракунанда
андоза

Багг
562Gb

Таҳрикомез
628Gb

  • Аз ҷониби CPU
    Худи Борг бо фишурдани пешфарз кам истеъмол мекунад, аммо он бояд дар якҷоягӣ бо раванди goofys арзёбӣ карда шавад. Дар маҷмӯъ, онҳо муқоисашавандаанд ва тақрибан 1,2 ядроро дар як мошини виртуалии санҷишӣ истифода мебаранд.
  • Хотира. Restic тақрибан 0,5 ГБ, Борг тақрибан 200 МБ аст. Аммо ин ҳама дар муқоиса бо кэши файли система ночиз аст. Аз ин рӯ, тавсия дода мешавад, ки хотираи бештар ҷудо карда шавад.
  • Тафовут дар андозаи blob аҷиб буд.

Захиракунанда
андоза

Багг
тақрибан 500 МБ

Таҳрикомез
тақрибан 5 МБ

  • Таҷриба бо Restic's S3 аъло аст. Кор бо Борг тавассути goofys ягон саволе ба миён намеорад, аммо қайд карда шуд, ки барои пурра барқарор кардани кэш пас аз анҷоми нусхабардорӣ umount кор кардан тавсия дода мешавад. Хусусияти S3 дар он аст, ки порчаҳои зери обкашӣ ҳеҷ гоҳ ба сатил фиристода намешаванд, ки ин маънои онро дорад, ки маълумоти нопурра пуршуда ба зарари калон оварда мерасонад.
  • Проверка целостности работает хорошо в обоих случаях, но скорость отличается значительно.
    Рестик Соатҳои 3,5.
    Borg, бо кэши файли 100 ГБ SSD - Соатҳои 5.Тақрибан ҳамин суръати натиҷа, агар маълумот дар диски маҳаллӣ бошад.
    Борг бевосита аз S3 бе кэш мехонад Соатҳои 33. Чудовищно долго.

Хулоса ин аст, ки Борг метавонад фишурда кунад ва дорои блокҳои калонтар бошад - ин нигоҳдорӣ ва GET/PUT-ро дар S3 арзонтар мекунад. Аммо ин ба арзиши санҷиши мураккабтар ва сусттар меояд. Дар мавриди суръати барқароршавӣ бошад, мо ҳеҷ тафовуте надидаем. Restic нусхаҳои эҳтиётии минбаъдаро (пас аз аввал) каме зиёдтар мегирад, аммо на ба таври назаррас.

Ниҳоят, вале на камтар аз он дар интихоб андозаи ҷомеа буд.

Ва мо боргро интихоб кардем.

Якчанд сухан дар бораи компрессия

Борг дар арсенали худ як алгоритми нави фишурдасозиро дорад - zstd. Сифати фишурдакунӣ аз gzip бадтар нест, аммо хеле тезтар. Ва аз рӯи суръат бо lz4 пешфарз муқоисашаванда аст.

Масалан, партови пойгоҳи додаҳои MySQL ду маротиба беҳтар аз lz4 бо як суръат фишурда мешавад. Аммо, таҷриба бо маълумоти воқеӣ нишон медиҳад, ки дар таносуби фишурдани гиреҳи Nextcloud фарқияти хеле кам вуҷуд дорад.

Борг режими фишурдани бонуси нағз дорад - агар файл энтропияи баланд дошта бошад, пас фишурдасозӣ умуман татбиқ карда намешавад, ки суръатро зиёд мекунад. Ҳангоми эҷод тавассути интихоб фаъол карда мешавад
-C auto,zstd
барои алгоритми zstd
Ҳамин тавр, бо ин хосият, дар муқоиса бо фишурдани пешфарз, мо ба даст овардем
мутаносибан 560 Гб ва 562 Гб. Маълумот аз мисоли дар боло овардашуда, ба шумо хотиррасон мекунам, ки натиҷа бе фишурда 628 Гб аст. Натиҷаи фарқияти 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 бор мекунанд ва на ҳама антивирус доранд. Гузаронидани санҷишҳо дар вақти рехтан вақти зиёдро мегирад ва ба тиҷорат халал мерасонад.

Миқёспазирӣ тавассути иҷро кардани давандагон дар гиреҳҳои гуногун бо барчаспҳои гуногун ба даст оварда мешавад.
Мониторинги мо ҳолати эҳтиётиро тавассути GitLab API дар як равзана ҷамъ меорад; агар лозим бошад, мушкилот ба осонӣ мушоҳида карда мешаванд ва ба осонӣ маҳаллӣ карда мешаванд.

хулоса

Дар натиҷа, мо аниқ медонем, ки мо нусхабардорӣ мекунем, нусхаҳои эҳтиётии мо дурустанд, мушкилоте, ки бо онҳо ба миён меоянд, вақти камро талаб мекунанд ва дар сатҳи мудири навбатдорӣ ҳал карда мешаванд. Нусхаҳо дар муқоиса бо tar.gz ё Bacula ҷои хеле камро ишғол мекунанд.

Манбаъ: will.com

Илова Эзоҳ