Кластери Elasticsearch 200 TB+

Кластери Elasticsearch 200 TB+

Бисёр одамон бо Elasticsearch мубориза мебаранд. Аммо вақте ки шумо мехоҳед онро барои нигоҳ доштани гузоришҳо "дар ҳаҷми махсусан калон" истифода баред, чӣ мешавад? Ва оё эҳсоси нокомии яке аз якчанд марказҳои додаҳо низ бедард аст? Шумо бояд чӣ гуна меъморӣ созед ва ба кадом домҳо дучор хоҳед шуд?

Мо дар Одноклассники тасмим гирифтем, ки барои ҳалли масъалаи идоракунии гузоришҳо аз elasticsearch истифода барем ва ҳоло мо таҷрибаи худро бо Ҳабр мубодила мекунем: ҳам дар бораи меъморӣ ва ҳам дар бораи домҳо.

Ман Петр Зайцев ҳастам, дар Одноклассники ба ҳайси маъмури система кор мекунам. Пеш аз он, ман инчунин администратор будам, бо Manticore Search, Sphinx Search, Elasticsearch кор мекардам. Шояд, агар ҷустуҷӯи дигаре пайдо шавад, ман эҳтимол бо он кор мекунам. Ман инчунин дар як қатор лоиҳаҳои кушодаасос ба таври ихтиёрӣ иштирок мекунам.

Вақте ки ман ба Одноклассники омадам, дар мусоҳиба бепарво гуфтам, ки метавонам бо Elasticsearch кор кунам. Пас аз он ки ман онро дарк кардам ва баъзе вазифаҳои оддиро иҷро кардам, ба ман вазифаи калон оид ба ислоҳоти системаи идоракунии гузоришҳо, ки дар он вақт мавҷуд буд, гузошта шуд.

талаботи

Талаботи системавӣ ба таври зерин таҳия карда шуданд:

  • Graylog бояд ҳамчун фронт истифода мешуд. Азбаски ширкат аллакай таҷрибаи истифодаи ин маҳсулотро дошт, барномасозон ва озмоишгарон онро медонистанд, барои онҳо шинос ва қулай буд.
  • Ҳаҷми маълумот: ба ҳисоби миёна 50-80 ҳазор паём дар як сония, аммо агар чизе вайрон шавад, трафик бо ҳеҷ чиз маҳдуд намешавад, он метавонад дар як сония 2-3 миллион сатр бошад.
  • Ҳангоми муҳокима бо мизоҷон талабот оид ба суръати коркарди дархостҳои ҷустуҷӯ, мо фаҳмидем, ки шакли маъмулии истифодаи чунин система чунин аст: одамон дар давоми ду рӯзи охир сабтҳои дархости худро меҷӯянд ва намехоҳанд беш аз як соат интизор шаванд. дуюм барои натиҷаи дархости таҳияшуда.
  • Маъмурон исрор меварзиданд, ки система дар ҳолати зарурӣ ба осонӣ миқёспазир бошад ва аз онҳо талаб накунад, ки чӣ тавр кор кардани он амиқтар шавад.
  • Ҳамин тавр, ягона вазифаи нигоҳдорӣ, ки ин системаҳо мунтазам талаб мекунанд, тағир додани баъзе сахтафзорҳост.
  • Илова бар ин, Одноклассники як анъанаи хуби техникӣ дорад: ҳама хидмате, ки мо оғоз мекунем, бояд аз шикасти маркази додаҳо (ногаҳон, ғайринақшагирӣ ва комилан дар ҳама вақт) наҷот ёбад.

Талаботи охирин дар татбики ин лоиха ба мо аз хама бештар харочот дод, ки ман дар бораи он муфассалтар сухан меронам.

Чоршанбе

Мо дар чаҳор маркази додаҳо кор мекунем, дар ҳоле ки гиреҳҳои додаҳои Elasticsearch танҳо дар се ҷойгир карда мешаванд (бо як қатор сабабҳои ғайри техникӣ).

Ин чор маркази додаҳо тақрибан 18 ҳазор манбаъҳои гуногуни гузоришҳоро дар бар мегиранд - сахтафзор, контейнерҳо, мошинҳои виртуалӣ.

Хусусияти муҳим: кластер дар контейнерҳо оғоз меёбад Подман на дар машинахои физикй, балки дар маҳсулоти абрии шахсии як абрӣ. Ба контейнерҳо 2 ядрои шабеҳи 2.0Ghz v4 кафолат дода мешавад, ки имкони коркарди ядроҳои боқимонда дар сурати бекор буданро доранд.

