Elasticsearch - Moduli
Elasticsearch è composto da una serie di moduli, responsabili della sua funzionalità. Questi moduli hanno due tipi di impostazioni come segue:
Static Settings- Queste impostazioni devono essere configurate nel file config (elasticsearch.yml) prima di avviare Elasticsearch. È necessario aggiornare tutti i nodi interessati nel cluster per riflettere le modifiche apportate da queste impostazioni.
Dynamic Settings - Queste impostazioni possono essere impostate su Elasticsearch live.
Discuteremo i diversi moduli di Elasticsearch nelle sezioni seguenti di questo capitolo.
Routing a livello di cluster e allocazione di shard
Le impostazioni a livello di cluster decidono l'allocazione dei frammenti a diversi nodi e la riallocazione dei frammenti per ribilanciare il cluster. Queste sono le seguenti impostazioni per controllare l'allocazione dei frammenti.
Allocazione di frammenti a livello di cluster
Ambientazione | Possibile valore | Descrizione |
---|---|---|
cluster.routing.allocation.enable | ||
tutti | Questo valore predefinito consente l'allocazione di frammenti per tutti i tipi di frammenti. | |
primarie | Ciò consente l'allocazione dei frammenti solo per i frammenti primari. | |
nuovi_primari | Ciò consente l'allocazione di frammenti solo per frammenti primari per nuovi indici. | |
nessuna | Ciò non consente alcuna allocazione di frammenti. | |
cluster.routing.allocation .node_concurrent_recoveries | Valore numerico (per impostazione predefinita 2) | Ciò limita il numero di ripristino di frammenti simultanei. |
cluster.routing.allocation .node_initial_primaries_recoveries | Valore numerico (per impostazione predefinita 4) | Ciò limita il numero di ripristini primari iniziali paralleli. |
cluster.routing.allocation .same_shard.host | Valore booleano (per impostazione predefinita false) | Ciò limita l'allocazione di più di una replica dello stesso frammento nello stesso nodo fisico. |
indices.recovery.concurrent _streams | Valore numerico (per impostazione predefinita 3) | Questo controlla il numero di flussi di rete aperti per nodo al momento del ripristino dello shard dai frammenti peer. |
indices.recovery.concurrent _small_file_streams | Valore numerico (per impostazione predefinita 2) | Controlla il numero di flussi aperti per nodo per file di piccole dimensioni con dimensioni inferiori a 5 MB al momento del ripristino dello shard. |
cluster.routing.rebalance.enable | ||
tutti | Questo valore predefinito consente il bilanciamento per tutti i tipi di frammenti. | |
primarie | Ciò consente il bilanciamento dei frammenti solo per i frammenti primari. | |
repliche | Ciò consente il bilanciamento dei frammenti solo per i frammenti di replica. | |
nessuna | Ciò non consente alcun tipo di bilanciamento dello shard. | |
cluster.routing.allocation .allow_rebalance | ||
sempre | Questo valore predefinito consente sempre il ribilanciamento. | |
indices_primaries _active | Ciò consente il ribilanciamento quando vengono allocati tutti i frammenti primari nel cluster. | |
Indices_all_active | Ciò consente il ribilanciamento quando vengono allocati tutti i frammenti primari e di replica. | |
cluster.routing.allocation.cluster _concurrent_rebalance | Valore numerico (per impostazione predefinita 2) | Ciò limita il numero di bilanciamento dello shard simultaneo nel cluster. |
cluster.routing.allocation .balance.shard | Valore float (per impostazione predefinita 0.45f) | Questo definisce il fattore di peso per i frammenti allocati su ogni nodo. |
cluster.routing.allocation .balance.index | Valore float (per impostazione predefinita 0,55f) | Questo definisce il rapporto tra il numero di frammenti per indice allocato su un nodo specifico. |
cluster.routing.allocation .balance.threshold | Valore float non negativo (per impostazione predefinita 1.0f) | Questo è il valore minimo di ottimizzazione delle operazioni che dovrebbero essere eseguite. |
Allocazione di frammenti basata su disco
Ambientazione | Possibile valore | Descrizione |
---|---|---|
cluster.routing.allocation.disk.threshold_enabled | Valore booleano (per impostazione predefinita true) | Ciò abilita e disabilita il decisore di allocazione del disco. |
cluster.routing.allocation.disk.watermark.low | Valore stringa (per impostazione predefinita 85%) | Questo denota il massimo utilizzo del disco; dopo questo punto, nessun altro frammento può essere assegnato a quel disco. |
cluster.routing.allocation.disk.watermark.high | Valore stringa (per impostazione predefinita 90%) | Ciò indica l'utilizzo massimo al momento dell'assegnazione; se questo punto viene raggiunto al momento dell'allocazione, Elasticsearch allocherà quel frammento su un altro disco. |
cluster.info.update.interval | Valore stringa (per impostazione predefinita 30s) | Questo è l'intervallo tra i controlli sull'utilizzo del disco. |
cluster.routing.allocation.disk.include_relocations | Valore booleano (per impostazione predefinita true) | Questo decide se considerare i frammenti attualmente allocati, calcolando l'utilizzo del disco. |
Scoperta
Questo modulo aiuta un cluster a scoprire e mantenere lo stato di tutti i nodi in esso contenuti. Lo stato del cluster cambia quando un nodo viene aggiunto o eliminato da esso. L'impostazione del nome del cluster viene utilizzata per creare differenze logiche tra diversi cluster. Ci sono alcuni moduli che ti aiutano a utilizzare le API fornite dai fornitori di cloud e quelli sono indicati di seguito:
- Scoperta di Azure
- Scoperta EC2
- Rilevamento del motore di elaborazione di Google
- Scoperta Zen
Gateway
Questo modulo mantiene lo stato del cluster e i dati della partizione durante i riavvii completi del cluster. Le seguenti sono le impostazioni statiche di questo modulo:
Ambientazione | Possibile valore | Descrizione |
---|---|---|
gateway.expected_nodes | valore numerico (per impostazione predefinita 0) | Il numero di nodi che dovrebbero essere nel cluster per il ripristino di frammenti locali. |
gateway.expected_master_nodes | valore numerico (per impostazione predefinita 0) | Il numero di nodi master che dovrebbero essere nel cluster prima di avviare il ripristino. |
gateway.expected_data_nodes | valore numerico (per impostazione predefinita 0) | Il numero di nodi di dati previsti nel cluster prima dell'avvio del ripristino. |
gateway.recover_after_time | Valore stringa (per impostazione predefinita 5 m) | Questo è l'intervallo tra i controlli sull'utilizzo del disco. |
cluster.routing.allocation. disk.include_relocations | Valore booleano (per impostazione predefinita true) | Specifica il tempo di attesa per l'avvio del processo di ripristino indipendentemente dal numero di nodi uniti nel cluster. gateway.recover_ after_nodes |
HTTP
Questo modulo gestisce la comunicazione tra il client HTTP e le API Elasticsearch. Questo modulo può essere disabilitato modificando il valore di http.enabled in false.
Le seguenti sono le impostazioni (configurate in elasticsearch.yml) per controllare questo modulo:
S.No | Impostazione e descrizione |
---|---|
1 | http.port Questa è una porta per accedere a Elasticsearch e varia da 9200-9300. |
2 | http.publish_port Questa porta è per i client http ed è utile anche in caso di firewall. |
3 | http.bind_host Questo è un indirizzo host per il servizio http. |
4 | http.publish_host Questo è un indirizzo host per il client http. |
5 | http.max_content_length Questa è la dimensione massima del contenuto in una richiesta http. Il suo valore predefinito è 100mb. |
6 | http.max_initial_line_length Questa è la dimensione massima dell'URL e il suo valore predefinito è 4kb. |
7 | http.max_header_size Questa è la dimensione massima dell'intestazione http e il suo valore predefinito è 8kb. |
8 | http.compression Ciò abilita o disabilita il supporto per la compressione e il suo valore predefinito è false. |
9 | http.pipelinig Ciò abilita o disabilita il pipelining HTTP. |
10 | http.pipelining.max_events Ciò limita il numero di eventi da accodare prima di chiudere una richiesta HTTP. |
Indici
Questo modulo mantiene le impostazioni, che sono impostate globalmente per ogni indice. Le seguenti impostazioni riguardano principalmente l'utilizzo della memoria:
Interruttore
Viene utilizzato per impedire che l'operazione provochi un OutOfMemroyError. L'impostazione limita principalmente la dimensione dell'heap JVM. Ad esempio, l'impostazione indices.breaker.total.limit, che ha come valore predefinito il 70% dell'heap JVM.
Fielddata Cache
Viene utilizzato principalmente durante l'aggregazione su un campo. Si consiglia di disporre di memoria sufficiente per allocarlo. La quantità di memoria utilizzata per la cache dei dati del campo può essere controllata utilizzando l'impostazione indices.fielddata.cache.size.
Node Query Cache
Questa memoria viene utilizzata per memorizzare nella cache i risultati della query. Questa cache utilizza i criteri di eliminazione dei meno utilizzati di recente (LRU). L'impostazione Indices.queries.cahce.size controlla la dimensione della memoria di questa cache.
Buffer di indicizzazione
Questo buffer memorizza i documenti appena creati nell'indice e li scarica quando il buffer è pieno. L'impostazione come indices.memory.index_buffer_size controlla la quantità di heap allocata per questo buffer.
Shard Request Cache
Questa cache viene utilizzata per archiviare i dati di ricerca locale per ogni frammento. La cache può essere abilitata durante la creazione dell'indice o può essere disabilitata inviando il parametro URL.
Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true
Recupero degli indici
Controlla le risorse durante il processo di ripristino. Le seguenti sono le impostazioni:
Ambientazione | Valore predefinito |
---|---|
indices.recovery.concurrent_streams | 3 |
indices.recovery.concurrent_small_file_streams | 2 |
indices.recovery.file_chunk_size | 512kb |
indices.recovery.translog_ops | 1000 |
indices.recovery.translog_size | 512kb |
indices.recovery.compress | vero |
indices.recovery.max_bytes_per_sec | 40mb |
Intervallo TTL
L'intervallo Time to Live (TTL) definisce il tempo di un documento, dopo il quale il documento viene eliminato. Di seguito sono riportate le impostazioni dinamiche per il controllo di questo processo:
Ambientazione | Valore predefinito |
---|---|
indices.ttl.interval | Anni '60 |
indices.ttl.bulk_size | 1000 |
Nodo
Ogni nodo ha un'opzione per essere nodo dati o meno. È possibile modificare questa proprietà modificandonode.dataambientazione. Impostando il valore comefalse definisce che il nodo non è un nodo dati.