Հե՜յ Հաբր։
Այսօր ես ուզում եմ խոսել Nextcloud-ի տարբեր կոնֆիգուրացիաներով մեծ տվյալների կրկնօրինակման ավտոմատացման մեր փորձի մասին: Ես աշխատում եմ որպես սպասարկման կետ Molniya AK-ում, որտեղ մենք իրականացնում ենք ՏՏ համակարգերի կոնֆիգուրացիայի կառավարում; Nextcloud-ն օգտագործվում է տվյալների պահպանման համար: Այդ թվում՝ բաշխված կառուցվածքով, ավելորդությամբ։
Տեղադրումների առանձնահատկություններից բխող խնդիրներն այն են, որ շատ տվյալներ կան։ Nextcloud-ի կողմից տրամադրված տարբերակները, ավելորդությունը, սուբյեկտիվ պատճառները և այլն, ստեղծում են բազմաթիվ կրկնօրինակներ:
նախապատմությանը
Nextcloud-ը կառավարելիս առաջանում է արդյունավետ կրկնօրինակում կազմակերպելու խնդիր, որը պետք է կոդավորված լինի, քանի որ տվյալները արժեքավոր են։
Մենք առաջարկում ենք կրկնօրինակներ մեր տեղում կամ հաճախորդի մոտ Nextcloud-ի առանձին մեքենաներում պահելու տարբերակներ, ինչը պահանջում է ճկուն ավտոմատացված մոտեցում վարչարարությանը:
Շատ հաճախորդներ կան, բոլորն էլ տարբեր կոնֆիգուրացիաներով, բոլորն էլ իրենց սեփական կայքերում և իրենց առանձնահատկություններով: Սա ստանդարտ տեխնիկա է, երբ ամբողջ կայքը պատկանում է ձեզ, և կրկնօրինակները պատրաստվում են պսակներից, այն լավ չի տեղավորվում:
Նախ, եկեք նայենք մուտքային տվյալներին: Կարիք ունենք:
- Ընդարձակություն մեկ կամ մի քանի հանգույցի առումով: Խոշոր տեղադրումների համար մենք օգտագործում ենք Minio որպես պահեստ:
- Իմացեք կրկնօրինակումներ կատարելու հետ կապված խնդիրների մասին:
- Դուք պետք է պահեք ձեր հաճախորդների և/կամ մեզ մոտ:
- Արագ և հեշտությամբ լուծեք խնդիրները:
- Հաճախորդները և տեղադրումները շատ տարբեր են միմյանցից. միատեսակությունը հնարավոր չէ հասնել:
- Վերականգնման արագությունը պետք է լինի նվազագույն երկու սցենարներում՝ ամբողջական վերականգնում (աղետ), սխալմամբ ջնջված մեկ թղթապանակ:
- Պահանջվում է կրկնօրինակման գործառույթ:
Կրկնօրինակների կառավարման խնդիրը լուծելու համար մենք տեղադրեցինք GitLab-ը։ Լրացուցիչ մանրամասները ըստ ճարման:
Իհարկե, մենք առաջինը չենք, որ լուծում ենք նման խնդիր, բայց մեզ թվում է, որ մեր գործնական, դժվարությամբ ձեռք բերած փորձը կարող է հետաքրքիր լինել, և մենք պատրաստ ենք կիսվել դրանով։
Քանի որ մեր ընկերությունն ունի բաց կոդով քաղաքականություն, մենք փնտրում էինք բաց կոդով լուծում: Իր հերթին մենք կիսվում ենք մեր զարգացումներով և տեղադրում դրանք։ Օրինակ, GitHub-ում կա
Կրկնօրինակման գործիքներ
Մենք սկսեցինք լուծման մեթոդների մեր որոնումը` ընտրելով կրկնօրինակի ստեղծման գործիք:
Սովորական tar + gzip-ը լավ չի աշխատում. տվյալները կրկնօրինակված են: Ավելացումը հաճախ պարունակում է շատ քիչ իրական փոփոխություններ, և մեկ ֆայլի տվյալների մեծ մասը կրկնվում է:
Կա ևս մեկ խնդիր՝ բաշխված տվյալների պահպանման ավելորդություն: Մենք օգտագործում ենք minio-ն, և դրա տվյալները հիմնականում ավելորդ են: Կամ դուք պետք է կրկնօրինակեք ինքնին minio-ի միջոցով՝ բեռնեք այն և օգտագործեք բոլոր միջակայքերը ֆայլային համակարգի միջև, և, ոչ պակաս կարևոր, կա որոշ դույլերի և մետա տեղեկատվության մոռանալու վտանգ: Կամ օգտագործեք կրկնօրինակում:
Կրկնօրինակման գործիքները հասանելի են բաց կոդով (Habré-ում կային
Պահուստավորման կառավարում
Borg-ը և Restic-ը լավն են, բայց ոչ մի ապրանք չունի կենտրոնացված կառավարման մեխանիզմ: Կառավարման և վերահսկման նպատակով մենք ընտրեցինք մի գործիք, որն արդեն ներդրել ենք, առանց որի չենք պատկերացնում մեր աշխատանքը, այդ թվում՝ ավտոմատացումը. սա հայտնի CI/CD-ն է՝ GitLab-ը։
Գաղափարը հետևյալն է՝ gitlab-runner-ը տեղադրված է Nextcloud-ի տվյալները պահող յուրաքանչյուր հանգույցի վրա։ Վազողը գործարկում է սկրիպտը ժամանակացույցով, որը վերահսկում է պահուստավորման գործընթացը, և այն գործարկում է Borg-ը կամ Restic-ը:
Ի՞նչ ստացանք։ Կատարման հետադարձ կապ, փոփոխությունների հարմար վերահսկում, սխալի դեպքում մանրամասներ։
Այստեղ
Gitlab API-ում CI/CD-ի ժամկետը փոխելու հնարավորություն դեռ չկա, բայց այն փոքր է: Այն պետք է մեծացնել, ասենք 1d
.
GitLab-ը, բարեբախտաբար, կարող է գործարկել ոչ միայն ըստ commit-ի, այլ միայն ըստ ժամանակացույցի, սա հենց այն է, ինչ մեզ անհրաժեշտ է:
Հիմա փաթաթման սցենարի մասին։
Մենք սահմանել ենք հետևյալ պայմանները այս սցենարի համար.
- Այն պետք է գործարկվի ինչպես վազորդի կողմից, այնպես էլ ձեռքով նույն ֆունկցիոնալությամբ վահանակից:
- Պետք է լինեն սխալների մշակիչներ.
- վերադարձի կոդը:
- որոնել տող մատյանում: Օրինակ, մեզ համար սխալը կարող է լինել հաղորդագրություն, որը ծրագիրը չի համարում ճակատագրական:
- Մշակման ժամանակի ավարտ: Առաջատար ժամանակը պետք է լինի ողջամիտ:
- Մեզ պետք է շատ մանրամասն մատյան: Բայց միայն սխալի դեպքում։
- Սկսելուց առաջ կատարվում են նաև մի շարք թեստեր։
- Փոքր բոնուսներ հարմարության համար, որոնք մենք օգտակար գտանք աջակցության գործընթացում.
- Սկիզբը և ավարտը գրանցվում են տեղական մեքենայի syslog-ում: Սա օգնում է միացնել համակարգի սխալները և կրկնօրինակման գործողությունը:
- Սխալների գրանցամատյանի մի մասը, եթե այդպիսիք կան, դուրս է բերվում stdout-ում, ամբողջ գրանցամատյանը գրվում է առանձին ֆայլում: Հարմար է անմիջապես նայել CI-ին և գնահատել սխալը, եթե այն չնչին է:
- Վրիպազերծման ռեժիմներ.
Ամբողջական գրանցամատյանը պահպանվում է որպես արտեֆակտ GitLab-ում, եթե սխալ չկա, գրանցամատյանը ջնջվում է: Սցենարը գրում ենք բաշով։
Մենք ուրախ կլինենք դիտարկել ցանկացած առաջարկ և մեկնաբանություն բաց կոդով - ողջունում ենք:
Ինչպես է այն աշխատում
Պահուստային հանգույցի վրա գործարկվում է Bash կատարողով վազորդ: Ըստ ժամանակացույցի, աշխատանքի CI/CD-ն գործարկվում է հատուկ շաղգամով: Վազողը գործարկում է ունիվերսալ փաթաթման սցենար նման առաջադրանքների համար, այն ստուգում է պահուստային պահեստի վավերականությունը, ամրացման կետերը և այն ամենը, ինչ մենք ուզում ենք, այնուհետև կրկնօրինակում և մաքրում է հինը: Ավարտված կրկնօրինակն ինքնին ուղարկվում է S3:
Մենք աշխատում ենք այս սխեմայի համաձայն՝ դա արտաքին AWS մատակարար է կամ ռուսական համարժեք (դա ավելի արագ է, և տվյալները չեն հեռանում Ռուսաստանի Դաշնությունից): Կամ մենք տեղադրում ենք առանձին մինի կլաստեր հաճախորդի համար իր կայքում այդ նպատակների համար: Մենք սովորաբար դա անում ենք անվտանգության նկատառումներից ելնելով, երբ հաճախորդը չի ցանկանում, որ տվյալներն ընդհանրապես դուրս գան իրենց միացումից:
Մենք չենք օգտագործել ssh-ի միջոցով կրկնօրինակում ուղարկելու հնարավորությունը։ Սա չի ավելացնում անվտանգությունը, և S3 մատակարարի ցանցային հնարավորությունները շատ ավելի բարձր են, քան մեր մեկ ssh մեքենան:
Որպեսզի պաշտպանեք ձեր տեղական մեքենան հաքերից, քանի որ նա կարող է ջնջել տվյալները S3-ի վրա, դուք պետք է միացնեք տարբերակումը:
Կրկնօրինակը միշտ կոդավորում է կրկնօրինակը:
Borg-ն ունի չգաղտնագրված ռեժիմ none
, բայց մենք կտրականապես խորհուրդ չենք տալիս միացնել այն: Այս ռեժիմում ոչ միայն գաղտնագրում չի լինի, այլև գրվածի ստուգման գումարը չի հաշվարկվում, ինչը նշանակում է, որ ամբողջականությունը կարող է ստուգվել միայն անուղղակիորեն՝ օգտագործելով ինդեքսները:
Առանձին ժամանակացույցը ստուգում է ինդեքսների և բովանդակության ամբողջականության կրկնօրինակները: Ստուգումը դանդաղ է և երկար, ուստի մենք այն իրականացնում ենք ամիսը մեկ անգամ առանձին: Դա կարող է տեւել մի քանի օր:
Կարդացեք ռուսերեն
Հիմնական գործառույթները
prepare
պատրաստումtestcheck
պատրաստվածության ստուգումmaincommand
հիմնական թիմըforcepostscript
ֆունկցիա, որը կատարվում է վերջում կամ սխալմամբ։ Մենք այն օգտագործում ենք բաժանումը ապամոնտաժելու համար:
Ծառայության գործառույթներ
cleanup
Մենք արձանագրում ենք սխալներ կամ ջնջում ենք գրանցամատյանի ֆայլը:checklog
վերլուծել գրանցամատյանը սխալով տողի առաջացման համար:ret
ելքի կարգավորիչ:checktimeout
ստուգեք դադարի համար:
միջավայր
VERBOSE=1
Մենք անմիջապես ցուցադրում ենք սխալները էկրանին (stdout):SAVELOGSONSUCCES=1
պահպանել գրանցամատյանը հաջողության դեպքում:INIT_REPO_IF_NOT_EXIST=1
Ստեղծեք պահեստ, եթե այն գոյություն չունի: Լռելյայն անջատված է:TIMEOUT
հիմնական գործողության առավելագույն ժամանակը: Դուք կարող եք այն սահմանել որպես «m», «h» կամ «d» վերջում:
Պահպանման ռեժիմ հին պատճենների համար: Կանխադրված:
KEEP_DAILY=7
KEEP_WEEKLY=4
KEEP_MONTHLY=6
Փոփոխականներ սցենարի ներսում
ERROR_STRING
— տող՝ սխալի գրանցման գրանցամատյանի համար:EXTRACT_ERROR_STRING
- արտահայտություն ցույց տողի համար, եթե սխալ է:KILL_TIMEOUT_SIGNAL
— ազդանշան սպանելու համար, եթե ժամանակն ավարտվի:TAIL
— էկրանի վրա սխալներով քանի տողեր:COLORMSG
- հաղորդագրության գույնը (կանխադրված դեղին):
Այդ սկրիպտը, որը կոչվում է wordpress, ունի պայմանական անուն, նրա հնարքն այն է, որ այն նաև back up է անում mysql տվյալների բազայից։ Սա նշանակում է, որ այն կարող է օգտագործվել մեկ հանգույցով Nexcloud տեղադրումների համար, որտեղ կարող եք նաև կրկնօրինակել տվյալների բազան: Հարմարավետությունը ոչ միայն այն է, որ ամեն ինչ մեկ տեղում է, այլ նաև տվյալների բազայի բովանդակությունը մոտ է ֆայլերի բովանդակությանը, քանի որ ժամանակի տարբերությունը նվազագույն է:
Ռեստիկ ընդդեմ Բորգի
Համեմատություններ կան նաև Բորգի և Ռեստիչի միջև
Մեր ընտրության չափանիշները, ի լրումն արդեն նշվածների (կրկնօրինակում, արագ վերականգնում և այլն).
- Դիմադրություն անավարտ աշխատանքին. Ստուգեք սպանության համար -9:
- Չափը սկավառակի վրա:
- Պահանջը ռեսուրսների համար (CPU, հիշողություն):
- Պահպանված բշտիկների չափը:
- S3-ի հետ աշխատելը.
- Ամբողջականության ստուգում.
Փորձարկման համար մենք վերցրել ենք մեկ հաճախորդ՝ իրական տվյալներով և ընդհանուր 1,6 ՏԲ չափով:
Պայմանները:
Բորգը չգիտի, թե ինչպես աշխատել ուղղակիորեն S3-ի հետ, և մենք տեղադրեցինք սկավառակը որպես ապահովիչ՝ միջոցով
Goofys-ն աշխատում է շատ արագ և լավ, և կան
Ցանցի ազդեցությունը նվազեցնելու համար մենք օգտագործել ենք տեղական մատակարար՝ Yandex Cloud:
Համեմատության փորձարկման արդյունքներ.
- Kill -9-ը հետագա վերագործարկմամբ երկուսն էլ հաջող էին:
- Չափը սկավառակի վրա: Բորգը կարող է սեղմել, ուստի արդյունքները սպասվում են:
Պահուստավորող
չափ
Բորգ
562Gb
Հանգիստ
628Gb
- Պրոցեսորի կողմից
Բորգը ինքնին քիչ է սպառում, լռելյայն սեղմումով, բայց այն պետք է գնահատվի բութ գործընթացի հետ միասին: Ընդհանուր առմամբ, դրանք համեմատելի են և օգտագործում են մոտ 1,2 միջուկ նույն փորձնական վիրտուալ մեքենայի վրա: - Հիշողություն. Restic-ը մոտավորապես 0,5 ԳԲ է, Բորգը՝ մոտավորապես 200 ՄԲ: Բայց այս ամենը աննշան է համակարգի ֆայլերի քեշի համեմատ: Այսպիսով, խորհուրդ է տրվում ավելի շատ հիշողություն հատկացնել:
- Բշտիկների չափի տարբերությունը ապշեցուցիչ էր։
Պահուստավորող
չափ
Բորգ
մոտ 500 ՄԲ
Հանգիստ
մոտ 5 ՄԲ
- Restic-ի S3-ի փորձը գերազանց է: Բորգի հետ աշխատելը goofys-ի միջոցով որևէ հարց չի առաջացնում, սակայն նշվել է, որ խորհուրդ է տրվում կրկնօրինակումն ավարտելուց հետո կատարել մեծացում՝ քեշը ամբողջությամբ վերականգնելու համար: S3-ի առանձնահատկությունն այն է, որ քիչ պոմպացված կտորները երբեք չեն ուղարկվի դույլ, ինչը նշանակում է, որ ոչ լրիվ լրացված տվյալները հանգեցնում են մեծ վնասների:
- Ամբողջականության ստուգումը երկու դեպքում էլ լավ է աշխատում, սակայն արագությունը զգալիորեն տարբերվում է:
Ռեստիկ 3,5 ժամ.
Borg, 100 ԳԲ SSD ֆայլի քեշով – 5 ժամ.Մոտավորապես նույն արագության արդյունքը, եթե տվյալները տեղային սկավառակի վրա են:
Բորգը կարդում է անմիջապես S3-ից՝ առանց քեշի 33 ժամ. Հրեշավոր երկար.
Ներքևի գիծն այն է, որ Borg-ը կարող է սեղմել և ունի ավելի մեծ բշտիկներ, ինչն ավելի էժան է դարձնում S3-ում պահեստավորման և GET/PUT գործողությունները: Բայց սա գալիս է ավելի բարդ և դանդաղ ստուգման գնով: Ինչ վերաբերում է վերականգնման արագությանը, մենք տարբերություն չենք նկատել։ Restic-ը հետագա կրկնօրինակումները (առաջինից հետո) վերցնում է մի փոքր ավելի երկար, բայց ոչ էապես:
Վերջին, բայց ոչ պակաս կարևոր ընտրության մեջ համայնքի չափն էր:
Եվ մենք ընտրեցինք բորգը:
Մի քանի խոսք սեղմման մասին
Borg-ն իր զինանոցում ունի սեղմման նոր հիանալի ալգորիթմ՝ zstd: Սեղմման որակը ոչ ավելի վատ է, քան gzip-ը, բայց շատ ավելի արագ: Եվ արագությամբ համեմատելի է լռելյայն lz4-ի հետ:
Օրինակ, MySQL տվյալների բազայի աղբանոցը երկու անգամ ավելի լավ է սեղմվում, քան lz4-ը նույն արագությամբ: Այնուամենայնիվ, իրական տվյալների հետ կապված փորձը ցույց է տալիս, որ շատ քիչ տարբերություն կա Nextcloud հանգույցի սեղմման հարաբերակցության մեջ:
Borg-ն ունի բավականին բոնուսային սեղմման ռեժիմ. եթե ֆայլը ունի բարձր էնտրոպիա, ապա սեղմումն ընդհանրապես չի կիրառվում, ինչը մեծացնում է արագությունը։ Միացված է ընտրանքով՝ ստեղծելիս
-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-ում, և ոչ բոլորն ունեն հակավիրուս: Թափելու պահին ստուգումներ անցկացնելը չափազանց շատ ժամանակ է պահանջում և խանգարում է բիզնեսին:
Scalability-ը ձեռք է բերվում տարբեր պիտակներով տարբեր հանգույցների վրա վազորդներ գործարկելու միջոցով:
Մեր մոնիտորինգը հավաքում է կրկնօրինակի կարգավիճակները GitLab API-ի միջոցով մեկ պատուհանում, անհրաժեշտության դեպքում խնդիրները հեշտությամբ նկատվում են և նույնքան հեշտությամբ տեղայնացվում:
Ամփոփում
Արդյունքում մենք հաստատ գիտենք, որ մենք կրկնօրինակում ենք, որ մեր կրկնօրինակները վավեր են, դրանց հետ կապված խնդիրները քիչ ժամանակ են պահանջում և լուծվում են հերթապահ ադմինիստրատորի մակարդակով։ Պահուստավորումներն իսկապես քիչ տեղ են զբաղեցնում՝ համեմատած tar.gz-ի կամ Bacula-ի հետ:
Source: www.habr.com