Ба ибораи дигар:

Кластери Elasticsearch 200 TB+

Топология

Ман дар аввал шакли умумии ҳалли онро дидам:

  • 3-4 VIP дар паси сабти A-и домени Graylog ҷойгиранд, ин суроғаест, ки гузоришҳо ба он фиристода мешаванд.
  • ҳар як VIP мувозинати LVS аст.
  • Пас аз он, гузоришҳо ба батареяи Graylog мераванд, баъзе маълумотҳо дар формати GELF, баъзеҳо дар формати syslog мебошанд.
  • Он гоҳ ҳамаи ин ба як батареяи ҳамоҳангсозони Elasticsearch дар қисмҳои калон навишта мешавад.
  • Ва онҳо, дар навбати худ, ба гиреҳҳои дахлдори додаҳо дархостҳои навиштан ва хондан мефиристанд.

Кластери Elasticsearch 200 TB+

Терминология

Шояд на ҳама истилоҳотро ба таври муфассал дарк кунанд, аз ин рӯ мехостам дар бораи он каме таваққуф кунам.

Elasticsearch дорои якчанд намуди гиреҳҳо - мастер, координатор, гиреҳи додаҳо мебошад. Ду намуди дигар барои трансформатсияҳои гуногуни гузоришҳо ва иртибот байни кластерҳои гуногун мавҷуданд, аммо мо танҳо онҳоеро истифода бурдем.

усто
Он ба ҳамаи гиреҳҳои дар кластер мавҷудбуда пинг мекунад, харитаи кластерии муосирро нигоҳ медорад ва онро байни гиреҳҳо тақсим мекунад, мантиқи рӯйдодҳоро коркард мекунад ва намудҳои гуногуни хонагии кластерро иҷро мекунад.

Ҳамоҳангсози
Як вазифаи ягонаро иҷро мекунад: дархостҳои хондан ё навиштанро аз муштариён қабул мекунад ва ин трафикро масир мекунад. Дар сурати мавҷуд будани дархости навиштан, эҳтимолан, он аз устод мепурсад, ки кадом пораи индекси мувофиқро бояд дар он ҷойгир кунад ва дархостро минбаъд бозгардонад.

Гиреҳи маълумот
Маълумотро нигоҳ медорад, дархостҳои ҷустуҷӯиро, ки аз берун ворид мешаванд, иҷро мекунад ва дар пораҳои дар он ҷойгиршуда амал мекунад.

Грейлог
Ин чизе монанди омезиши Кибана бо Logstash дар стек ELK аст. Graylog ҳам UI ва ҳам лӯлаи коркарди логро муттаҳид мекунад. Дар зери сарпӯш, Graylog Kafka ва Zookeeper -ро идора мекунад, ки пайвастшавиро ба Graylog ҳамчун кластер таъмин мекунанд. Graylog метавонад сабтҳоро (Кафка) кэш кунад, агар Elasticsearch дастрас набошад ва дархостҳои номуваффақи хондан ва навиштанро такрор кунад, гузоришҳоро мувофиқи қоидаҳои муайян гурӯҳбандӣ ва қайд кунад. Мисли Logstash, Graylog дорои функсияи тағир додани сатрҳо пеш аз навиштани онҳо ба Elasticsearch мебошад.

Илова бар ин, Graylog дорои кашфи хидматрасонии дарунсохтест, ки дар асоси як гиреҳи дастраси Elasticsearch имкон медиҳад, ки тамоми харитаи кластерро ба даст оранд ва онро бо теги мушаххас филтр кунанд, ки имкон медиҳад дархостҳо ба контейнерҳои мушаххас равона карда шаванд.

Ба таври визуалӣ он чунин менамояд:

Кластери Elasticsearch 200 TB+

Ин скриншот аз як мисоли мушаххас аст. Дар ин ҷо мо дар асоси дархости ҷустуҷӯ гистограмма месозем ва сатрҳои мувофиқро нишон медиҳем.

Нишондиҳандаҳо

Бозгашт ба меъмории система, ман мехостам муфассалтар дар бораи он ки мо модели индексро чӣ гуна сохтаем, то ки ҳамааш дуруст кор кунад.

Дар диаграммаи боло, ин сатҳи пасттарин аст: гиреҳҳои додаҳои Elasticsearch.

Индекс як воҳиди бузурги виртуалӣ аст, ки аз пораҳои Elasticsearch иборат аст. Дар худи худ, ҳар як пора ҷуз як шохиси Lucene чизе нест. Ва ҳар як шохиси Lucene, дар навбати худ, аз як ё якчанд сегмент иборат аст.

