Նվագախումբը և VIP-ը որպես HA լուծում MySQL կլաստերի համար

Citymobil-ում մենք օգտագործում ենք MySQL տվյալների բազա՝ որպես մեր հիմնական մշտական ​​տվյալների պահեստավորում: Մենք ունենք տվյալների բազայի մի քանի կլաստերներ տարբեր ծառայությունների և նպատակների համար:

Վարպետի մշտական ​​հասանելիությունը ամբողջ համակարգի և դրա առանձին մասերի աշխատանքի կարևոր ցուցանիշն է: Կլաստերների ավտոմատ վերականգնումը հիմնական ձախողման դեպքում զգալիորեն նվազեցնում է միջադեպի արձագանքման ժամանակը և համակարգի խափանումը: Այս հոդվածում ես կանդրադառնամ MySQL կլաստերի բարձր հասանելիության (HA) դիզայնին, որը հիմնված է MySQL Orchestrator և վիրտուալ IP հասցեներ (VIP):

Նվագախումբը և VIP-ը որպես HA լուծում MySQL կլաստերի համար

HA լուծում՝ հիմնված VIP-ի վրա

Նախ, ես հակիրճ կասեմ ձեզ, թե որն է մեր տվյալների պահպանման համակարգը:

Մենք օգտագործում ենք կրկնօրինակման դասական սխեման մեկ գրելու համար հասանելի վարպետով և միայն կարդալու համար նախատեսված մի քանի կրկնօրինակներով: Կլաստերը կարող է պարունակել միջանկյալ վարպետ՝ հանգույց, որը և՛ կրկնօրինակ է, և՛ վարպետ մյուսների համար: Հաճախորդները մուտք են գործում կրկնօրինակներ HAProxy-ի միջոցով, ինչը թույլ է տալիս բեռի հավասարաչափ բաշխում և հեշտ մասշտաբում: HAProxy-ի օգտագործումը պայմանավորված է պատմական պատճառներով, և մենք ներկայումս գտնվում ենք ProxySQL տեղափոխման գործընթացում:

Կրկնօրինակումը կատարվում է կիսասինխրոն ռեժիմով, հիմնվելով GTID. Սա նշանակում է, որ առնվազն մեկ կրկնօրինակ պետք է գրանցի գործարքը, նախքան այն հաջողված համարվի: Այս կրկնօրինակման ռեժիմը ապահովում է օպտիմալ հավասարակշռություն կատարման և տվյալների անվտանգության միջև հիմնական հանգույցի ձախողման դեպքում: Հիմնականում բոլոր փոփոխությունները փոխանցվում են վարպետից կրկնօրինակներին՝ օգտագործելով Row Based Replication (RBR), բայց որոշ հանգույցներ կարող են ունենալ mixed binlog format.

Նվագախումբը պարբերաբար թարմացնում է կլաստերային տոպոլոգիայի վիճակը, վերլուծում է ստացված տեղեկատվությունը, և եթե խնդիրներ առաջանան, կարող է գործարկել վերականգնման ավտոմատ ընթացակարգ: Մշակողը պատասխանատու է ինքնին ընթացակարգի համար, քանի որ այն կարող է իրականացվել տարբեր ձևերով՝ հիմնված VIP-ի, DNS-ի վրա, օգտագործելով ծառայության հայտնաբերման ծառայություններ կամ ինքնուրույն գրավոր մեխանիզմներ:

Վարպետը վերականգնելու պարզ եղանակներից մեկը, եթե այն ձախողվի, լողացող VIP հասցեների օգտագործումն է:

Ինչ պետք է իմանաք այս լուծման մասին՝ առաջ շարժվելուց առաջ.

  • VIP-ը IP հասցե է, որը կապված չէ որոշակի ֆիզիկական ցանցային ինտերֆեյսի հետ: Եթե ​​հանգույցը ձախողվի կամ պլանավորված սպասարկման ընթացքում, մենք կարող ենք VIP-ը միացնել այլ ռեսուրսի՝ նվազագույն ժամանակով:
  • Վիրտուալ IP հասցեի ազատումը և թողարկումը էժան և արագ գործողություն է:
  • VIP-ի հետ աշխատելու համար անհրաժեշտ է մուտք գործել սերվեր SSH-ի միջոցով կամ օգտագործել հատուկ կոմունալ ծառայություններ, օրինակ. keepalived.

Եկեք նայենք մեր կախարդի հետ հնարավոր խնդիրներին և պատկերացնենք, թե ինչպես պետք է գործի վերականգնման ավտոմատ մեխանիզմը:

Ցանցային կապը վարպետին անհետացել է, կամ խնդիր է առաջացել ապարատային մակարդակում, և սերվերն անհասանելի է

  1. Նվագախումբը թարմացնում է կլաստերի տոպոլոգիան, յուրաքանչյուր կրկնօրինակ հաղորդում է, որ վարպետն անհասանելի է: Նվագախումբը սկսում է նոր վարպետի դերին համապատասխան կրկնօրինակի ընտրության գործընթացը և սկսում է վերականգնումը:
  2. Մենք փորձում ենք հեռացնել VIP-ին հին վարպետից՝ անհաջող:
  3. Կրկնօրինակն անցնում է վարպետի դերին: Տոպոլոգիան վերակառուցվում է։
  4. VIP-ի հետ ցանցային նոր ինտերֆեյսի ավելացում: Քանի որ հնարավոր չէր հեռացնել VIP-ը, մենք սկսում ենք պարբերաբար հարցումներ ուղարկել հետին պլանում անհատույց ՀՀՊ. Այս տեսակի հարցումը/պատասխանը թույլ է տալիս թարմացնել IP և MAC հասցեների քարտեզագրման աղյուսակը միացված անջատիչների վրա՝ դրանով իսկ տեղեկացնելով, որ մեր VIP-ը տեղափոխվել է: Սա նվազագույնի է հասցնում հավանականությունը split brain հին վարպետին վերադարձնելիս.
  5. Բոլոր նոր կապերն անմիջապես վերահղվում են նոր վարպետին: Հին կապերը ձախողվում են, և տվյալների բազայի կրկնվող զանգերը կատարվում են հավելվածի մակարդակով:

Սերվերը աշխատում է նորմալ ռեժիմով, սխալ է տեղի ունեցել DBMS մակարդակում

Ալգորիթմը նման է նախորդ դեպքին՝ թարմացնելով տոպոլոգիան և սկսել վերականգնման գործընթացը։ Քանի որ սերվերը հասանելի է, մենք հաջողությամբ թողարկում ենք VIP-ը հին վարպետի վրա, փոխանցում այն ​​նորին և ուղարկում ենք մի քանի ARP հարցումներ: Հին վարպետի հնարավոր վերադարձը չպետք է ազդի վերակառուցված կլաստերի և հավելվածի աշխատանքի վրա:

Այլ խնդիրներ

Կրկնօրինակների կամ միջանկյալ վարպետների ձախողում չի տանում ավտոմատ գործողություններին և պահանջում է ձեռքով միջամտություն:

Վիրտուալ ցանցային ինտերֆեյսը միշտ ավելացվում է ժամանակավորապես, այսինքն՝ սերվերի վերագործարկումից հետո VIP-ն ինքնաբերաբար չի նշանակվում: Տվյալների բազայի յուրաքանչյուր օրինակ լռելյայնորեն սկսվում է միայն կարդալու ռեժիմով, նվագախումբն ավտոմատ կերպով փոխում է նոր վարպետը գրելու և փորձում է տեղադրել read only հին վարպետի վրա. Այս գործողությունները նպատակ ունեն նվազեցնելու հավանականությունը split brain.

Խնդիրներ կարող են առաջանալ վերականգնման գործընթացում, որը պետք է նաև տեղեկացվի նվագախմբի միջերեսի միջոցով՝ ի լրումն ստանդարտ մոնիտորինգի գործիքների: Մենք ընդլայնել ենք REST API-ն՝ ավելացնելով այս հատկությունը (PR ներկայումս վերանայման փուլում է):

HA լուծման ընդհանուր դիագրամը ներկայացված է ստորև.

Նվագախումբը և VIP-ը որպես HA լուծում MySQL կլաստերի համար

Ընտրելով նոր վարպետ

Նվագախումբը բավականաչափ խելացի է և փորձում է ընտրել ամենահարմար կրկնօրինակը որպես նոր վարպետ՝ հետևյալ չափանիշներով.

  • կրկնօրինակը հետ է մնում վարպետից.
  • Master-ի և կրկնօրինակի MySQL տարբերակը;
  • կրկնօրինակման տեսակը (RBR, SBR կամ խառը);
  • գտնվելու վայրը նույն կամ տարբեր տվյալների կենտրոններում.
  • մատչելիություն errant GTID - գործարքներ, որոնք կատարվել են կրկնօրինակի վրա և չեն գտնվում վարպետի վրա.
  • հաշվի են առնվում նաև մաքսային ընտրության կանոնները:

