Elasticsearch - Módulos

Elasticsearch está compuesto por una serie de módulos, que son responsables de su funcionalidad. Estos módulos tienen dos tipos de configuración de la siguiente manera:

  • Static Settings- Estas configuraciones deben configurarse en el archivo config (elasticsearch.yml) antes de iniciar Elasticsearch. Debe actualizar todos los nodos de preocupación en el clúster para reflejar los cambios de esta configuración.

  • Dynamic Settings - Estas configuraciones se pueden establecer en Elasticsearch en vivo.

Discutiremos los diferentes módulos de Elasticsearch en las siguientes secciones de este capítulo.

Enrutamiento a nivel de clúster y asignación de fragmentos

La configuración de nivel de clúster decide la asignación de fragmentos a diferentes nodos y la reasignación de fragmentos para reequilibrar el clúster. Estas son las siguientes configuraciones para controlar la asignación de particiones.

Asignación de fragmentos a nivel de clúster

Ajuste Valor posible Descripción
cluster.routing.allocation.enable
todas Este valor predeterminado permite la asignación de fragmentos para todo tipo de fragmentos.
primarias Esto permite la asignación de fragmentos solo para fragmentos primarios.
new_primaries Esto permite la asignación de fragmentos solo para fragmentos primarios para nuevos índices.
ninguna Esto no permite asignaciones de fragmentos.
cluster.routing.allocation .node_concurrent_recoveries Valor numérico (por defecto 2) Esto restringe el número de recuperación de fragmentos simultáneos.
cluster.routing.allocation .node_initial_primaries_recoveries Valor numérico (por defecto 4) Esto restringe el número de recuperaciones primarias iniciales paralelas.
cluster.routing.allocation .same_shard.host Valor booleano (por defecto falso) Esto restringe la asignación de más de una réplica del mismo fragmento en el mismo nodo físico.
indices.recovery.concurrent _streams Valor numérico (por defecto 3) Esto controla la cantidad de flujos de red abiertos por nodo en el momento de la recuperación de fragmentos de fragmentos de pares.
indices.recovery.concurrent _small_file_streams Valor numérico (por defecto 2) Esto controla la cantidad de flujos abiertos por nodo para archivos pequeños que tienen un tamaño inferior a 5 MB en el momento de la recuperación del fragmento.
cluster.routing.rebalance.enable
todas Este valor predeterminado permite el equilibrio de todo tipo de fragmentos.
primarias Esto permite el equilibrio de fragmentos solo para fragmentos primarios.
réplicas Esto permite el equilibrio de fragmentos solo para fragmentos de réplica.
ninguna Esto no permite ningún tipo de equilibrio de fragmentos.
cluster.routing.allocation .allow_rebalance
siempre Este valor predeterminado siempre permite reequilibrar.
indices_primaries _active Esto permite el reequilibrio cuando se asignan todos los fragmentos primarios del clúster.
Índices_todos_activos Esto permite reequilibrar cuando se asignan todos los fragmentos primarios y de réplica.
cluster.routing.allocation.cluster _concurrent_rebalance Valor numérico (por defecto 2) Esto restringe la cantidad de equilibrio de particiones simultáneas en el clúster.
cluster.routing.allocation .balance.shard Valor flotante (por defecto 0.45f) Esto define el factor de peso para los fragmentos asignados en cada nodo.
cluster.routing.allocation .balance.index Valor flotante (por defecto 0.55f) Esto define la proporción de la cantidad de fragmentos por índice asignados en un nodo específico.
cluster.routing.allocation .balance.threshold Valor flotante no negativo (por defecto 1.0f) Este es el valor mínimo de optimización de las operaciones que se deben realizar.

Asignación de fragmentos basada en disco

Ajuste Valor posible Descripción
cluster.routing.allocation.disk.threshold_enabled Valor booleano (por defecto verdadero) Esto habilita y deshabilita el decisor de asignación de disco.
cluster.routing.allocation.disk.watermark.low Valor de cadena (por defecto 85%) Esto denota el uso máximo de disco; después de este punto, no se puede asignar ningún otro fragmento a ese disco.
cluster.routing.allocation.disk.watermark.high Valor de cadena (por defecto 90%) Esto denota el uso máximo en el momento de la asignación; si se alcanza este punto en el momento de la asignación, Elasticsearch asignará ese fragmento a otro disco.
cluster.info.update.interval Valor de cadena (por defecto 30 s) Este es el intervalo entre las comprobaciones de uso del disco.
cluster.routing.allocation.disk.include_relocations Valor booleano (por defecto verdadero) Esto decide si se deben considerar los fragmentos que se están asignando actualmente, mientras se calcula el uso del disco.

Descubrimiento

Este módulo ayuda a un clúster a descubrir y mantener el estado de todos los nodos que contiene. El estado del clúster cambia cuando se agrega o se elimina un nodo. La configuración del nombre del clúster se utiliza para crear una diferencia lógica entre diferentes clústeres. Hay algunos módulos que lo ayudan a utilizar las API proporcionadas por los proveedores de la nube y se detallan a continuación:

  • Descubrimiento de Azure
  • Descubrimiento de EC2
  • Descubrimiento del motor de cálculo de Google
  • Descubrimiento zen