Кластери Elasticsearch 200 TB+

Ҳангоми тарҳрезӣ, мо фаҳмидем, ки барои қонеъ кардани талаботи суръати хониш дар миқдори зиёди додаҳо, мо бояд ин маълумотро дар гиреҳҳои додаҳо баробар паҳн кунем.

Ин ба он оварда расонд, ки шумораи пораҳо дар як индекс (бо репликаҳо) бояд ба миқдори гиреҳҳои додаҳо баробар бошад. Аввалан, барои таъмини омили такрорӣ ба ду баробар аст (яъне мо метавонем нисфи кластерро аз даст диҳем). Ва, дуюм, барои коркарди дархостҳои хондан ва навиштан дар ҳадди аққал нисфи кластер.

Мо аввал мухлати нигахдории онро 30 руз муайян кардем.

Тақсимоти пораҳоро ба таври графикӣ ба таври зерин ифода кардан мумкин аст:

Кластери Elasticsearch 200 TB+

Тамоми росткунҷаи хокистарии торик индекс аст. Майдони сурхи чапи он пораи ибтидоӣ, аввалин дар индекс аст. Ва майдони кабуд як пораи такрорист. Онҳо дар марказҳои гуногуни додаҳо ҷойгиранд.

Вақте ки мо як пораи дигарро илова мекунем, он ба маркази маълумоти сеюм меравад. Ва, дар ниҳоят, мо ин сохторро ба даст меорем, ки имкон медиҳад DC-ро бидуни гум кардани мутобиқати маълумот аз даст диҳем:

Кластери Elasticsearch 200 TB+

Ротатсияи индексҳо, яъне. эҷод кардани индекси нав ва аз ҳама кӯҳнатаринро нест карда, онро ба 48 соат баробар кардем (мувофиқи шакли истифодабарии индекс: 48 соати охир бештар ҷустуҷӯ карда мешавад).

Ин фосилаи гардиши индекс бо сабабҳои зерин вобаста аст:

Вақте ки дархости ҷустуҷӯ ба гиреҳи мушаххаси додаҳо мерасад, пас аз нуқтаи назари кор, ҳангоми пурсиш аз як порча фоидаовартар аст, агар андозаи он бо андозаи гиреҳи гиреҳ муқоиса карда шавад. Ин ба шумо имкон медиҳад, ки қисми "гарм"-и индексро дар тӯда нигоҳ доред ва ба он зуд дастрас шавед. Вақте ки шумораи зиёди "қисмҳои гарм" вуҷуд дорад, суръати ҷустуҷӯи индекс паст мешавад.

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

Барои таъмини таъхири зарурии ҷустуҷӯ, мо тасмим гирифтем, ки SSD-ро истифода барем. Барои зуд коркарди дархостҳо, мошинҳое, ки ин контейнерҳоро ҷойгир мекарданд, бояд ҳадди аққал 56 ядро ​​дошта бошанд. Рақами 56 ҳамчун арзиши шартӣ кофӣ интихоб карда шуд, ки шумораи риштаҳоеро, ки Elasticsearch ҳангоми кор тавлид мекунад, муайян мекунад. Дар Elasitcsearch, бисёр параметрҳои ҳавзи ришта мустақиман аз шумораи ядроҳои мавҷудбуда вобастаанд, ки дар навбати худ ба миқдори зарурии гиреҳҳо дар кластер мувофиқи принсипи "камтар ядроҳо - гиреҳҳои бештар" мустақиман таъсир мерасонад.

Дар натиҷа, мо дарёфтем, ки ба ҳисоби миёна як порча тақрибан 20 гигабайт вазн дорад ва дар як индекс 1 шард мавҷуд аст. Мувофиқи он, агар мо онҳоро дар ҳар 360 соат як маротиба гардон кунем, пас мо 48 ададро дорем. Ҳар як индекс маълумот барои 15 рӯзро дар бар мегирад.

Схемаҳои навиштан ва хондани маълумот

Биёед бифаҳмем, ки маълумот дар ин система чӣ гуна сабт карда мешавад.

Фарз мекунем, ки ягон дархост аз Грейлог ба координатор меояд. Масалан, мо мехохем 2—3 хазор каторро индексация кунем.

Ҳамоҳангсоз, ки дархости Грейлогро гирифтааст, аз устод мепурсад: "Дар дархости индексатсия мо махсусан индексро нишон додем, аммо дар кадом порча навиштани он нишон дода нашудааст."