Ամեն ակնարկ չէ, որ իդեալական թեկնածու է վարպետի համար: Օրինակ, կրկնօրինակը կարող է օգտագործվել տվյալների կրկնօրինակման համար, կամ սերվերն ունի ավելի թույլ ապարատային կոնֆիգուրացիա: Նվագախումբ աջակցում է ձեռնարկի կանոններ, որոնց օգնությամբ դուք կարող եք հարմարեցնել ձեր թեկնածուների ընտրության նախապատվությունները ամենանախընտրելիից մինչև անտեսված:

Արձագանքման և վերականգնման ժամանակը

Միջադեպի դեպքում կարևոր է նվազագույնի հասցնել համակարգի խափանումների ժամանակը, ուստի եկեք դիտարկենք MySQL պարամետրերը, որոնք ազդում են նվագախմբի կողմից կլաստերային տոպոլոգիայի ստեղծման և թարմացման վրա.

  • slave_net_timeout — վայրկյանների քանակը, որոնց ընթացքում կրկնօրինակը սպասում է նոր տվյալների կամ սրտի բաբախման ազդանշանի, որը կհասնի վարպետից մինչև կապը կորած ճանաչվի և նորից միանա: Որքան ցածր է արժեքը, այնքան ավելի արագ կրկնօրինակը կարող է որոշել, որ կապը վարպետի հետ խզված է: Մենք սահմանել ենք այս արժեքը 5 վայրկյան:
  • MASTER_CONNECT_RETRY — վերամիացման փորձերի միջև ընկած վայրկյանների քանակը: Ցանցի խնդիրների դեպքում այս պարամետրի ցածր արժեքը թույլ կտա արագ վերամիացում և կկանխի կլաստերի վերականգնման գործընթացի մեկնարկը: Առաջարկվող արժեքը 1 վայրկյան է:
  • MASTER_RETRY_COUNT — վերամիացման փորձերի առավելագույն քանակը:
  • MASTER_HEARTBEAT_PERIOD — վայրկյաններով ընդմիջում, որից հետո վարպետը սրտի բաբախման ազդանշան է ուղարկում: Կանխադրված արժեքի կեսը slave_net_timeout.

Նվագախմբի պարամետրերը.

  • DelayMasterPromotionIfSQLThreadNotUpToDate - եթե հավասար է true, ապա հիմնական դերը չի կիրառվի թեկնածուի կրկնօրինակի վրա, քանի դեռ կրկնօրինակի SQL շարանը չի ավարտել բոլոր չկիրառված գործարքները Relay Log-ից: Մենք օգտագործում ենք այս տարբերակը՝ գործարքները չկորցնելու համար, երբ բոլոր թեկնածուների կրկնօրինակները հետ են մնում:
  • InstancePollSeconds — տոպոլոգիայի կառուցման և թարմացման հաճախականությունը:
  • RecoveryPollSeconds - տոպոլոգիայի վերլուծության հաճախականությունը: Եթե ​​խնդիր հայտնաբերվի, սկսվում է տոպոլոգիայի վերականգնումը: Սա հաստատուն, հավասար է 1 վայրկյանի։

Յուրաքանչյուր կլաստերային հանգույց քվեարկվում է նվագախմբի կողմից յուրաքանչյուր անգամ մեկ անգամ InstancePollSeconds վայրկյան Երբ խնդիր է հայտնաբերվում, կլաստերի վիճակը պարտադրվում է թարմացվել է, իսկ հետո վերջնական որոշում է կայացվում վերականգնումն իրականացնելու մասին։ Փորձարկելով տվյալների բազայի և նվագախմբի տարբեր պարամետրերը, մենք կարողացանք կրճատել արձագանքման և վերականգնման ժամանակը մինչև 30 վայրկյան:

Փորձարկման տակդիր

Մենք սկսեցինք փորձարկել HA սխեման տեղական մշակմամբ փորձարկման նստարան և հետագա իրականացում թեստային և արտադրական միջավայրերում: Տեղական ստենդը լիովին ավտոմատացված է Docker-ի հիման վրա և թույլ է տալիս փորձարկել նվագախմբի և ցանցի կազմաձևումը, կլաստերը 2-3 սերվերից հասցնել մի քանի տասնյակի և վարժանքներ անցկացնել անվտանգ միջավայրում:

Զորավարժությունների ընթացքում մենք ընտրում ենք խնդրի նմանակման մեթոդներից մեկը՝ ակնթարթորեն նկարահանել վարպետին՝ օգտագործելով kill -9, մեղմորեն դադարեցրեք գործընթացը և դադարեցրեք սերվերը (docker-compose stop), մոդելավորել ցանցի խնդիրները՝ օգտագործելով iptables -j REJECT կամ iptables -j DROP. Ակնկալում ենք հետևյալ արդյունքները.

  • նվագախումբը կհայտնաբերի վարպետի հետ կապված խնդիրները և կթարմացնի տոպոլոգիան ոչ ավելի, քան 10 վայրկյանում.
  • վերականգնման ընթացակարգը ինքնաբերաբար կսկսվի. ցանցի կոնֆիգուրացիան կփոխվի, վարպետի դերը կանցնի կրկնօրինակին, տոպոլոգիան կվերակառուցվի.
  • նոր վարպետը կդառնա գրավոր, կենդանի կրկնօրինակները չեն կորչի վերակառուցման գործընթացում.
  • տվյալները կսկսեն գրվել նոր վարպետին և վերարտադրվել.
  • Վերականգնման ընդհանուր ժամանակը կկազմի ոչ ավելի, քան 30 վայրկյան:

Ինչպես գիտեք, համակարգը կարող է տարբեր կերպ վարվել թեստային և արտադրական միջավայրերում՝ տարբեր ապարատային և ցանցային կոնֆիգուրացիաների, սինթետիկ և իրական բեռի տարբերությունների և այլնի պատճառով: Հետևաբար, մենք պարբերաբար իրականացնում ենք վարժություններ իրական պայմաններում՝ ստուգելով, թե ինչպես է համակարգը վարվում, երբ ցանցի միացումը կորչում է կամ դրա առանձին մասերը քայքայվում են: Ապագայում մենք ցանկանում ենք ստեղծել բոլորովին նույնական ենթակառուցվածք երկու միջավայրերի համար և ավտոմատացնել դրա փորձարկումը:

Արդյունքները

Հիմնական պահեստավորման համակարգի հանգույցի առողջությունը SRE-ի և գործառնական թիմի հիմնական խնդիրներից մեկն է: VIP-ի վրա հիմնված նվագախմբի և ՀԱ լուծման իրականացումը թույլ տվեց մեզ հասնել հետևյալ արդյունքների.

  • տվյալների բազայի կլաստերի տոպոլոգիայի հետ կապված խնդիրների հուսալի հայտնաբերում.
  • ավտոմատ և արագ արձագանքում վարպետի հետ կապված միջադեպերին՝ նվազեցնելով համակարգի խափանումների ժամանակը:

Այնուամենայնիվ, լուծումն ունի իր սահմանափակումներն ու թերությունները.

  • HA սխեման մի քանի տվյալների կենտրոնների մասշտաբը կպահանջի նրանց միջև մեկ L2 ցանց;
  • Նախքան նոր վարպետին VIP նշանակելը, մենք պետք է այն թողարկենք հինի վրա: Գործընթացը հաջորդական է, ինչը մեծացնում է վերականգնման ժամանակը.
  • VIP-ի թողարկումը պահանջում է SSH մուտք դեպի սերվեր կամ հեռավոր ընթացակարգեր կանչելու ցանկացած այլ եղանակ: Քանի որ սերվերը կամ տվյալների բազան խնդիրներ ունի, որոնք առաջացրել են վերականգնման գործընթացը, մենք չենք կարող վստահ լինել, որ VIP-ի հեռացումը հաջողությամբ կավարտվի: Եվ դա կարող է հանգեցնել նույն վիրտուալ IP հասցեով երկու սերվերի հայտնվելուն և խնդրի split brain.

Խուսափելու համար split brain, կարող եք օգտագործել մեթոդը ՍՏՈՆԻԹ («Shoot The Other Node In The Head»), որն ամբողջությամբ մեկուսացնում կամ անջատում է խնդրահարույց հանգույցը: Կլաստերների բարձր հասանելիության իրականացման այլ եղանակներ կան՝ VIP-ի և DNS-ի համադրություն, ծառայության հայտնաբերման և վստահված անձի ծառայություններ, համաժամանակյա վերարտադրություն և այլ մեթոդներ, որոնք ունեն իրենց թերություններն ու առավելությունները:

Ես խոսեցի MySQL ձախողման կլաստերի ստեղծման մեր մոտեցման մասին: Այն հեշտ է իրականացնել և ապահովում է հուսալիության ընդունելի մակարդակ ներկա պայմաններում: Քանի որ ամբողջ համակարգը ընդհանրապես և ենթակառուցվածքները մասնավորապես զարգանում են, այս մոտեցումը, անկասկած, կզարգանա:

Source: www.habr.com

Добавить комментарий