Elastinga paieška gamyboje - diegimo geriausia praktika

„Elasticsearch“ yra labai optimizuotas paieškos modulis šiuolaikinei duomenų analizei.

Elasticsearch yra nuostabus realaus laiko paieškos ir analizės variklis. Jis pastatytas ant „Apache Lucene“. Jis yra paskirstytas, RESTful, lengvai pradedamas naudoti ir labai prieinamas. Elasticsearch naudojimo atvejai apima paieškos įjungimą, operacijų stebėjimą ir klaidų aptikimą, turinio aptikimą, žurnalo analizę, neaiškią paiešką, įvykių duomenų kaupimą, duomenų vizualizaciją. „Elasticsearch“ ir likusi dalis „Elastic Stack“ pasirodė esanti ypač universali, ir, kaip matote aukščiau, naudojimo atvejai yra keli būdai, kaip integruoti „Elasticsearch“ į tai, ką jūsų produktas pristato šiandien, ir suteikti papildomos įžvalgos.

Mes labai daug naudojame tai „Botmetric“ paieškai ir analizei atlikti, per dieną indeksuojame apie milijardą dokumentų ir realiuoju laiku naudojame labai sudėtingas duomenų vizualizacijos suvestines.

Beje, visiškai skirtingas yra programos paleidimas prieš ją paleisdamas ir gaminant bei prižiūrint. Ši arklė apima daugelį šių veiksnių iš realaus gyvenimo patirties ir yra pagrindiniai įprasti dalykai, į kuriuos turėtumėte atsižvelgti, vykdydami „Elasticsearch“ gamyboje.

Atmintis:

„Elasticsearch“ ir „Lucene“ yra parašyti „Java“, tai reiškia, kad turite atkreipti dėmesį į erdvės ir JVM statistiką. Kuo daugiau „Elasticsearch“ yra prieinama, tuo daugiau atminties ji gali naudoti filtrui ir kitai talpyklai, kad padidintų užklausos našumą. Tačiau atkreipkite dėmesį, kad per didelis krūvos gali priversti jus ilgai kaupti šiukšles. Nenustatykite Xmx aukščiau ribos, kurią JVM naudoja suspausto objekto rodyklėms (suspaustoms opoms); tikslus skirtumas skiriasi, tačiau yra beveik 32 GB.

Dažna problema yra per didelės krūvos konfigūravimas. Turite 64 GB aparatą - ir, žvelgdami į savo norą, norite suteikti „Elasticsearch“ visą 64 GB atmintį. Daugiau yra geriau! Elasticsearch neabejotinai svarbi krūva. Jį naudoja daugelis atmintyje esančių duomenų struktūrų, kad užtikrintų greitą veikimą. Tačiau kalbant apie tai, yra dar vienas pagrindinis atminties vartotojas, kurio nėra daug: OS failo talpykla.

„Lucene“ yra skirta panaudoti pagrindinę OS atminties duomenų struktūrų talpykloje. Luceno segmentai saugomi atskiruose failuose. Kadangi segmentai yra nekintami, šie failai niekada nesikeičia. Tai daro juos labai talpinamus talpykloje, o pagrindinė OS mielai paliks karštus segmentus atmintyje, kad jie galėtų greičiau pasiekti. Šie segmentai apima ir apverstą rodyklę (viso teksto paieškai), ir doc reikšmes (suvestinėms). „Lucene“ pasirodymas priklauso nuo šios sąveikos su OS. Bet jei visą laisvą atmintį skirsite „Elasticsearch“ krūvai, OS failų talpykloje neliks nieko kito. Tai gali rimtai paveikti spektaklį. Įprasta rekomendacija yra suteikti 50% turimos atminties „Elasticsearch“ krūvai, o kitus 50% palikti laisvą. Jis nenaudojamas; Lucene mielai sunaudos viską, kas liko failų talpykloje. Elastinių paieškų krūvą galima sukonfigūruoti šiais būdais,