Устод ҷавоб медиҳад: "Ин маълумотро ба шарди рақами 71 нависед" ва пас аз он бевосита ба гиреҳи додаҳои дахлдор, ки дар он ҷо 71-и ибтидоӣ ҷойгир аст, фиристода мешавад.

Пас аз он, сабти транзаксия ба реплика-шард, ки дар маркази додаҳои дигар ҷойгир аст, такрор карда мешавад.

Кластери Elasticsearch 200 TB+

Дархости ҷустуҷӯ аз Graylog ба ҳамоҳангсоз меояд. Ҳамоҳангсоз онро мувофиқи индекс масир мегардонад, дар ҳоле ки Elasticsearch дархостҳоро байни шарди ибтидоӣ ва реплика-шард бо истифода аз принсипи round-robin тақсим мекунад.

Кластери Elasticsearch 200 TB+

180 гиреҳ нобаробар вокуниш нишон медиҳанд ва дар ҳоле ки онҳо посух медиҳанд, ҳамоҳангсоз маълумотеро ҷамъ мекунад, ки аз ҷониби гиреҳҳои тезтари додаҳо аллакай "туф карда шудаанд". Пас аз ин, вақте ки ҳама маълумот расидаанд, ё дархост ба мӯҳлат расидааст, он ҳама чизро мустақиман ба муштарӣ медиҳад.

Ин тамоми система ба ҳисоби миёна дархостҳои ҷустуҷӯиро дар тӯли 48 соати охир дар 300-400 мс коркард мекунад, ба истиснои он дархостҳо бо аломати пешфарз.

Гулҳо бо Elasticsearch: Танзимоти Java

Кластери Elasticsearch 200 TB+

Барои он ки ҳамааш тавре кор кунад, ки мо дар аввал мехостем, мо муддати хеле дарозро барои ислоҳи навъҳои зиёди чизҳо дар кластер сарф кардем.

Қисми якуми мушкилоти кашфшуда ба тарзи пешфарз танзим кардани Java дар Elasticsearch алоқаманд буд.

Мушкилоти як
Мо шумораи хеле зиёди гузоришҳоро дидем, ки дар сатҳи Lucene, вақте ки корҳои пасзамина иҷро мешаванд, сегменти Lucene якҷоя бо хатогӣ ноком мешавад. Дар айни замон, дар гузоришҳо маълум буд, ки ин хатои OutOfMemoryError буд. Мо аз телеметрия дидем, ки хип озод аст ва маълум набуд, ки чаро ин амалиёт барбод меравад.

Маълум шуд, ки якҷояшавии индекси Люсен берун аз хип ба амал меояд. Ва контейнерҳо аз ҷиҳати захираҳои истеъмолшуда хеле маҳдуданд. Танҳо тӯда метавонад ба ин захираҳо мувофиқат кунад (қимати heap.size тақрибан ба RAM баробар буд) ва баъзе амалиётҳои берун аз тӯда бо хатои тақсимоти хотира дучор меоянд, агар бо ягон сабаб онҳо ба ~500МБ, ки пеш аз маҳдудият боқӣ мондаанд, мувофиқат накунанд.

Ислоҳ хеле ночиз буд: миқдори RAM барои контейнер зиёд шуд, пас аз он мо фаромӯш кардем, ки мо ҳатто чунин мушкилот доштем.

Масъалаи дуюм
Пас аз 4-5 рӯзи ба кор андохтани кластер, мо мушоҳида кардем, ки гиреҳҳои додаҳо давра ба давра аз кластер меафтанд ва пас аз 10-20 сония ба он ворид мешаванд.

Вақте ки мо ба фаҳмидани он шурӯъ кардем, маълум шуд, ки ин хотираи ғайричашмдошт дар Elasticsearch ба ҳеҷ ваҷҳ идора карда намешавад. Вақте ки мо ба контейнер хотираи бештар додем, мо тавонистем ҳавзҳои буферии мустақимро бо маълумоти гуногун пур кунем ва он танҳо пас аз кушодани GC-и возеҳ аз Elasticsearch тоза карда шуд.

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

Ҳалли чунин буд: мо қобилияти Java-ро барои истифодаи қисми зиёди хотираи берун аз тӯда барои ин амалҳо маҳдуд кардем. Мо онро бо 16 гигабайт маҳдуд кардем (-XX:MaxDirectMemorySize=16г), кафолат дод, ки GC-и возеҳ зуд-зуд даъват карда шавад ва тезтар коркард карда шавад ва ба ин васила кластерро дигар ноором накунем.