Puerta

Este módulo mantiene el estado del clúster y los datos de la partición durante los reinicios completos del clúster. Los siguientes son los ajustes estáticos de este módulo:

Ajuste Valor posible Descripción
gateway.expected_nodes valor numérico (por defecto 0) La cantidad de nodos que se espera que estén en el clúster para la recuperación de fragmentos locales.
gateway.expected_master_nodes valor numérico (por defecto 0) La cantidad de nodos maestros que se espera que estén en el clúster antes de iniciar la recuperación.
gateway.expected_data_nodes valor numérico (por defecto 0) La cantidad de nodos de datos esperados en el clúster antes de iniciar la recuperación.
gateway.recover_after_time Valor de cadena (por defecto 5 m) Este es el intervalo entre las comprobaciones de uso del disco.
cluster.routing.allocation. disk.include_relocations Valor booleano (por defecto verdadero)

Esto especifica el tiempo durante el cual el proceso de recuperación esperará para comenzar independientemente de la cantidad de nodos unidos en el clúster.

gateway.recover_ after_nodes
gateway.recover_after_master_nodes
gateway.recover_after_data_nodes

HTTP

Este módulo gestiona la comunicación entre el cliente HTTP y las API de Elasticsearch. Este módulo se puede desactivar cambiando el valor de http.enabled a falso.

Las siguientes son las configuraciones (configuradas en elasticsearch.yml) para controlar este módulo:

S. No Configuración y descripción
1

http.port

Este es un puerto para acceder a Elasticsearch y va desde 9200-9300.

2

http.publish_port

Este puerto es para clientes http y también es útil en caso de firewall.

3

http.bind_host

Esta es una dirección de host para el servicio http.

4

http.publish_host

Esta es una dirección de host para el cliente http.

5

http.max_content_length

Este es el tamaño máximo de contenido en una solicitud http. Su valor predeterminado es 100 MB.

6

http.max_initial_line_length

Este es el tamaño máximo de URL y su valor predeterminado es 4kb.

7

http.max_header_size

Este es el tamaño máximo de encabezado http y su valor predeterminado es 8 kb.

8

http.compression

Esto habilita o deshabilita la compatibilidad con la compresión y su valor predeterminado es falso.

9

http.pipelinig

Esto habilita o deshabilita la canalización HTTP.

10

http.pipelining.max_events

Esto restringe el número de eventos que se pondrán en cola antes de cerrar una solicitud HTTP.

Índices

Este módulo mantiene la configuración, que se establece globalmente para cada índice. Las siguientes configuraciones están relacionadas principalmente con el uso de la memoria:

Cortacircuitos

Se utiliza para evitar que la operación provoque un OutOfMemroyError. La configuración restringe principalmente el tamaño del montón de JVM. Por ejemplo, la configuración indices.breaker.total.limit, que por defecto es el 70% del montón de JVM.

Caché de datos de campo

Esto se usa principalmente al agregar en un campo. Se recomienda tener suficiente memoria para asignarlo. La cantidad de memoria utilizada para la caché de datos de campo se puede controlar mediante la configuración de indices.fielddata.cache.size.

Caché de consultas de nodo

Esta memoria se utiliza para almacenar en caché los resultados de la consulta. Esta caché utiliza la política de desalojo de menos usados ​​recientemente (LRU). La configuración de Indices.queries.cahce.size controla el tamaño de la memoria de este caché.

Búfer de indexación

Este búfer almacena los documentos recién creados en el índice y los vacía cuando el búfer está lleno. La configuración como indices.memory.index_buffer_size controla la cantidad de montón asignada para este búfer.

Caché de solicitud de fragmentos

Esta caché se usa para almacenar los datos de búsqueda local para cada fragmento. La caché se puede habilitar durante la creación del índice o se puede deshabilitar enviando un parámetro de URL.

Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true

Recuperación de índices

Controla los recursos durante el proceso de recuperación. Las siguientes son las configuraciones:

Ajuste Valor por defecto
indices.recovery.concurrent_streams 3
indices.recovery.concurrent_small_file_streams 2
indices.recovery.file_chunk_size 512 KB
indices.recovery.translog_ops 1000
indices.recovery.translog_size 512 KB
indices.recovery.compress cierto
indices.recovery.max_bytes_per_sec 40 MB

Intervalo TTL

El intervalo de tiempo de vida (TTL) define el tiempo de un documento, después del cual se elimina el documento. Las siguientes son las configuraciones dinámicas para controlar este proceso:

Ajuste Valor por defecto
indices.ttl.interval Años 60
indices.ttl.bulk_size 1000

Nodo

Cada nodo tiene la opción de ser nodo de datos o no. Puede cambiar esta propiedad cambiandonode.dataajuste. Establecer el valor comofalse define que el nodo no es un nodo de datos.