Doporučené postupy pro Elasticsearch
Začneme pracovat s osvědčenými postupy, abychom mohli sledovat Elasticsearch a jaké problémy může způsobit, když se těmto bodům vyhneme. Začněme.
Vždy definujte mapování ES
Jedna věc, kterou ES jistě může udělat, je pracovat bez mapování. Když tedy začnete vkládat data JSON do svého indexu ES, bude iterovat přes pole dat a vytvoří vhodné mapování. Zdá se to přímé a snadné, protože ES vybírá samotný datový typ. Na základě vašich dat možná budete potřebovat pole konkrétního datového typu.
Předpokládejme například, že indexujete následující dokument:
"id": 1,
"title": "Nainstalovat ElasticSearch na Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"date": "2018-03-25"
Tímto způsobem Elasticsearch označí pole „datum“ jako typ „datum“. Ale když indexujete následující dokument:
"id": 1,
"title": "Osvědčené postupy a výkon ES",
"date": "Pending"
Tentokrát byl změněn typ pole pro datum a ES způsobí chybu a nedovolí indexovat váš dokument. Abychom to usnadnili, můžete indexovat několik dokumentů, podívat se, jaká pole indexuje ES, a urvat mapování z této adresy URL:
GET / index_name / doc_type / _mappingTímto způsobem nebudete muset konstruovat také úplné mapování.
Výrobní vlajky
Volá se výchozí název clusteru, který začíná ES elasticsearch. Pokud máte ve svém clusteru mnoho uzlů, je dobré udržovat pojmenovací příznaky co nejkonzistentnější, například:
shluk.název: app_es_productionuzel.název: app_es_node_001
Kromě toho záleží také na nastavení obnovy pro uzly. Předpokládejme, že některé uzly v klastru se restartují kvůli selhání a některé uzly se restartují trochu po ostatních uzlech. Aby byla data konzistentní mezi všemi těmito uzly, budeme muset spustit program konzistence, který udrží všechny klastry v konzistentním stavu.
brána.recover_after_nodes: 10Je také užitečné, když předem řeknete clusteru, kolik uzlů bude v clusteru přítomno a kolik času na obnovení budou potřebovat:
brána.očekávané_uzly: 20brána.zotavit se po čase: 7 m
Se správnou konfigurací může obnovení, které by trvalo hodiny, trvat jen minutu a může společnosti ušetřit spoustu peněz.
Poskytování kapacity
Je důležité vědět, kolik místa zaberou vaše data a jak rychle se dostanou do Elasticsearch, protože to rozhoduje o velikosti RAM, kterou budete potřebovat na každém uzlu clusteru a také hlavním uzlu.
Samozřejmě neexistují žádné konkrétní pokyny k dosažení potřebného počtu, ale můžeme podniknout kroky, které nám poskytnou dobrý nápad. Jedním z kroků bude simulovat případ použití. Vytvořte ES klastr a nakrmte jej téměř stejnou rychlostí dat, jakou byste očekávali při nastavení výroby. Koncept začít velký a zmenšovat vám také pomůže být konzistentní ohledně toho, kolik místa je potřeba.
Velké šablony
Když definujete indexované velké šablony, budete vždy čelit problémům souvisejícím se synchronizací šablony napříč různými uzly clusteru. Vždy si uvědomte, že šablonu bude nutné znovu definovat, kdykoli dojde ke změně datového modelu. Je to mnohem lepší nápad udržujte šablony dynamické. Dynamické šablony automaticky aktualizují mapování polí na základě mapování, která jsme definovali dříve, a nových polí. Všimněte si, že není možné nahradit co nejmenší udržování šablon.
2Používání mlockall na serverech Ubuntu
Linux využívá proces výměny, když potřebuje paměť pro nové stránky. Díky výměně jsou věci pomalejší, protože disky jsou pomalejší než paměť. The mlockall vlastnost v konfiguraci ES říká ES, aby nevyměňoval své stránky z paměti, i když prozatím nejsou nutné. Tuto vlastnost lze nastavit v souboru YAML:
bootstrap.mlockall: pravdaV ES v5.verze x +, tato vlastnost se změnila na:
bootstrap.memory_lock: truePokud používáte tuto vlastnost, ujistěte se, že poskytnete ES dostatečně velkou hromadu paměti pomocí -DXmx možnost nebo ES_HEAP_SIZE.
Minimalizujte aktualizace mapování
Výkon clusteru je mírně ovlivněn, kdykoli provedete požadavky na aktualizaci mapování ve vašem clusteru ES. Pokud to nemůžete ovládat a přesto chcete provádět aktualizace mapování, můžete použít vlastnost v konfiguračním souboru ES YAML:
indexy.shluk.send_refresh_mapping: falseKdyž je požadavek na aktualizaci modelu v nevyřízené frontě pro hlavní uzel a odesílá data se starým mapováním do uzlů, musí také poslat požadavek na aktualizaci později všem uzlům. To může věci zpomalit. Když nastavíme výše uvedenou vlastnost na hodnotu false, dává to hlavní smysl, že byla provedena aktualizace mapování a nebude odesílat požadavek na aktualizaci do uzlů. To je užitečné, pouze pokud pravidelně provádíte mnoho změn ve svých mapováních.
Optimalizovaný fond vláken
ES uzly mají mnoho fondů vláken, aby se zlepšilo, jak jsou vlákna spravována v uzlu. Existují však omezení, kolik dat se každé vlákno může postarat. Abychom mohli tuto hodnotu sledovat, můžeme použít vlastnost ES:
threadpool.hromadně.velikost_fronty: 2000To informuje ES o počtu požadavků ve fragmentu, který lze zařadit do fronty k provedení v uzlu, když není k dispozici vlákno pro zpracování požadavku. Pokud počet úkolů překročí tuto hodnotu, dostanete a RemoteTransportException. Čím vyšší je tato hodnota, tím vyšší množství haldy bude potřeba na vašem uzlovém stroji a hromada JVM bude také spotřebována. Také byste měli mít připravený kód pro případ, že by byla vyvolána tato výjimka.
Závěr
V této lekci jsme se zaměřili na to, jak můžeme zlepšit výkon Elasticsearch tím, že se vyhneme častým a ne tak častým chybám, kterých se lidé dopouštějí. Přečtěte si více článků Elasticsearch na LinuxHint.