Масъалаи сеюм
Агар шумо фикр кунед, ки мушкилот бо "дар лаҳзаҳои ғайричашмдошт аз кластер баромадани гиреҳҳо" ба охир расидаанд, шумо хато мекунед.

Вақте ки мо корро бо индексҳо танзим кардем, мо mmapf-ро интихоб кардем кам кардани вақти ҷустуҷӯ дар пораҳои тару тоза бо сегментатсияи бузург. Ин хеле хато буд, зеро ҳангоми истифодаи mmapfs файл ба RAM харита карда мешавад ва мо бо файли хариташуда кор мекунем. Аз ин рӯ, маълум мешавад, ки вақте ки GC кӯшиш мекунад, ки риштаҳоро дар барнома қатъ кунад, мо муддати тӯлонӣ ба нуқтаи бехатарӣ меравем ва дар роҳ ба он, барнома посух додан ба дархостҳои устодро дар бораи зинда будани он қатъ мекунад. . Мувофиқи он, устод боварӣ дорад, ки гиреҳ дигар дар кластер мавҷуд нест. Пас аз ин, пас аз 5-10 сония, коллектори ахлот кор мекунад, гиреҳ ба кор меояд, дубора ба кластер ворид мешавад ва ба оғоз кардани пораҳо шурӯъ мекунад. Ин ҳама ба «истеҳсоли сазовори мо» хеле монанд буд ва барои ягон чизи ҷиддӣ мувофиқ набуд.

Барои аз ин рафтор халос шудан, мо аввал ба niofs стандартӣ гузаштем ва баъд, вақте ки мо аз версияи панҷуми Elastic ба шашум кӯчидем, гибридҳоро санҷидем, ки дар он ин мушкилот такрор нашуд. Шумо метавонед дар бораи намудҳои нигоҳдорӣ бештар хонед дар ин ҷо.

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

Баъзан ҳамоҳангсозони мо ба Full GC мерафтанд, одатан пас аз хӯроки нисфирӯзӣ ва ҳеҷ гоҳ аз он ҷо барнагаштанд. Дар айни замон, ҳангоми сабти таъхири GC чунин менамуд: ҳама чиз хуб аст, хуб, хуб ва баъд ногаҳон ҳама чиз хеле бад мешавад.

Дар аввал мо фикр мекардем, ки мо як корбари бад дорем, ки як навъ дархостеро оғоз мекунад, ки координаторро аз ҳолати корӣ берун кардааст. Мо муддати тӯлонӣ дархостҳоро сабт кардем ва кӯшиш кардем, ки чӣ рӯй дода истодааст.

Дар натиҷа, маълум шуд, ки дар айни замон, вақте ки корбар дархости бузургро оғоз мекунад ва он ба координатори мушаххаси Elasticsearch мерасад, баъзе гиреҳҳо нисбат ба дигарон дарозтар ҷавоб медиҳанд.

Ва ҳангоме ки ҳамоҳангсоз мунтазири посух аз ҳама гиреҳҳо аст, ӯ натиҷаҳоеро, ки аз гиреҳҳо фиристода шудаанд, ҷамъ мекунад, ки аллакай посух додаанд. Барои GC, ин маънои онро дорад, ки намунаҳои истифодаи тӯдаи мо хеле зуд тағйир меёбанд. Ва GC, ки мо истифода мебарем, аз ӯҳдаи ин вазифа баромада натавонист.

Ягона ислоҳе, ки мо барои тағир додани рафтори кластер дар ин вазъият дарёфтем, ин муҳоҷират ба JDK13 ва истифодаи коллектори партовҳои Shenandoah мебошад. Ин мушкилотро ҳал кард, координаторҳои мо аз афтодан бас шуданд.

Дар ин ҷо мушкилот бо Java хотима ёфт ва мушкилоти фарохмаҷро оғоз ёфт.

"Берри" бо Elasticsearch: интиқол

Кластери Elasticsearch 200 TB+

Мушкилот бо қобилияти интиқол маънои онро дорад, ки кластери мо мӯътадил кор мекунад, аммо дар авҷи шумораи ҳуҷҷатҳои индексатсияшуда ва ҳангоми машқҳо, иҷроиш нокифоя аст.

Аломати аввалине, ки дучор мешавад: ҳангоми баъзе "таркишҳо" дар истеҳсолот, вақте ки шумораи хеле зиёди гузоришҳо ногаҳон тавлид мешаванд, хатои индексатсияи es_rejected_execution дар Graylog зуд-зуд дурахшид.

