Оркестр ва VIP ҳамчун ҳалли HA барои кластери MySQL

Дар Citymobil мо пойгоҳи додаҳои MySQL-ро ҳамчун нигаҳдории доимии маълумот истифода мебарем. Мо якчанд кластерҳои пойгоҳи додаҳо барои хидматҳо ва мақсадҳои гуногун дорем.

Мавҷудияти доимии усто нишондиҳандаи муҳими кори тамоми система ва қисмҳои алоҳидаи он мебошад. Барқароркунии худкори кластер дар сурати нокомии усто вақти вокуниш ба ҳодиса ва бекористии системаро хеле кам мекунад. Дар ин мақола, ман тарҳи дастрасии баландро (HA) барои кластери MySQL дар асоси Оркестри MySQL ва суроғаҳои 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 имконнопазир буд, мо давра ба давра ба замина фиристодани дархостро оғоз мекунем ARP ройгон. Ин намуди дархост/ҷавоб ба шумо имкон медиҳад, ки ҷадвали харитасозии суроғаҳои IP ва MAC-ро дар коммутаторҳои пайвастшуда навсозӣ кунед ва ба ин васила шуморо огоҳ созад, ки VIP-и мо кӯчонида шудааст. Ин эҳтимолиятро кам мекунад split brain хангоми баргаштани устои кухансол.
  5. Ҳама пайвастҳои нав фавран ба устои нав равона карда мешаванд. Пайвастҳои кӯҳна ноком мешаванд ва зангҳои такрорӣ ба пойгоҳи додаҳо дар сатҳи барнома анҷом дода мешаванд.

Сервер дар реҷаи муқаррарӣ кор мекунад, нокомӣ дар сатҳи DBMS рух дод

Алгоритм ба ҳолати қаблӣ монанд аст: навсозии топология ва оғози раванди барқарорсозӣ. Азбаски сервер дастрас аст, мо VIP-ро дар устои кӯҳна бомуваффақият мебарорем, онро ба нав интиқол медиҳем ва якчанд дархостҳои ARP мефиристем. Бозгашти эҳтимолии устои кӯҳна набояд ба кластери барқароршуда ва ба кори барнома таъсир расонад.

Дигар мушкилот

Нокомии репликаҳо ё устоҳои миёнарав роҳбарӣ намекунад ба амалҳои автоматӣ ва дахолати дастӣ талаб мекунад.

Интерфейси шабакаи виртуалӣ ҳамеша муваққатан илова карда мешавад, яъне пас аз бозоғозкунии сервер, VIP ба таври худкор таъин карда намешавад. Ҳар як мисоли пойгоҳи додаҳо ба таври нобаёнӣ дар ҳолати танҳо барои хондан оғоз мешавад, оркестр ба таври худкор устоди навро ба навиштан иваз мекунад ва кӯшиш мекунад насб кунад read only дар болои устоди кӯҳна. Ин амалҳо ба кам кардани эҳтимолият нигаронида шудаанд split brain.

Дар ҷараёни барқарорсозӣ мушкилот метавонад ба миён ояд, ки ба ғайр аз абзорҳои стандартии мониторинг бояд тавассути UI оркестр огоҳ карда шавад. Мо бо илова кардани ин хусусият REST API-ро васеъ кардем (PR ҳоло мавриди баррасӣ қарор дорад).

Диаграммаи умумии ҳалли HA дар зер оварда шудааст.

Оркестр ва VIP ҳамчун ҳалли HA барои кластери MySQL

Интихоби устоди нав

Оркестр ба қадри кофӣ оқил аст ва кӯшиш мекунад, ки интихоб кунад нусхаи мувофиқтарин ҳамчун устоди нав мувофиқи меъёрҳои зерин:

  • реплика аз усто акиб мемонад;
  • Версияи 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 реплика ҳамаи транзаксияҳои татбиқнашуда аз Сабти релеро анҷом надиҳад. Мо ин хосиятро барои пешгирӣ кардани аз даст додани транзаксияҳо истифода мебарем, вақте ки ҳама репликаҳои номзадҳо паси сар мешаванд.
  • InstancePollSeconds — басомади сохтан ва нав кардани топология.
  • RecoveryPollSeconds — басомади тахлили топология. Агар мушкилот ошкор карда шавад, барқарорсозии топология оғоз мешавад. Ин доимӣ, баробар ба 1 сония.