eksportuoti ES_HEAP_SIZE = 10g

arba

ES_JAVA_OPTS = "-„ Xms10g-Xmx10g “./bin/elasticsearch

CPU:

Elasticsearch palaiko apibendrinimus ir filtruojamas užklausas. Norint vykdyti sudėtingas filtruotas užklausas, intensyviai indeksuoti, vertinti pagal indeksus ir atlikti užklausas pagal indeksus, reikia sunkaus procesoriaus, todėl tinkamai pasirinkti reikia. Reikia suprasti CPU specifikacijas ir tai, kaip jie elgiasi su „Java“, kai užklausos vykdomos JVM.

Kiekviename baseine yra daugybė gijų, kurias galima sukonfigūruoti, ir eilė. Tai pakeisti nerekomenduojama, nebent turite labai specifinį reikalavimą, nes „Elasticsearch“ dinamiškai paskirsto branduolius.

Sriegių baseinų tipai:

Elasticsearch turi 3 rūšių srieginius baseinus.

  1. Talpykloje: talpykloje esantis siūlų fondas yra neribotas siūlų fondas, kuris pakels siūlą, jei yra laukiančių užklausų. Šis gijų fondas yra naudojamas siekiant užkirsti kelią šiam fondui pateiktų užklausų blokavimui ar atmetimui. Nepanaudoti sriegiai šiame gijų fonde bus nutraukti pasibaigus palaikymo gyvavimui (numatytosios penkios minutės). Talpykloje esančių siūlų fondas yra rezervuotas bendram siūlų fondui.
  2. Fiksuotas: fiksuotas gijų fondas turi fiksuoto dydžio gijas, kad būtų galima tvarkyti užklausas su eilėmis (pasirinktinai apribotomis) laukiančioms užklausoms, kuriose nėra gijų, kad jas aptarnautų. Dydžio parametras kontroliuoja gijų skaičių, o pagal nutylėjimą šerdžių skaičius kartojamas 5.
  3. Mastelio keitimas: mastelio sriegių fondas turi dinaminį gijų skaičių. Šis skaičius yra proporcingas darbo krūviui ir svyruoja nuo 1 iki dydžio parametro vertės.

Elasticsearch paskirsto centrinio procesoriaus naudojimą į įvairių rūšių gijų telkinius:

  • bendrinis: atliekant įprastas operacijas, tokias kaip atradimas ir gijų telkinio tipas, talpykloje.
  • rodyklė: indeksavimo / ištrynimo operacijoms. Sriegio baseino tipas yra fiksuotas.
  • paieška: skaičiavimo / paieškos operacijos. Sriegio baseino tipas yra fiksuotas.
  • gauti: norint gauti operacijas. Sriegio baseino tipas yra fiksuotas.
  • urmu: masinėms operacijoms, tokioms kaip masinis indeksavimas. Sriegio baseino tipas yra fiksuotas. Geriausia masinių dokumentų konfigūracija priklauso nuo klasterio konfigūracijos. Tai galima nustatyti išbandžius kelias vertes.
  • perkolatas: perkolavimui. Sriegio baseino tipas yra fiksuotas.
  • atnaujinti: atnaujinti operacijas. Sriegio fondo tipas yra mastelio.

Konkretaus sriegio telkinį pakeisti galima nustatant jo tipui būdingus parametrus.

Skaitykite daugiau https://www.elastic.co/guide/lt/elasticsearch/reference/2.2/modules-threadpool.html#types

Shard dydis:

„Shard“ yra vienetas, kuriuo „Elasticsearch“ paskirsto duomenis klasteryje. Greitis, kuriuo Elasticsearch gali judėti skiedra, kai balansuoja duomenis, pvz. po nesėkmės priklausys nuo šukių dydžio ir skaičiaus, taip pat tinklo ir disko našumo.

