Elastisch zoeken

Best practices van Elasticsearch en betere prestaties

Best practices van Elasticsearch en betere prestaties
In dit bericht zullen we proberen best practices te verzamelen en ook welke dingen we moeten vermijden bij het werken met Elasticsearch en het invoeren van gegevens erin. Op deze manier weten we wat we allemaal moeten regelen voordat we zelfs maar met deze uitstekende zoekmachine gaan werken.

Best practices voor Elasticsearch

We gaan aan de slag met Best Practices om te volgen met Elasticsearch en welke problemen het kan veroorzaken als we deze punten vermijden. Laten we beginnen.

Definieer altijd ES-toewijzingen

Eén ding dat ES zeker kan doen, is werken zonder mappings. Dus wanneer u begint met het invoeren van JSON-gegevens aan uw ES-index, zal deze de gegevensvelden herhalen en een geschikte toewijzing maken. Dit lijkt direct en gemakkelijk omdat ES het gegevenstype zelf selecteert selecting. Op basis van uw gegevens heeft u mogelijk een veld nodig dat van een specifiek gegevenstype moet zijn.

Stel dat u het volgende document indexeert:


"id" : 1,
"title" : "Installeer ElasticSearch op Ubuntu",
"link" : "https://linuxhint.com/install-elasticsearch-ubuntu/",
"datum" : "2018-03-25"

Op deze manier markeert Elasticsearch het veld "datum" als type "datum". Maar wanneer u het volgende document indexeert:


"id" : 1,
"title" : "ES Best Practices en Prestaties",
"datum" : "In behandeling"

Deze keer is het type van het datumveld gewijzigd en zal ES een foutmelding geven en zal uw document niet worden geïndexeerd. Om het u gemakkelijk te maken, kunt u een paar documenten indexeren, zien welke velden worden geïndexeerd door ES en de toewijzing van deze URL halen:

GET /index_name/doc_type/_mapping

Op deze manier hoef je niet ook de volledige mapping te maken.

Productie vlaggen

De standaard clusternaam die ES start heet is elastisch zoeken. Als je veel knooppunten in je cluster hebt, is het een goed idee om de naamgevingsvlaggen zo consistent mogelijk te houden, zoals:

TROS.naam: app_es_production
knooppunt.naam: app_es_node_001

Afgezien hiervan zijn herstelinstellingen voor knooppunten ook erg belangrijk. Stel dat sommige knooppunten in een cluster opnieuw worden opgestart vanwege een storing en dat sommige knooppunten iets na andere knooppunten opnieuw worden opgestart. Om de gegevens consistent te houden tussen al deze knooppunten, moeten we een consistentieprogramma uitvoeren dat alle clusters in een consistente staat houdt.

poort.recovery_after_nodes: 10

Het is ook handig als u het cluster van tevoren vertelt hoeveel nodes er in het cluster aanwezig zullen zijn en hoeveel hersteltijd deze nodig hebben:

poort.verwachte_knooppunten: 20
poort.herstel_na_tijd: 7m

Met de juiste configuratie kan een herstel dat uren zou hebben geduurd slechts een minuut duren en kan elk bedrijf veel geld besparen.

Capaciteitsvoorziening

Het is belangrijk om te weten hoeveel ruimte uw gegevens innemen en met welke snelheid deze naar Elasticsearch stromen, omdat dat bepaalt hoeveel RAM u nodig heeft op elk knooppunt van het cluster en ook op het hoofdknooppunt.

Natuurlijk zijn er geen specifieke richtlijnen om de benodigde aantallen te bereiken, maar we kunnen enkele stappen ondernemen die ons een goed idee geven. Een van de stappen zal zijn om simuleren de use-case. Maak een ES-cluster en voed deze met bijna dezelfde gegevenssnelheid als u zou verwachten met uw productie-installatie. Het concept van groot beginnen en verkleinen kan u ook helpen consistent te zijn over hoeveel ruimte nodig is.

Grote sjablonen

