Elasticsearch
Elasticsearch-configuratie
Zoeken…
Opmerkingen
Elasticsearch wordt geleverd met een aantal standaardinstellingen die een goede out-of-the-box-ervaring bieden voor ontwikkeling. De impliciete verklaring daar is dat het niet noodzakelijkerwijs geweldig is voor productie, die moet worden afgestemd op uw eigen behoeften en daarom niet kan worden voorspeld.
De standaardinstellingen maken het gemakkelijk om meerdere knooppunten op dezelfde machine te downloaden en uit te voeren zonder configuratiewijzigingen.
Waar zijn de instellingen?
Binnen elke installatie van Elasticsearch bevindt zich een config/elasticsearch.yml . Daar leven de volgende instellingen :
-
cluster.name- De naam van de cluster waaraan het knooppunt deelneemt. Alle knooppunten in hetzelfde cluster moeten dezelfde naam hebben.
- Momenteel standaard ingesteld op
elasticsearch.
-
node.*-
node.name- Indien niet opgegeven, wordt elke keer dat het knooppunt start een willekeurige naam gegenereerd. Dit kan leuk zijn, maar het is niet goed voor productieomgevingen.
- Namen hoeven niet uniek te zijn, maar ze moeten wel uniek zijn.
-
node.master- Een Booleaanse setting. Als dit
true, betekent dit dat het knooppunt een in aanmerking komend meesterknooppunt is en dat dit het gekozen meesterknooppunt kan zijn. - Standaard staat
true, wat betekent dat elk knooppunt een in aanmerking komend hoofdknooppunt is.
- Een Booleaanse setting. Als dit
-
node.data- Een Booleaanse setting. Als het
true, betekent dit dat het knooppunt gegevens opslaat en zoekactiviteiten afhandelt. - Standaard ingesteld op
true.
- Een Booleaanse setting. Als het
-
-
path.*-
path.data- De locatie waar bestanden worden geschreven voor het knooppunt. Alle knooppunten gebruiken deze map om metagegevens op te slaan, maar gegevensknooppunten gebruiken deze ook om documenten op te slaan / te indexeren.
- Standaard ingesteld op
./data.- Dit betekent dat
datau worden aangemaakt als een peer-directory om teconfigbinnen de Elasticsearch-directory.
- Dit betekent dat
-
path.logs- De locatie waar logbestanden worden geschreven.
- Standaard ingesteld op
./logs.
-
-
network.*network.host- Standaard ingesteld op
_local_, wat in feitelocalhost.- Dit betekent dat standaard niet kan worden gecommuniceerd met knopen van buiten de huidige machine!
- Standaard ingesteld op
network.bind_host- Mogelijk een array, dit vertelt Elasticsearch welke adressen van de huidige machine ook sockets binden.
- Het is deze lijst waarmee machines van buiten de machine (bijvoorbeeld andere knooppunten in het cluster) met dit knooppunt kunnen praten.
- Standaard ingesteld op
network.host.
- Mogelijk een array, dit vertelt Elasticsearch welke adressen van de huidige machine ook sockets binden.
network.publish_host- Een enkele host die wordt gebruikt om aan andere knooppunten te adverteren hoe deze het beste met dit knooppunt kan communiceren.
- Als leveren van een array
network.bind_hostzou dit het host die bestemd is om te worden gebruikt voor inter-knooppunt communicatie.
- Als leveren van een array
- Standaard ingesteld op network.host`.
- Een enkele host die wordt gebruikt om aan andere knooppunten te adverteren hoe deze het beste met dit knooppunt kan communiceren.
-
discovery.zen.*-
discovery.zen.minimum_master_nodes- Definieert quorum voor masterverkiezingen. Dit moet worden ingesteld met behulp van deze vergelijking:
(M / 2) + 1waarbijMhet aantal in aanmerking komendenode.master: true(knooppunten dienode.master: trueimpliciet of expliciet waar). - Standaard ingesteld op
1, die alleen geldig is voor een enkel knooppuntcluster!
- Definieert quorum voor masterverkiezingen. Dit moet worden ingesteld met behulp van deze vergelijking:
-
discovery.zen.ping.unicast.hosts- Het mechanisme voor het samenvoegen van dit knooppunt met de rest van een cluster.
- Dit moet in aanmerking komende hoofdknooppunten vermelden, zodat een knooppunt de rest van het cluster kan vinden.
- De waarde die hier moet worden gebruikt, is de
network.publish_hostvan die andere knooppunten. - Standaard ingesteld op
localhost, wat betekent dat het alleen op de lokale computer naar een cluster zoekt om toe te treden.
-
Welk type instellingen bestaan er?
Elasticsearch biedt drie verschillende soorten instellingen:
- Clusterbrede instellingen
- Dit zijn instellingen die van toepassing zijn op alles in het cluster, zoals alle knooppunten of alle indices.
- Knooppuntinstellingen
- Dit zijn instellingen die alleen van toepassing zijn op het huidige knooppunt.
- Index instellingen
- Dit zijn instellingen die alleen van toepassing zijn op de index.
Afhankelijk van de instelling kan dit zijn:
- Dynamisch veranderd tijdens runtime
- Gewijzigd na een herstart (sluiten / openen) van de index
- Sommige instellingen op indexniveau vereisen niet dat de index wordt gesloten en opnieuw wordt geopend, maar mogelijk moet de index opnieuw worden samengevoegd om de instelling toe te passen.
- Het compressieniveau van een index is een voorbeeld van dit type instelling. Het kan dynamisch worden gewijzigd, maar alleen nieuwe segmenten profiteren van de wijziging. Dus als een index niet verandert, profiteert deze nooit van de wijziging, tenzij u de index dwingt om zijn segmenten opnieuw te maken.
- Sommige instellingen op indexniveau vereisen niet dat de index wordt gesloten en opnieuw wordt geopend, maar mogelijk moet de index opnieuw worden samengevoegd om de instelling toe te passen.
- Gewijzigd na een herstart van het knooppunt
- Veranderd na een herstart van het cluster
- Nooit veranderd
Raadpleeg altijd de documentatie voor uw versie van Elasticsearch voor wat u wel of niet kunt doen met een instelling.
Hoe kan ik instellingen toepassen?
U kunt op verschillende manieren instellingen instellen, waarvan sommige niet worden voorgesteld:
- Opdrachtregelargumenten
In Elasticsearch 1.x en 2.x kunt u de meeste instellingen indienen als Java-systeemeigenschappen voorafgegaan door es. :
$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`
In Elasticsearch 5.x verandert dit om te voorkomen dat Java-systeemeigenschappen worden gebruikt, in plaats daarvan een aangepast argumenttype waarbij -E de plaats van -Des. :
$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`
Deze benadering voor het toepassen van instellingen werkt geweldig wanneer u tools zoals Puppet, Chef of Ansible gebruikt om het cluster te starten en te stoppen. Het werkt echter heel slecht wanneer het handmatig wordt gedaan.
- YAML-instellingen
- In voorbeelden weergegeven
- Dynamische instellingen
- In voorbeelden weergegeven
De volgorde waarin instellingen worden toegepast, is in de volgorde van meest dynamische:
- Tijdelijke instellingen
- Persistente instellingen
- Opdrachtregelinstellingen
- YAML (statische) instellingen
Als de instelling twee keer wordt ingesteld, eenmaal op een van die niveaus, wordt het hoogste niveau van kracht.
Statische elastische zoekinstellingen
Elasticsearch gebruikt een YAML-configuratiebestand (Yet Another Markup Language) dat zich in de standaard Elasticsearch-directory bevindt (RPM- en DEB-installaties wijzigen deze locatie onder andere ).
U kunt basisinstellingen instellen in config/elasticsearch.yml :
# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name
# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
# a unique configuration file per node.
node.name: ${HOSTNAME}
# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data
# This is a both a master and data node (defaults)
node.master: true
node.data: true
# This tells Elasticsearch to bind all sockets to only be available
# at localhost (default)
network.host: _local_
Permanente dynamische clusterinstellingen
Als u een instelling dynamisch moet toepassen nadat het cluster al is gestart en deze daadwerkelijk dynamisch kan worden ingesteld, kunt u deze instellen met de _cluster/settings API.
Permanente instellingen zijn een van de twee soorten clusterbrede instellingen die kunnen worden toegepast. Een persistente instelling zal een volledige cluster-herstart overleven.
Opmerking: niet alle instellingen kunnen dynamisch worden toegepast. De naam van het cluster kan bijvoorbeeld niet dynamisch worden hernoemd. De meeste instellingen op knooppuntniveau kunnen ook niet dynamisch worden ingesteld (omdat ze niet afzonderlijk kunnen worden getarget).
Dit is niet de API die moet worden gebruikt om instellingen op indexniveau in te stellen. U kunt zien dat instelling een instelling op indexniveau is, omdat deze moet beginnen met index. . Instellingen waarvan de naam de vorm heeft van indices. zijn clusterbrede instellingen omdat ze van toepassing zijn op alle indices.
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Waarschuwing : in Elasticsearch 1.x en 2.x kunt u een permanente instelling niet uitschakelen .
Gelukkig is dit verbeterd in Elasticsearch 5.x en je kunt nu een instelling verwijderen door deze op null :
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
Een niet-ingestelde instelling keert terug naar de standaardwaarde of een andere waarde die is gedefinieerd op een lager prioriteitsniveau (bijvoorbeeld opdrachtregelinstellingen).
Tijdelijke dynamische clusterinstellingen
Als u een instelling dynamisch moet toepassen nadat het cluster al is gestart en deze daadwerkelijk dynamisch kan worden ingesteld, kunt u deze instellen met de _cluster/settings API.
Tijdelijke instellingen zijn een van de twee soorten clusterbrede instellingen die kunnen worden toegepast. Een tijdelijke instelling zal een volledige cluster-herstart niet overleven.
Opmerking: niet alle instellingen kunnen dynamisch worden toegepast. De naam van het cluster kan bijvoorbeeld niet dynamisch worden hernoemd. De meeste instellingen op knooppuntniveau kunnen ook niet dynamisch worden ingesteld (omdat ze niet afzonderlijk kunnen worden getarget).
Dit is niet de API die moet worden gebruikt om instellingen op indexniveau in te stellen. U kunt zien dat instelling een instelling op indexniveau is, omdat deze moet beginnen met index. . Instellingen waarvan de naam de vorm heeft van indices. zijn clusterbrede instellingen omdat ze van toepassing zijn op alle indices.
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
Waarschuwing : in Elasticsearch 1.x en 2.x kunt u geen tijdelijke instellingen uitschakelen zonder een volledige herstart van de cluster.
Gelukkig is dit verbeterd in Elasticsearch 5.x en je kunt nu een instelling verwijderen door deze op nul te zetten:
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": null
}
}
Een niet-ingestelde instelling keert terug naar de standaardwaarde of een waarde die is gedefinieerd op een lager prioriteitsniveau (bijvoorbeeld persistent instellingen).
Indexinstellingen
Indexinstellingen zijn die instellingen die van toepassing zijn op een enkele index. Dergelijke instellingen beginnen met index. . De uitzondering op deze regel is number_of_shards en number_of_replicas , die ook bestaan in de vorm van index.number_of_shards en index.number_of_replicas .
Zoals de naam al doet vermoeden, zijn instellingen op indexniveau van toepassing op een enkele index. Sommige instellingen moeten tijdens het maken worden toegepast, omdat ze niet dynamisch kunnen worden gewijzigd, zoals de instelling index.number_of_shards , die het aantal primaire shards voor de index regelt.
PUT /my_index
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
of, in een meer beknopte indeling, kunt u sleutelvoorvoegsels bij elk combineren . :
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
De bovenstaande voorbeelden maken een index met de meegeleverde instellingen. U kunt de instellingen per index dynamisch wijzigen met behulp van het eindpunt index _settings . Hier veranderen we bijvoorbeeld de slowlog-instellingen alleen voor het waarschuwingsniveau:
PUT /my_index/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Waarschuwing : Elasticsearch 1.x en 2.x hebben de instellingsnamen op indexniveau niet erg strikt gevalideerd. Als u een typefout had, of gewoon een instelling had verzonnen, zou het deze blindelings accepteren, maar anders negeren. Elasticsearch 5.x valideert de namen van instellingen strikt en het weigert elke poging om indexinstellingen toe te passen met een onbekende instelling (en) (vanwege typefout of ontbrekende plug-in). Beide verklaringen zijn van toepassing op dynamisch veranderende indexinstellingen en tijdens het maken.
Dynamische indexinstellingen voor meerdere indices tegelijkertijd
U kunt dezelfde wijziging die in het voorbeeld van de Index Settings getoond, toepassen op alle bestaande indices met één verzoek, of zelfs een subset ervan:
PUT /*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
of
PUT /_all/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
of
PUT /_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Als u het ook selectiever wilt doen, kunt u meerdere selecteren zonder alles te leveren:
PUT /logstash-*,my_other_index,some-other-*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}