„Elasticsearch“ programoje kiekviena užklausa vykdoma viena sriegio juosta. Tačiau kelios skaldos gali būti apdorojamos lygiagrečiai, kaip ir kelios užklausos bei apibendrinimai su ta pačia rutulys.

Tai reiškia, kad minimalus užklausos delsos laikotarpis, kai talpykloje nedalyvaujama, priklausys nuo duomenų, užklausos tipo ir šablono dydžio. Užklausus daugybę mažų skiltelių, apdorojimas vienoje šašlykėje bus spartesnis, tačiau, kadangi reikia atlikti dar daugiau užduočių ir suskirstyti į eilę, tai nebūtinai bus spartesnė, nei užklausant mažesnį skaičių didesnių skaldų. Jei turite daug mažų skaldų, užklausos pralaidumas taip pat gali sumažėti, jei yra kelios vienalaikės užklausos.

Kiekviena skiltelė turi duomenų, kuriuos reikia laikyti atmintyje, ir jie naudoja krūvą vietos. Tai apima duomenų struktūras, laikančias informaciją tiek rutulio lygiu, tiek segmentų lygiu, kad būtų galima apibrėžti, kur duomenys yra diske. Šių duomenų struktūrų dydis nėra fiksuotas ir skirsis priklausomai nuo naudojimo atvejo. Viena svarbi su segmentu susijusių pridėtinių savybių savybė yra ta, kad ji nėra griežtai proporcinga segmento dydžiui. Tai reiškia, kad didesni segmentai turi mažiau pridėtinės vertės vienam duomenų kiekiui, palyginti su mažesniais segmentais. Skirtumas gali būti didelis. Tinkamo skaičiaus skambučių pasirinkimas yra sudėtingas, nes jūs niekada nežinote, kiek dokumentų gausite prieš pradėdami. Jei turite daug skaldų, tai gali būti ir gera, ir baisi grupei. Indeksai ir skydų valdymas gali perkrauti pagrindinį mazgą, kuris gali nereaguoti, o tai gali sukelti keistą ir nemalonų elgesį. Skirkite pagrindinius mazgus pakankamai išteklių, kad būtų galima susidoroti su klasterio dydžiu.

Blogai yra tai, kad skiautelių skaičius yra nekintamas ir jis yra apibrėžtas kuriant rodyklę. Sukūrus rodyklę, vienintelis būdas pakeisti skalių skaičių yra ištrinti indeksus, juos vėl sukurti ir pakartotinai indeksuoti.

Replikacija

Elasticsearch palaiko replikaciją, duomenys yra pakartojami tarp duomenų mazgų, taigi mazgo praradimas nesukeltų duomenų praradimo. Pagal numatytuosius nustatymus replikacijos koeficientas yra 1, tačiau, atsižvelgiant į jūsų produkto reikalavimus, jį galima padidinti. Kuo daugiau kopijų, tuo atsparesni nelaimėms bus jūsų duomenys. Kitas papildomų replikų pranašumas yra tas, kad kiekvienas mazgas turi replikos skardą, o tai pagerina užklausos našumą, nes užklausos naudojamos ir replikoms.

Elasticsearch naudojama nuoseklumo replikacijos formulė yra:

(pagrindinis +paprastinimas_paprastų skaičių) / 2 + 1

Paskirstymo optimizavimas

Remdamiesi produktų duomenų reikalavimais, galime klasifikuoti duomenis į šiltą ir šaltą. Indeksams, kurie pasiekiami dažniau nei kitiems, gali būti paskirta daugiau duomenų mazgų, tuo tarpu indeksams, kuriems rečiau prieinami indeksai, gali būti skirta mažiau išteklių. Ši strategija yra ypač naudinga norint saugoti laiko eilučių duomenis, pvz., Programų žurnalus (pvz .: ELK).

Tai gali būti pasiekta vykdant „cronjob“, kuris reguliariais intervalais perkelia indeksus į skirtingus mazgus.