Wanneer u geïndexeerde grote sjablonen definieert, zult u altijd problemen ondervinden met betrekking tot het synchroniseren van de sjabloon over uw verschillende knooppunten van het cluster. Houd er altijd rekening mee dat de sjabloon opnieuw moet worden gedefinieerd wanneer een wijziging in het gegevensmodel plaatsvindt. Het is een veel beter idee om houd de sjablonen zo dynamisch. Dynamische sjablonen werken automatisch veldtoewijzingen bij op basis van de eerder gedefinieerde toewijzingen en de nieuwe velden. Merk op dat er geen vervanging is om de sjablonen zo klein mogelijk te houden.

2Mlockall gebruiken op Ubuntu-servers

Linux maakt gebruik van het Swapping-proces wanneer het geheugen nodig heeft voor nieuwe pagina's. Swappen maakt dingen traag omdat schijven langzamer zijn dan het geheugen. De mlockall eigenschap in ES-configuratie vertelt ES om zijn pagina's niet uit het geheugen te verwisselen, zelfs als ze voorlopig niet nodig zijn. Deze eigenschap kan worden ingesteld in het YAML-bestand:

bootstrap.mlockall: waar

In de ES v5.x+ versies, is deze eigenschap gewijzigd in:

bootstrap.memory_lock: waar

Als je deze eigenschap gebruikt, zorg er dan voor dat je ES voorziet van een heap-geheugen dat groot genoeg is met de -DXmx optie of ES_HEAP_SIZE.

Kaartupdates minimaliseren

De prestaties van een cluster worden enigszins beïnvloed wanneer u toewijzingsupdateverzoeken doet op uw ES-cluster. Als u hier geen controle over heeft en toch updates voor toewijzingen wilt maken, kunt u een eigenschap gebruiken in het ES YAML-configuratiebestand:

indices.TROS.send_refresh_mapping: false

Wanneer het modelupdateverzoek zich in de wachtrij voor het hoofdknooppunt bevindt en gegevens met de oude toewijzing naar de knooppunten worden verzonden, moet het later ook een updateverzoek naar alle knooppunten sturen. Dit kan dingen traag maken. Wanneer we de bovenstaande eigenschap instellen op false, is dit logisch dat er een update is aangebracht in de toewijzing en dat het updateverzoek niet naar de knooppunten wordt verzonden. Houd er rekening mee dat dit alleen nuttig is als u regelmatig veel wijzigingen in uw toewijzingen aanbrengt.

Geoptimaliseerde thread-pool

ES-knooppunten hebben veel threadpools om de manier waarop threads binnen een knooppunt worden beheerd te verbeteren improve. Maar er zijn beperkingen aan de hoeveelheid gegevens die elke thread kan verwerken. Om deze waarde bij te houden, kunnen we een ES-eigenschap gebruiken:

threadpool.massaal.wachtrij_grootte: 2000

Dit informeert ES over het aantal verzoeken in een shard dat in de wachtrij kan worden geplaatst voor uitvoering in het knooppunt wanneer er geen thread beschikbaar is om het verzoek te verwerken. Als het aantal taken hoger wordt dan deze waarde, krijg je een Extern Transport Uitzondering. Hoe hoger deze waarde, hoe groter de hoeveelheid heap-ruimte die nodig is op uw node-machine en de JVM-heap zal ook worden verbruikt. Houd ook uw code bij de hand voor het geval deze uitzondering wordt gegenereerd.

Conclusie

In deze les hebben we gekeken hoe we de prestaties van Elasticsearch kunnen verbeteren door veelvoorkomende en niet zo vaak voorkomende fouten die mensen maken te vermijden. Lees meer Elasticsearch-artikelen over LinuxHint.

HD Remastered Games voor Linux die nog nooit eerder een Linux-release hebben gehad
Veel game-ontwikkelaars en uitgevers komen met HD-remaster van oude games om de levensduur van franchise te verlengen, fans die compatibiliteit met mo...
Hoe AutoKey te gebruiken om Linux-spellen te automatiseren
AutoKey is een hulpprogramma voor desktopautomatisering voor Linux en X11, geprogrammeerd in Python 3, GTK en Qt. Met behulp van de scripting- en MACR...
Hoe FPS-teller in Linux-games te tonen
Linux-gaming kreeg een grote duw toen Valve in 2012 Linux-ondersteuning voor Steam-client en hun games aankondigde. Sindsdien hebben veel AAA- en indi...