Оркестр барои MySQL: чаро шумо наметавонед бе он лоиҳаи ба хатогиҳо тобовар созед

Ҳар як лоиҳаи калон бо якчанд сервер оғоз ёфт. Дар аввал як сервери DB мавҷуд буд, баъд ба он барои васеъ кардани хониш ғуломон илова карда шуданд. Ва он гоҳ - бас! Оғо як аст, аммо ғуломҳо бисёр; агар яке аз ғуломон равад, ҳамааш хуб мешавад, аммо агар устод равад, бад мешавад: вақти бекорӣ, админҳо кӯшиш мекунанд серверро баланд кунанд. Чӣ бояд кард? Мастерро захира кунед. Дар ин бора ҳамкори ман Павел аллакай навишта буд мақола, Ман онро такрор намекунам. Ба ҷои ин, ман ба шумо мегӯям, ки чаро ба шумо бешубҳа Orchestrator барои MySQL лозим аст!

Биёед аз саволи асосӣ оғоз кунем: "Вақте ки усто меравад, мо кодро ба мошини нав чӣ гуна мегузарем?"

  • Ба ман нақшаи VIP (Virtual IP) бештар маъқул аст, мо дар ин бора дар зер сӯҳбат хоҳем кард. Ин соддатарин ва возеҳтарин аст, гарчанде ки он маҳдудияти возеҳ дорад: устое, ки мо захира мекунем, бояд дар сегменти L2 бо мошини нав бошад, яъне мо метавонем дар бораи DC дуюм фаромӯш кунем. Ва, ба таври дӯстона, агар шумо қоидаеро риоя кунед, ки L2 калон бад аст, зеро L2 танҳо дар як раф аст ва L3 дар байни рафҳо аст ва чунин схема маҳдудиятҳои боз ҳам бештар дорад.
  • Шумо метавонед номи DNS-ро дар код нависед ва онро тавассути /etc/hosts ҳал кунед. Дар асл, ҳеҷ гуна қарор вуҷуд нахоҳад дошт. Бартарии схема: характеристикаи махдудияти усули якум вучуд надорад, яъне ташкили кросс-ДК имконпазир аст. Аммо он гоҳ саволи возеҳ ба миён меояд: мо метавонем тағиротро ба /etc/hosts тавассути Puppet-Ansible то чӣ андоза зуд расонида метавонем?
  • Шумо метавонед усули дуюмро каме тағир диҳед: кэшкунии DNS-ро дар ҳама серверҳои веб насб кунед, ки тавассути он код ба пойгоҳи додаҳои асосӣ меравад. Шумо метавонед TTL 60-ро барои ин вуруд дар DNS муқаррар кунед. Чунин ба назар мерасад, ки агар дуруст амалӣ карда шавад, усул хуб аст.
  • Нақша бо кашфи хидмат, ки истифодаи консулро дар назар дорад ва ғайра.
  • Варианти ҷолиб бо ProxySQL. Шумо бояд тамоми трафикро ба MySQL тавассути ProxySQL равона кунед; худи ProxySQL метавонад муайян кунад, ки устод кист. Дар омади гап, шумо метавонед дар бораи яке аз имконоти истифодаи ин маҳсулот дар ман хонед мақола.

Муаллифи Orchestrator, ки дар Github кор мекард, аввал нақшаи аввалро бо VIP амалӣ кард ва сипас онро ба схема бо консул табдил дод.

Тарҳбандии маъмулии инфрасохтор:

Оркестр барои MySQL: чаро шумо наметавонед бе он лоиҳаи ба хатогиҳо тобовар созед
Ман фавран ҳолатҳои аёнеро тавсиф мекунам, ки бояд ба назар гирифта шаванд:

  • Суроғаи VIP набояд дар конфигуратсияи ягон сервер сабт карда шавад. Биёед вазъиятро тасаввур кунем: усто аз нав оғоз кард ва ҳангоми боркунӣ, Оркестр ба ҳолати нокомӣ гузашт ва яке аз ғуломонро усто кард; пас устои пир бархост ва ҳоло VIP дар ду мошин аст. Ин бад аст.
  • Барои оркестр, ба шумо лозим меояд, ки барои занг задан ба устоди кӯҳна ва устоди нав скрипт нависед. Дар устои кӯҳна шумо бояд ifdown иҷро кунед ва дар устои нав - ifup vip. Хуб мебуд, ки ба ин скрипт дохил карда шавад, ки дар сурати нокомӣ, порт дар гузаргоҳи устои кӯҳна танҳо хомӯш карда мешавад, то аз ҳар гуна тақсимшавӣ пешгирӣ карда шавад.
  • Пас аз он ки Orchestrator скрипти шуморо даъват кард, то аввал VIP-ро хориҷ кунад ва/ё портро дар коммутатор хомӯш кунад ва сипас скрипти баланд бардоштани VIP-ро дар устоди нав даъват кунад, фармони arping -ро фаромӯш накунед, то ба ҳама бигӯед, ки VIP нав ҳоло аст. Ин ҷо.
  • Ҳама ғуломон бояд танҳо барои хондан_1=0 бошанд ва ҳамин ки шумо ғуломро ба оғо пешбарӣ мекунед, он бояд танҳо read_on=XNUMX бошад.
  • Фаромӯш накунед, ки ҳар як ғуломе, ки мо барои ин интихоб кардаем, метавонад устод гардад (Оркестр як механизми пурраи афзалият дорад, ки барои он ғулом дар ҷои аввал ҳамчун номзад ба устоди нав баррасӣ шавад, ки дар ҷои дуюм ва кадом ғулом бояд дар ҳеҷ ҳолат устод интихоб карда намешавад). Агар банда усто шавад, бори банда бар он мемонад ва бори хоҷа изофа мешавад, инро бояд ба назар гирифт.

Агар шумо оркестр надошта бошед, чаро ба шумо оркестр лозим аст?

  • Orchestrator дорои интерфейси графикии хеле қулай мебошад, ки тамоми топологияро намоиш медиҳад (ниг. скриншот дар зер).
  • Оркестр метавонад пайгирӣ кунад, ки кадом ғуломон қафо мондаанд ва дар куҷо репликатсия умуман вайрон шудааст (мо скриптҳоро барои фиристодани SMS ба Orchestrator замима кардаем).
  • Оркестр ба шумо мегӯяд, ки кадом ғуломон хатои GTID доранд.

Интерфейси оркестр:

Оркестр барои MySQL: чаро шумо наметавонед бе он лоиҳаи ба хатогиҳо тобовар созед
Хатогии GTID чист?

Барои кори оркестр ду талаботи асосӣ вуҷуд дорад:

  • Зарур аст, ки псевдо GTID дар ҳама мошинҳо дар кластери MySQL фаъол карда шавад; мо GTID-ро фаъол кардаем.
  • Зарур аст, ки дар ҳама ҷо як намуди binlogs мавҷуд бошад, шумо метавонед изҳоротро истифода баред. Мо конфигуратсияе доштем, ки дар он усто ва аксари ғуломон Row доштанд ва ду нафар таърихан дар ҳолати омехта боқӣ монданд. Дар натиҷа, Оркестр танҳо намехост, ки ин ғуломҳоро ба устоди нав пайваст кунад.

Дар хотир доред, ки чизи аз ҳама муҳим дар ғуломи истеҳсолот мувофиқати он бо устод аст! Агар шумо ID Global Transaction (GTID) -ро ҳам дар усто ва ҳам дар ғуломи худ фаъол карда бошед, пас шумо метавонед аз функсияи gtid_subset истифода баред, то бифаҳмед, ки оё ҳамон дархостҳо барои тағир додани маълумот дар ин мошинҳо иҷро шудаанд ё на. Шумо метавонед дар ин бора бештар хонед дар ин ҷо.

Ҳамин тариқ, Orchestrator ба шумо тавассути хатогии GTID нишон медиҳад, ки транзаксияҳо дар ғулом вуҷуд доранд, ки дар усто нестанд. Чаро ин рӯй медиҳад?

  • Read_only=1 дар ғулом фаъол нест, касе пайваст ва дархости тағир додани маълумотро анҷом дод.
  • Super_read_only=1 дар ғулом фаъол нест, пас администратор серверро ошуфта карда, ворид шуд ва дархостро дар он ҷо иҷро кард.
  • Агар шумо ҳарду нуқтаи қаблиро ба инобат гирифта бошед, пас як ҳиллаи дигар вуҷуд дорад: дар MySQL, дархост барои тоза кардани binlogs низ ба binlog меравад, аз ин рӯ, дар флеши аввал хатои GTID дар устод ва ҳама ғуломон пайдо мешавад. Чӣ тавр аз ин пешгирӣ кардан мумкин аст? Perona-5.7.25-28 танзимоти binlog_skip_flush_commands=1-ро ҷорӣ кард, ки навиштани флешро ба binlogs манъ мекунад. Дар вебсайти mysql.com як муқарраршуда мавҷуд аст хато.