Karštas mazgas yra duomenų mazgas, atliekantis visą indeksavimą klasteryje. Jie taip pat turi naujausius indeksus, nes paprastai jie dažniausiai klausiami. Kadangi indeksavimas yra intensyvus CPU ir IO, šie serveriai turi būti galingi ir palaikomi pridedamoje SSD saugykloje. Aukštam prieinamumui rekomenduojame paleisti mažiausiai 3 karštus mazgus. Atsižvelgiant į tai, kiek naujausių duomenų norite surinkti ir užklausti, gali prireikti padidinti šį skaičių, kad pasiektumėte savo veiklos tikslus.

Šiltas mazgas yra duomenų mazgo tipas, skirtas tvarkyti didelį kiekį tik skaitomų indeksų, kurie nėra tokie tikėtini. Kadangi šie indeksai yra tik skaitomi, šiltas mazgas vietoj SSD naudoja didelius pridedamus diskus (dažniausiai besisukančius diskus). Kaip ir karštame mazge, aukštam prieinamumui mes rekomenduojame ne mažiau kaip 3 šiltus mazgus. Kaip ir anksčiau, perspėjame, kad didesniam duomenų kiekiui gali prireikti papildomų mazgų, kad būtų įvykdyti našumo reikalavimai. Taip pat atminkite, kad procesoriaus ir atminties konfigūracijose dažnai reikės atspindėti tas, kurias naudojate karštuose mazguose. Tai gali būti nustatyta tik išbandžius užklausas, panašias į tas, kurias patirtumėte gamybos situacijoje.

Norėdami gauti daugiau informacijos apie karštą ir šiltą mazgą, skaitykite čia.

Kita strategija, kurią galite pritaikyti, yra indeksų archyvavimas į s3 ir atkūrimas, kai jums reikia tų indeksų duomenų. Daugiau apie tai galite perskaityti čia.

Mazgo topologija:

Elasticsearch mazgus galima suskirstyti į tris kategorijas: pagrindinis mazgas, duomenų mazgas, kliento mazgas.

  1. Pagrindinis mazgas: Pagrindinis mazgas gali būti mažas, jei jis taip pat nėra duomenų mazgas, nes jame nėra jokių indeksų / skalių. Jos atsakomybė yra saugoti išsamią klasterio būseną ir padėti duomenis bei kitus mazgus indeksų / skilčių metaduomenų paieškoje. Elasticsearch turėtų turėti kelis pagrindinius mazgus, kad būtų išvengta suskaidytų smegenų problemų.
  2. Duomenų mazgas: duomenų mazgas yra atsakingas už tikrųjų indekso duomenų saugojimą / užklausą.
  3. Kliento mazgas: kliento mazgas naudojamas kaip tarpinis serveris indeksavimui ir paieškai. Tai labai rekomenduojama, jei intensyviai naudojami agregatai. Tai yra specialūs „ElasticSearch“ mazgai, kurie nėra tinkami nei duomenims, nei pagrindiniams. Kliento mazgai žino klasterius, todėl gali veikti kaip išmanieji apkrovos balansavimo įrenginiai. Savo užklausas galite siųsti kliento mazgams, kurie gali atlikti brangią užduotį - surinkti atsakymus į užklausų rezultatus iš kiekvieno duomenų mazgo.

pridėkite šiuos parametrus prie Flexiblesearch.yml failo atitinkamiems mazgams.

Pagrindinis mazgas: node.master: true node.data:false
Duomenų mazgas: node.master: klaidingas node.data:true
Kliento mazgas: node.master: false node.data:false

Trikčių šalinimo patarimai:

Elastinės paieškos našumas labai priklauso nuo mašinos, kurioje jis yra sumontuotas. CPU, atminties naudojimas ir disko įvestis / išvestis yra pagrindinės kiekvieno „Elasticsearch“ mazgo operacinės sistemos metrikos. Kai CPU naudojimas padidėja, rekomenduojama pažvelgti į „Java Virtual Machine“ (JVM) metriką. Šiame pavyzdyje smaigalio priežastis buvo didesnis šiukšlių rinkimo aktyvumas.

  1. Aukštosios atminties slėgis: Didelis atminties spaudimas veikia klasterio našumą dviem būdais: padidėjus atminties slėgiui iki 75% ir daugiau, lieka mažiau atminties, todėl jūsų grupei taip pat reikia išleisti keletą procesoriaus išteklių, kad atgautumėte atmintį per šiukšlių rinkimą. Šie procesoriaus ciklai nėra prieinami vartotojų užklausoms tvarkyti, kai įjungtas šiukšlių rinkimas. Todėl atsakymų į vartotojų užklausas laikas pailgėja, nes sistema vis labiau riboja resursus. Jei atminties slėgis ir toliau didėja ir siekia beveik 100%, naudojama žymiai agresyvesnė šiukšlių rinkimo forma, o tai savo ruožtu dramatiškai paveiks klasterio reagavimo laiką. „Index Response Times“ metrika rodo, kad didelis atminties spaudimas daro didelę įtaką našumui.
  2. Augimas JVM nemenkoje atmintyje, išeikvojus atmintį, skirtą puslapio talpyklai, ir galbūt sukeliantis branduolio lygmens OOM.
  3. Venkite suskaidytų smegenų problemų. Padalintos smegenys yra scenarijus, kai klasteris suskaidomas. Pavyzdžiui, turite 6 mazgų klasterius. 2 mazgai atsijungia nuo klasterio, tačiau jie vis tiek mato vienas kitą. Tuomet šie 2 mazgai sukuria dar vieną klasterį. Jie netgi išrinks naują meistrą tarp savęs. Dabar turime dvi grupes tuo pačiu pavadinimu, vieną su 4 mazgais, kitą - su 2 mazgais. Kiekvienas iš jų taip pat turi pagrindinį mazgą. Tai vadinama padalintų smegenų problema su ES klasteriais. Norėdami to išvengti, nustatykite ES parametrą discovery.zen.minimum_master_nodes į pusę mazgų skaičiaus + 1.
  4. Kadangi „Elasticsearch“ daug naudoja atminties įrenginius, disko I / O stebėjimas užtikrina, kad šis pagrindinis poreikis bus įvykdytas. Sumažėjusios disko įvesties / išvesties priežastys yra daugybė priežasčių, jos laikomos pagrindine metrika numatant daugelio rūšių problemas. Tai gera metrika, norint patikrinti indeksavimo efektyvumą ir užklausos našumą. Analizuojant skaitymo ir rašymo operacijas, tiesiogiai nurodoma, ko sistemai reikia labiausiai konkrečiu naudojimo atveju. Operacinės sistemos disko įvesties / išvesties parametrai yra visų kitų optimizacijų pagrindas, disko įvesties / išvesties nustatymas gali išvengti galimų problemų. Jei disko įvesties / išvesties vis dar nepakanka, atsakomosios priemonės, tokios kaip skiedinių skaičiaus ir jų dydžio optimizavimas, droselių sujungimas, lėtų diskų pakeitimas, perėjimas prie SSD ar papildomų mazgų įtraukimas, turėtų būti įvertintos atsižvelgiant į aplinkybes, sukeliančias I / O. silpnosios vietos.
  5. Programose, kurios remiasi paieška, vartotojo patirtis yra labai susijusi su paieškos užklausų vėlavimu. Yra daugybė dalykų, kurie gali paveikti užklausos našumą, pavyzdžiui, sukonstruotos užklausos, netinkamai sukonfigūruota „Elasticsearch“ klasteris, JVM atminties ir šiukšlių rinkimo problemos, disko IO ir pan. Užklausos delsimas yra metrika, kuri daro tiesioginį poveikį vartotojams, todėl įsitikinkite, kad įdėjote keletą perspėjimų.
  6. Pagal numatytuosius nustatymus dauguma talpyklų „Elasticsearch“ filtrų yra talpykloje. Tai reiškia, kad pirmą kartą išfiltruotos užklausos metu „Elasticsearch“ suras dokumentus, atitinkančius filtrą, ir, naudodamasi šia informacija, sukurs struktūrą, vadinamą „bitų rinkiniu“. Duomenys, saugomi bitų rinkinyje, apima dokumento identifikatorių ir tai, ar duotas dokumentas atitinka filtrą. Vėlesnės užklausos, turinčios tą patį filtrą, bus pakartotinai panaudotos bitų rinkinyje saugomai informacijai, todėl užklausų vykdymas bus spartesnis, taupant I / O operacijas ir CPU ciklus. Rekomenduojama naudoti filtrą užklausoje. Norėdami gauti daugiau informacijos rasite čia.
  7. Atnaujinimo laikas ir suliejimo laikas yra glaudžiai susiję su našumo indeksavimu, be to, jie daro įtaką bendram klasterio našumui. Atnaujinimo laikas padidėja, skaičiuojant failų, naudojamų „Lucene“ rodyklėje, skaičių.
  8. Įjungę lėtą užklausų registravimą, galėsite nustatyti, kurios užklausos yra lėtos ir ką galima padaryti, kad jas patobulintumėte, ypač naudingos užklausoms dėl pakaitos simbolių.
  9. Padidinkite ulimit dydį, kad būtų galima leisti daugiausiai failų.
  10. „ElasticSearch“ našumas gali nukentėti, kai OS nusprendžia iškeisti nenaudojamą programos atmintį. Išjunkite keitimąsi nustatydami OS lygio parametrus arba nustatykite šiuos dalykus ElasticSearch konfigūracijoje bootstrap.mlockall: true
  11. Išjunkite visų indeksų ištrynimą pagal pakaitos užklausą. Norėdami įsitikinti, kad kas nors neišduoda DELETE operacijos visais rodyklėmis (* arba _all), nustatykite action.destructive_requires_name kaip true.