Ҳар як гиреҳи кластер аз ҷониби оркестр як маротиба пурсиш карда мешавад InstancePollSeconds сония Вақте ки мушкилот ошкор карда мешавад, ҳолати кластер маҷбур карда мешавад нав карда шудааст, ва он гоҳ қарори ниҳоӣ оид ба барқарорсозӣ қабул карда мешавад. Бо озмоиш бо параметрҳои гуногуни пойгоҳи додаҳо ва оркестр, мо тавонистем посух ва вақти барқароркуниро то 30 сония кам кунем.

Пойгоҳи санҷишӣ

Мо озмоиши нақшаи HA-ро бо таҳияи як маҳаллӣ оғоз кардем курсии озмоишӣ ва татбиқи минбаъда дар муҳити озмоишӣ ва истеҳсолӣ. Стенди маҳаллӣ дар асоси Docker пурра автоматӣ карда шудааст ва ба шумо имкон медиҳад, ки конфигуратсияи оркестр ва шабакаро таҷриба кунед, кластерро аз 2-3 сервер то даҳҳо миқёс кунед ва машқҳоро дар муҳити бехатар гузаронед.

Дар давоми машқҳо, мо яке аз усулҳои тақлидкунии мушкилотро интихоб мекунем: фавран устодро бо истифода аз тирандозӣ кунед kill -9, нармӣ равандро қатъ кунед ва серверро қатъ кунед (docker-compose stop), тақлид кардани мушкилоти шабака бо истифода аз iptables -j REJECT ё iptables -j DROP. Мо интизори натиҷаҳои зеринро интизорем:

  • оркестр мушкилотро бо устод ошкор мекунад ва топологияро на бештар аз 10 сония нав мекунад;
  • тартиби барқарорсозӣ ба таври худкор оғоз мешавад: конфигуратсияи шабака тағир меёбад, нақши устод ба нусхабардорӣ мегузарад, топология аз нав сохта мешавад;
  • устои нав қобили навиштан мегардад, дар ҷараёни барқарорсозӣ нусхаҳои зинда гум намешаванд;
  • маълумот ба устоди нав навишта ва такрор карда мешавад;
  • Давомнокии умумии барқарорсозӣ на бештар аз 30 сонияро ташкил медиҳад.

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

натиҷаҳои

Саломатии гиреҳи асосии системаи нигаҳдорӣ яке аз ҳадафҳои асосии SRE ва гурӯҳи амалиётӣ мебошад. Татбиқи оркестр ва ҳалли HA дар асоси VIP ба мо имкон дод, ки ба натиҷаҳои зерин ноил гардем:

  • ошкоркунии боэътимоди мушкилот бо топологияи кластери базаи маълумот;
  • вокуниши автоматӣ ва зуд ба ҳодисаҳои марбут ба усто, кам кардани бекористии система.

Бо вуҷуди ин, ҳалли мушкилот ва нуқсонҳои худро дорад:

  • миқёси нақшаи HA ба якчанд марказҳои додаҳо як шабакаи ягонаи L2 байни онҳо талаб мекунад;
  • Пеш аз таъин кардани VIP ба устоди нав, мо бояд онро дар устои кӯҳна озод кунем. Раванд пайдарпай аст, ки вақти барқароршавиро зиёд мекунад;
  • озод кардани VIP дастрасии SSH ба сервер ё ягон усули дигари занги расмиёти дурдастро талаб мекунад. Азбаски сервер ё махзани маълумот бо мушкилоте дучор мешавад, ки боиси раванди барқарорсозӣ гардид, мо боварӣ дошта наметавонем, ки несткунии VIP бомуваффақият анҷом меёбад. Ва ин метавонад ба пайдоиши ду сервер бо як суроғаи IP виртуалӣ ва мушкилот оварда расонад split brain.

Гурехтан split brain, шумо метавонед усулро истифода баред СТОНИТ («Гиреҳи дигарро дар сари сараш тир диҳед»), ки гиреҳи мушкилотро комилан ҷудо мекунад ё ғайрифаъол мекунад. Роҳҳои дигари татбиқи дастрасии баланди кластер вуҷуд доранд: маҷмӯи VIP ва DNS, кашфи хидматҳо ва хидматҳои прокси, такрори синхронӣ ва усулҳои дигаре, ки нуқсонҳо ва бартариҳои худро доранд.

Ман дар бораи равиши мо барои эҷоди кластери бебозгашти MySQL сӯҳбат кардам. Татбиқи он осон аст ва дар шароити кунунӣ сатҳи қобили эътимодро таъмин мекунад. Азбаски тамоми система дар маҷмӯъ ва махсусан инфрасохтор рушд мекунад, ин равиш бешубҳа таҳаввул хоҳад кард.

Манбаъ: will.com

Илова Эзоҳ