Дар Citymobil мо пойгоҳи додаҳои MySQL-ро ҳамчун нигаҳдории доимии маълумот истифода мебарем. Мо якчанд кластерҳои пойгоҳи додаҳо барои хидматҳо ва мақсадҳои гуногун дорем.
Мавҷудияти доимии усто нишондиҳандаи муҳими кори тамоми система ва қисмҳои алоҳидаи он мебошад. Барқароркунии худкори кластер дар сурати нокомии усто вақти вокуниш ба ҳодиса ва бекористии системаро хеле кам мекунад. Дар ин мақола, ман тарҳи дастрасии баландро (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
.
Биёед мушкилоти имконпазирро бо устоди худ бубинем ва тасаввур кунед, ки механизми барқарорсозии автоматӣ чӣ гуна бояд кор кунад.
Пайвастшавӣ ба шабака ба устод нопадид шуд ё дар сатҳи сахтафзор мушкилот ба миён омад ва сервер дастнорас аст
- Оркестратор топологияи кластерро навсозӣ мекунад, ҳар як реплика хабар медиҳад, ки устод дастрас нест. Оркестр ба раванди интихоби нусхаи мувофиқ барои нақши устоди нав оғоз мекунад ва барқароркуниро оғоз мекунад.
- Мо кӯшиш мекунем, ки VIP-ро аз устоди кӯҳна хориҷ кунем - бе муваффақият.
- Реплика ба нақши устод мегузарад. Топология аз нав сохта мешавад.
- Илова кардани интерфейси нави шабакавӣ бо VIP. Азбаски нест кардани VIP имконнопазир буд, мо давра ба давра ба замина фиристодани дархостро оғоз мекунем ARP ройгон. Ин намуди дархост/ҷавоб ба шумо имкон медиҳад, ки ҷадвали харитасозии суроғаҳои IP ва MAC-ро дар коммутаторҳои пайвастшуда навсозӣ кунед ва ба ин васила шуморо огоҳ созад, ки VIP-и мо кӯчонида шудааст. Ин эҳтимолиятро кам мекунад
split brain
хангоми баргаштани устои кухансол. - Ҳама пайвастҳои нав фавран ба устои нав равона карда мешаванд. Пайвастҳои кӯҳна ноком мешаванд ва зангҳои такрорӣ ба пойгоҳи додаҳо дар сатҳи барнома анҷом дода мешаванд.
Сервер дар реҷаи муқаррарӣ кор мекунад, нокомӣ дар сатҳи DBMS рух дод
Алгоритм ба ҳолати қаблӣ монанд аст: навсозии топология ва оғози раванди барқарорсозӣ. Азбаски сервер дастрас аст, мо VIP-ро дар устои кӯҳна бомуваффақият мебарорем, онро ба нав интиқол медиҳем ва якчанд дархостҳои ARP мефиристем. Бозгашти эҳтимолии устои кӯҳна набояд ба кластери барқароршуда ва ба кори барнома таъсир расонад.
Дигар мушкилот
Нокомии репликаҳо ё устоҳои миёнарав роҳбарӣ намекунад ба амалҳои автоматӣ ва дахолати дастӣ талаб мекунад.
Интерфейси шабакаи виртуалӣ ҳамеша муваққатан илова карда мешавад, яъне пас аз бозоғозкунии сервер, VIP ба таври худкор таъин карда намешавад. Ҳар як мисоли пойгоҳи додаҳо ба таври нобаёнӣ дар ҳолати танҳо барои хондан оғоз мешавад, оркестр ба таври худкор устоди навро ба навиштан иваз мекунад ва кӯшиш мекунад насб кунад read only
дар болои устоди кӯҳна. Ин амалҳо ба кам кардани эҳтимолият нигаронида шудаанд split brain
.
Дар ҷараёни барқарорсозӣ мушкилот метавонад ба миён ояд, ки ба ғайр аз абзорҳои стандартии мониторинг бояд тавассути UI оркестр огоҳ карда шавад. Мо бо илова кардани ин хусусият REST API-ро васеъ кардем (
Диаграммаи умумии ҳалли HA дар зер оварда шудааст.
Интихоби устоди нав
Оркестр ба қадри кофӣ оқил аст ва кӯшиш мекунад, ки интихоб кунад
- реплика аз усто акиб мемонад;
- Версияи MySQL аз устод ва нусхабардорӣ;
- навъи такрорӣ (RBR, SBR ё омехта);
- ҷойгиршавӣ дар марказҳои додаҳои якхела ё гуногун;
- дастрас аст
errant GTID
— амалиётҳое, ки дар нусхабардорӣ анҷом дода шуда, дар усто нестанд; - коидахои интихоби одат низ ба назар гирифта мешаванд.
На ҳар як ишора номзади беҳтарин барои устод аст. Масалан, репликаро барои нусхабардории маълумот истифода бурдан мумкин аст ё сервер конфигуратсияи сахтафзори заифтар дорад. Оркестр
Ҷавоб ва вақти барқароршавӣ
Дар сурати рух додани ҳодиса, кам кардани бекористии система муҳим аст, аз ин рӯ биёед параметрҳои MySQL-ро баррасӣ кунем, ки ба эҷод ва навсозии топологияи кластер аз ҷониби оркестр таъсир мерасонанд:
— шумораи сонияҳое, ки дар давоми он реплика мунтазири гирифтани маълумоти нав ё сигнали тапиши дил аз усто пеш аз он ки пайвастшавӣ ҳамчун гумшуда ва дубора васлшуда эътироф шавад. Чӣ қадаре ки арзиш паст бошад, реплика ҳамон қадар зудтар муайян карда метавонад, ки иртибот бо устод вайрон шудааст. Мо ин арзишро ба 5 сония муқаррар кардем.slave_net_timeout
— шумораи сонияҳо байни кӯшишҳои пайвастшавӣ. Дар сурати пайдо шудани мушкилоти шабака, арзиши пасти ин параметр имкон медиҳад, ки зуд пайваст карда шавад ва аз оғози раванди барқарорсозии кластер монеъ шавад. Арзиши тавсияшаванда 1 сония аст.MASTER_CONNECT_RETRY
MASTER_RETRY_COUNT
— шумораи максималии кӯшишҳои пайвастшавӣ.MASTER_HEARTBEAT_PERIOD
— фосила дар сония, ки баъд аз он усто сигнали тапиши дил мефиристад. Пешфарз ба нисфи арзишslave_net_timeout
.
Вариантҳои оркестр:
DelayMasterPromotionIfSQLThreadNotUpToDate
- агар баробар бошадtrue
, пас нақши асосӣ дар репликаи номзад татбиқ карда намешавад, то даме ки риштаи SQL реплика ҳамаи транзаксияҳои татбиқнашуда аз Сабти релеро анҷом надиҳад. Мо ин хосиятро барои пешгирӣ кардани аз даст додани транзаксияҳо истифода мебарем, вақте ки ҳама репликаҳои номзадҳо паси сар мешаванд.InstancePollSeconds
— басомади сохтан ва нав кардани топология.RecoveryPollSeconds
— басомади тахлили топология. Агар мушкилот ошкор карда шавад, барқарорсозии топология оғоз мешавад. Индоимӣ , баробар ба 1 сония.
Ҳар як гиреҳи кластер аз ҷониби оркестр як маротиба пурсиш карда мешавад InstancePollSeconds
сония Вақте ки мушкилот ошкор карда мешавад, ҳолати кластер маҷбур карда мешавад
Пойгоҳи санҷишӣ
Мо озмоиши нақшаи HA-ро бо таҳияи як маҳаллӣ оғоз кардем
Дар давоми машқҳо, мо яке аз усулҳои тақлидкунии мушкилотро интихоб мекунем: фавран устодро бо истифода аз тирандозӣ кунед 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
, шумо метавонед усулро истифода баред
Ман дар бораи равиши мо барои эҷоди кластери бебозгашти MySQL сӯҳбат кардам. Татбиқи он осон аст ва дар шароити кунунӣ сатҳи қобили эътимодро таъмин мекунад. Азбаски тамоми система дар маҷмӯъ ва махсусан инфрасохтор рушд мекунад, ин равиш бешубҳа таҳаввул хоҳад кард.
Манбаъ: will.com