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 |
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.