Ичозат дихед хамаи гуфтахои болоро чамъбаст намоям. Агар шумо ҳанӯз нахоҳед, ки Orchestrator-ро дар ҳолати нокомӣ истифода баред, пас онро ба ҳолати мушоҳида гузоред. Он гоҳ шумо ҳамеша дар пеши назари шумо харитаи ҳамкории мошинҳои MySQL ва маълумоти визуалӣ дар бораи он, ки дар ҳар як мошин кадом намуди такрорӣ мавҷуд аст, оё ғуломҳо ақиб мондаанд ва муҳимтар аз ҳама, онҳо бо устод то чӣ андоза мувофиқанд!

Саволи равшан ин аст: "Оркестр чӣ гуна бояд кор кунад?" Вай бояд устоди навро аз ғуломҳои ҷорӣ интихоб кунад ва сипас ҳамаи ғуломонро ба он дубора пайваст кунад (ин барои GTID лозим аст; агар шумо механизми кӯҳнаро бо binlog_name ва binlog_pos истифода баред, пас ғуломро аз устоди ҷорӣ ба нав иваз кунед. танҳо имконнопазир аст!). Пеш аз он ки мо оркестр дошта бошем, ман як маротиба маҷбур будам, ки ҳамаи инро дастӣ иҷро кунам. Устои кӯҳна аз сабаби контролери адаптек овезон буд; он тақрибан 10 ғулом дошт. Ба ман лозим буд, ки VIP-ро аз оғо ба яке аз ғуломон интиқол диҳам ва ҳамаи ғуломони дигарро ба он дубора пайваст кунам. Чанд консол кушодам, чанд фармони ҳамзамон даромадам... Маҷбур шудам, ки то соати 3-и шаб интизор шавам, борро аз ҳама ба ғайр аз ду банда гирифтам, мошини якумро аз ду усто созам, мошини дуюмро фавран васл кунам. ба он, пас ҳамаи ғуломони дигарро ба устои нав пайваст кунед ва бори дигарро баргардонед. Умуман, даҳшатнок ...

Вақте ки он ба ҳолати нокомӣ мегузарад, Orchestrator чӣ гуна кор мекунад? Инро мисоли вазъияте, ки мо мехоҳем усторо нисбат ба ҳозираамон мошини пуриқтидортар ва замонавӣ гардонем, хеле осонтар нишон медиҳад.

Оркестр барои MySQL: чаро шумо наметавонед бе он лоиҳаи ба хатогиҳо тобовар созед
Дар расм мобайни раванд нишон дода шудааст. То ин дам чй корхо анчом дода шудаанд? Мо гуфтем, ки мо мехоҳем як ғуломро устои нав созем, Оркестр ба танҳо ба он пайваст кардани ҳамаи ғуломҳои дигарро оғоз кард ва устои нав ҳамчун мошини транзитӣ амал мекунад. Бо ин схема, ягон хатогӣ рух намедиҳад, ҳама ғуломон кор мекунанд, Orchestrator VIP-ро аз устоди кӯҳна хориҷ мекунад, онро ба нав интиқол медиҳад, танҳо read_only=0 месозад ва устоди кӯҳнаро фаромӯш мекунад. Ҳама! Вақти қатъии хидмати мо вақти интиқоли VIP мебошад, ки 2-3 сонияро ташкил медиҳад.

Ин ҳама барои имрӯз аст, ташаккур ба ҳама. Ба наздикӣ мақолаи дуюм дар бораи Оркестр хоҳад буд. Дар фильми машхури советии «Гараж» як персонаж гуфта буд: «Ман бо у ба разведка намеравам!». Пас, оркестр, ман бо шумо ба разведка мерафтам!

Манбаъ: will.com

Илова Эзоҳ