Ин аз он сабаб буд, ки thread_pool.write.queue дар як гиреҳи додаҳо, то лаҳзае, ки Elasticsearch қодир аст дархости индексатсияро коркард кунад ва иттилоотро ба пораи диск бор кунад, ба таври пешфарз танҳо 200 дархостро кэш карда метавонад. Ва дар Ҳуҷҷатҳои Elasticsearch Дар бораи ин параметр хеле кам гуфта шудааст. Танҳо шумораи максималии риштаҳо ва андозаи пешфарз нишон дода шудаанд.

Албатта, мо барои тағир додани ин арзиш рафтем ва инҳоро фаҳмидем: махсусан, дар танзимоти мо, то 300 дархост хеле хуб кэш карда мешаванд ва арзиши баландтар аз он аст, ки мо дубора ба Full GC парвоз мекунем.

Илова бар ин, азбаски инҳо маҷмӯи паёмҳо ҳастанд, ки дар як дархост меоянд, Graylog-ро тағир додан лозим буд, то он на зуд-зуд ва бо қисмҳои хурд, балки дар партияҳои бузург ё дар ҳар 3 сония як маротиба, агар партия ҳанӯз пурра набошад. Дар ин ҳолат, маълум мешавад, ки маълумоте, ки мо дар Elasticsearch менависем, на дар ду сония, балки дар панҷ сония дастрас мешавад (ки ба мо хеле мувофиқ аст), балки шумораи такрорӣ, ки барои тела додан лозим аст, ки тавассути як фосилаи калон сохта шаванд. маҷмӯаи иттилоот кам карда мешавад.

Ин махсусан дар он лаҳзаҳое муҳим аст, ки чизе дар ҷое садама зад ва дар бораи он хашмгинона хабар медиҳад, то ба таври пурра спамшудаи Elastic ба даст наояд ва пас аз чанд вақт - гиреҳҳои Graylog, ки аз сабаби баста шудани буферҳо корношоям мешаванд.

Илова бар ин, вақте ки мо ин гуна таркишҳоро дар истеҳсолот доштем, мо аз барномасозон ва озмоишгарон шикоят гирифтем: дар айни замон, ки онҳо воқеан ба ин журналҳо ниёз доштанд, ба онҳо хеле суст дода мешуданд.

Онҳо ба фаҳмидани он шурӯъ карданд. Аз як тараф, маълум буд, ки ҳам дархостҳои ҷустуҷӯ ва ҳам дархостҳои индексатсия аслан дар ҳамон мошинҳои физикӣ коркард карда мешаванд ва бо ин ё он роҳ камбудиҳои муайяне хоҳанд буд.

Аммо инро метавон қисман аз он сабаб канор гирифт, ки дар версияҳои шашуми Elasticsearch як алгоритме пайдо шуд, ки ба шумо имкон медиҳад дархостҳоро байни гиреҳҳои мувофиқи додаҳо на мувофиқи принсипи даврии тасодуфӣ тақсим кунед (контейнере, ки индексатсияро анҷом медиҳад ва ибтидои shard метавонад хеле банд бошад, имкони зуд ҷавоб додан вуҷуд надорад), аммо фиристодани ин дархост ба контейнери камтар боршуда бо реплика-шард, ки зудтар посух медиҳад. Ба ибораи дигар, мо ба use_adaptive_replica_selection расидем: true.

Тасвири хониш чунин ба назар мерасад:

Кластери Elasticsearch 200 TB+

Гузариш ба ин алгоритм имкон дод, ки вақти дархост дар он лаҳзаҳое, ки мо барои навиштан миқдори зиёди гузоришҳо доштем, ба таври назаррас беҳтар карда шавад.

Ниҳоят, мушкилоти асосӣ бедард нест кардани маркази додаҳо буд.

Он чизе ки мо дарҳол пас аз гум шудани пайвастшавӣ бо як DC аз кластер мехостем:

  • Агар мо дар маркази додаҳои ноком устоди ҷорӣ дошта бошем, он гоҳ он дубора интихоб карда мешавад ва ҳамчун нақш ба гиреҳи дигар дар DC дигар интиқол дода мешавад.
  • Устод ҳама гиреҳҳои дастнорасро аз кластер зуд нест мекунад.
  • Дар асоси боқимондаҳо, ӯ дарк хоҳад кард: дар маркази додаҳои гумшуда мо чунин ва чунин пораҳои ибтидоӣ доштем, вай зуд қисмҳои репликаи иловагиро дар марказҳои боқимондаи додаҳо пешбарӣ мекунад ва мо индексатсияи маълумотро идома медиҳем.
  • Дар натиҷа, қобилияти навиштан ва хондани кластер тадриҷан паст мешавад, аммо дар маҷмӯъ ҳама чиз оҳиста бошад ҳам, аммо устуворона кор хоҳад кард.