Prieš baigdami, čia yra sąrašas URL, kurie yra naudingi metrikai žiūrėti.

  • / _klasteris / sveikata? gana: klasterio sveikatos rodikliui.
  • / _status? gana: Visa informacija apie visus indeksus.
  • / _nodes? gana: Visa informacija apie mazgus.
  • / _cat / master? gana: pagrindiniam mazgui.
  • / _stats? gana: Skirstant shard, indeksų statistika.
  • / _nodes / statistika? gana: Atskirų mazgų statistikai tai apima mazgo jvm, http, io statistiką.

„Elasticsearch“ metrikos apibendrinimą palaiko dauguma sistemos stebėjimo priemonių, tokių kaip „Datadog“, „TICK“. Norint nuolat stebėti „Elasticsearch“, rekomenduojama naudoti tokius įrankius ir labai rekomenduojama sukurti piltuvą.

Išvada:

„Elasticsearch“ yra paskirstytas viso teksto paieškos ir analizės variklis, leidžiantis keliems nuomininkams precedento neturinčiu greičiu ieškoti visame duomenų rinkinyje, neatsižvelgiant į dydį. Be viso teksto paieškos galimybių, „ElasticSearch“ veikia ir kaip analizės sistema bei paskirstyta duomenų bazė. „ElasticSearch“ turi didelius numatytuosius nustatymus, kad galėtų pradėti. Tačiau praėję pradinį eksperimentavimo etapą turite praleisti šiek tiek laiko, kad pakeistumėte parametrus savo poreikiams. Rekomenduojama vėliau peržiūrėti savo konfigūraciją kartu su oficialiais dokumentais, kad užtikrintumėte, jog jūsų klasteris sukonfigūruotas taip, kad atitiktų jūsų poreikius.