Тавре маълум шуд, мо чунин чизеро мехостем:

Кластери Elasticsearch 200 TB+

Ва мо инҳоро гирифтем:

Кластери Elasticsearch 200 TB+

Ин чӣ гуна рӯй дод?

Вақте ки маркази додаҳо афтод, устоди мо ботлок шуд.

Чаро?

Гап дар он аст, ки усто дорои TaskBatcher мебошад, ки барои паҳн кардани вазифаҳо ва рӯйдодҳои муайян дар кластер масъул аст. Ҳар як баромади гиреҳ, ҳама гуна пешбурди пора аз реплика ба ибтидоӣ, ҳама гуна вазифа барои сохтани пора дар ҷое - ҳамаи ин аввал ба TaskBatcher меравад, ки дар он пайдарпай ва дар як ришта коркард мешавад.

Ҳангоми аз даст додани як маркази додаҳо маълум шуд, ки ҳама гиреҳҳои додаҳо дар марказҳои додаҳои боқимонда вазифаи худ медонистанд, ки ба устод хабар диҳанд, ки "мо фалон гиреҳҳои маълумотро аз даст додем".

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

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

Мо андозагирӣ кардем ва пеш аз версияи 6.4.0, ки дар он ҷо ин ислоҳ шуда буд, барои мо кофӣ буд, ки ҳамзамон танҳо 10 гиреҳи маълумотро аз 360 бароварда кунем, то кластерро комилан хомӯш кунем.

Чунин менамуд:

Кластери Elasticsearch 200 TB+

Пас аз версияи 6.4.0, ки дар он ин хатои даҳшатбор ислоҳ карда шуд, гиреҳҳои маълумот куштори устодро қатъ карданд. Аммо ин ӯро "ақлтар" нагардонд. Маҳз: вақте ки мо 2, 3 ё 10 гиреҳи маълумотро (ҳар рақами ғайр аз як) мебарорем, устод як паёми аввалро мегирад, ки мегӯяд, ки гиреҳи А тарк шудааст ва кӯшиш мекунад, ки ба гиреҳи В, гиреҳи C, гиреҳи D хабар диҳад.

Ва дар айни замон, инро танҳо тавассути муқаррар кардани вақт барои кӯшиши ба касе дар бораи чизе гуфтан мумкин аст, ки тақрибан ба 20-30 сония баробар аст ва ба ин васила суръати аз кластер берун рафтани маркази додаҳоро назорат мекунад.

Аслан, ин ба талаботе, ки дар аввал ба маҳсулоти ниҳоӣ ҳамчун як қисми лоиҳа пешниҳод шуда буданд, мувофиқат мекунад, аммо аз нуқтаи назари "илми пок" ин хато аст. Дар омади гап, онро таҳиягарон дар версияи 7.2 бомуваффақият ислоҳ карданд.

Гузашта аз ин, вақте ки гиреҳи муайяни додаҳо берун шуд, маълум шуд, ки паҳн кардани маълумот дар бораи баромадани он аз он муҳимтар аст, ки ба тамоми кластер гӯед, ки дар он фалон пораҳои ибтидоӣ мавҷуданд (барои пешбурди реплика-шард дар дигар додаҳо). марказ дар ибтидоӣ ва дар маълумот метавон дар бораи онҳо навишта шавад).

Аз ин рӯ, вақте ки ҳама чиз аллакай хомӯш шудааст, гиреҳҳои додашуда фавран ҳамчун кӯҳна қайд карда намешаванд. Мутаносибан, мо маҷбур мешавем, ки то фаро расидани ҳама пингҳо ба гиреҳҳои додаҳои додашуда интизор шавем ва танҳо пас аз он кластери мо ба мо мегӯяд, ки дар он ҷо, дар он ҷо ва дар он ҷо мо бояд сабти маълумотро идома диҳем. Шумо метавонед дар ин бора бештар хонед дар ин ҷо.

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

Дар натиҷа мо ба қарори зерин омадем:

  • Мо 360 гиреҳи маълумот бо дискҳои 700 гигабайт дорем.
  • 60 ҳамоҳангсоз барои масири трафик тавассути ҳамин гиреҳҳои додаҳо.
  • 40 устоде, ки мо аз версияҳои пеш аз 6.4.0 ҳамчун як навъ мерос гузоштаем - барои наҷот ёфтан аз хуруҷи маркази додаҳо, мо рӯҳан омода будем, ки якчанд мошинҳоро аз даст диҳем, то ки кворуми устодон ҳатто дар бадтарин сенария
  • Ҳама гуна кӯшиши муттаҳид кардани нақшҳо дар як контейнер бо он вохӯрданд, ки дер ё зуд гиреҳ дар зери сарборӣ мешиканад.
  • Тамоми кластер андозаи heap.search-и 31 гигабайтро истифода мебарад: ҳама кӯшишҳо барои кам кардани андоза боиси кушта шудани баъзе гиреҳҳо дар дархостҳои вазнини ҷустуҷӯ бо аломати пешбари ҷобаҷо мешуданд ё дар худи Elasticsearch шикастани ноқилро мегиранд.
  • Илова бар ин, барои таъмини иҷрои ҷустуҷӯ, мо кӯшиш кардем, ки шумораи объектҳоро дар кластер то ҳадди имкон камтар нигоҳ дорем, то ки ҳарчӣ камтар рӯйдодҳоро дар бандҳое, ки мо дар усто ба даст овардаем, коркард кунем.

Дар охир дар бораи мониторинг

Барои он ки ҳамаи ин мувофиқи пешбинишуда кор кунад, мо корҳои зеринро назорат мекунем:

  • Ҳар як гиреҳи додаҳо ба абри мо гузориш медиҳад, ки он вуҷуд дорад ва дар он чунин ва ғайраҳо мавҷуданд. Вақте ки мо чизеро дар ягон ҷо хомӯш мекунем, кластер пас аз 2-3 сония хабар медиҳад, ки дар маркази А мо гиреҳҳои 2, 3 ва 4-ро хомӯш кардем - ин маънои онро дорад, ки мо дар дигар марказҳои додаҳо ҳеҷ гоҳ он гиреҳҳоро, ки дар онҳо танҳо як пора мавҷуд аст, хомӯш карда наметавонем. чап.
  • Мо хусусияти рафтори устодро дониста, ба шумораи вазифаҳои дар пеш истода хеле бодиққат назар мекунем. Зеро ҳатто як вазифаи дармонда, агар он сари вақт тамом нашавад, аз ҷиҳати назариявӣ дар баъзе ҳолатҳои фавқулодда метавонад сабаби он гардад, ки масалан, пешбурди пораи реплика дар ибтидоӣ кор намекунад, бинобар ин индексатсия кор намекунад.
  • Мо инчунин ба таъхирҳои коллекторҳои партов бодиққат назар мекунем, зеро мо аллакай ҳангоми оптимизатсия бо ин мушкилиҳои зиёд доштем.
  • Аз рӯи ришта рад мекунад, то пешакӣ дарк кунад, ки дар куҷост.
  • Хуб, ченакҳои стандартӣ ба монанди теппа, RAM ва I/O.

Ҳангоми сохтани мониторинг, шумо бояд хусусиятҳои Thread Pool дар Elasticsearch ба назар гиред. Ҳуҷҷатҳои Elasticsearch имконоти конфигуратсия ва арзишҳои пешфарзро барои ҷустуҷӯ ва индексатсия тавсиф мекунад, аммо дар бораи thread_pool.management комилан хомӯш аст.Ин риштаҳо, аз ҷумла, дархостҳоро ба мисли _cat/shards ва дигар саволҳои шабеҳро коркард мекунанд, ки ҳангоми навиштани мониторинг истифода қулайанд. Чӣ қадаре ки кластер калон бошад, ҳамон қадар чунин дархостҳо дар як воҳиди вақт иҷро мешаванд ва thread_pool.management дар боло зикршуда на танҳо дар ҳуҷҷатҳои расмӣ пешниҳод карда намешавад, балки ба таври нобаёнӣ бо 5 ришта маҳдуд карда мешавад, ки пас аз ки назорат дуруст кор намекунад.

Он чизеро, ки ман дар хотима гуфтан мехохам: мо инро кардем! Мо тавонистем ба барномасозон ва таҳиягарони худ асбобе диҳем, ки қариб дар ҳама гуна вазъият дар бораи он чизе, ки дар истеҳсолот рӯй медиҳад, зуд ва боэътимод маълумот диҳад.

Бале, ин хеле мураккаб шуд, аммо, бо вуҷуди ин, мо тавонистем, ки хоҳишҳои худро ба маҳсулоти мавҷуда мувофиқ созем, ки ба мо лозим набуд, ки онҳоро барои худ часпонед ва аз нав нависем.

Кластери Elasticsearch 200 TB+

Манбаъ: will.com

Илова Эзоҳ