Elasticsearch
Configuración de Elasticsearch
Buscar..
Observaciones
Elasticsearch viene con un conjunto de valores predeterminados que proporcionan una buena experiencia de desarrollo fuera de la caja. La declaración implícita allí es que no es necesariamente excelente para la producción, que debe adaptarse a sus propias necesidades y, por lo tanto, no puede predecirse.
La configuración predeterminada facilita la descarga y la ejecución de varios nodos en la misma máquina sin ningún cambio de configuración.
¿Dónde están los ajustes?
Dentro de cada instalación de Elasticsearch hay una config/elasticsearch.yml . Ahí es donde viven las siguientes configuraciones :
-
cluster.name- El nombre del clúster al que se une el nodo. Todos los nodos en el mismo clúster deben compartir el mismo nombre.
- Actualmente por defecto a
elasticsearch.
-
node.*-
node.name- Si no se proporciona, se generará un nombre aleatorio cada vez que se inicie el nodo . Esto puede ser divertido, pero no es bueno para entornos de producción.
- Los nombres no tienen que ser únicos, sino que deben ser únicos.
-
node.master- Un entorno booleano. Cuando es
true, significa que el nodo es un nodo maestro elegible y puede ser el nodo maestro elegido. - El valor predeterminado es
true, lo que significa que cada nodo es un nodo maestro elegible.
- Un entorno booleano. Cuando es
-
node.data- Un entorno booleano. Cuando es
true, significa que el nodo almacena datos y maneja la actividad de búsqueda. - Por defecto es
true.
- Un entorno booleano. Cuando es
-
-
path.*-
path.data- La ubicación en la que se escriben los archivos para el nodo. Todos los nodos usan este directorio para almacenar metadatos, pero los nodos de datos también lo usarán para almacenar / indexar documentos.
- El valor predeterminado es
./data.- Esto significa que los
datase crearán para usted como un directorio de pares paraconfigdentro del directorio de Elasticsearch.
- Esto significa que los
-
path.logs- La ubicación donde se escriben los archivos de registro.
- El valor predeterminado es
./logs.
-
-
network.*network.host- El valor predeterminado es
_local_, que es efectivamentelocalhost.- ¡Esto significa que, de forma predeterminada, los nodos no se pueden comunicar desde fuera de la máquina actual!
- El valor predeterminado es
network.bind_host- Potencialmente una matriz, esto le dice a Elasticsearch qué direcciones de la máquina actual también deben enlazar sockets.
- Es esta lista la que permite que las máquinas desde fuera de la máquina (por ejemplo, otros nodos en el clúster) se comuniquen con este nodo.
- El valor predeterminado es
network.host.
- Potencialmente una matriz, esto le dice a Elasticsearch qué direcciones de la máquina actual también deben enlazar sockets.
network.publish_host- Un host singular que se utiliza para anunciar a otros nodos la mejor manera de comunicarse con este nodo.
- Al suministrar una matriz a
network.bind_host, este debe ser el único host que se pretende utilizar para la comunicación entre nodos.
- Al suministrar una matriz a
- Por defecto a la red.
- Un host singular que se utiliza para anunciar a otros nodos la mejor manera de comunicarse con este nodo.
-
discovery.zen.*-
discovery.zen.minimum_master_nodes- Define quórum para elección magistral. Esto debe establecerse usando esta ecuación:
(M / 2) + 1dondeMes el número de nodos maestros elegibles (nodos que usannode.master: trueimplícitamente o explícitamente). - El valor predeterminado es
1, que solo es válido para un clúster de un solo nodo.
- Define quórum para elección magistral. Esto debe establecerse usando esta ecuación:
-
discovery.zen.ping.unicast.hosts- El mecanismo para unir este nodo al resto de un cluster.
- Esto debe incluir los nodos maestros elegibles para que un nodo pueda encontrar el resto del clúster.
- El valor que se debe utilizar aquí es el
network.publish_hostde esos otros nodos. - El valor predeterminado es
localhost, lo que significa que solo busca en la máquina local un clúster para unirse.
-
¿Qué tipo de configuraciones existen?
Elasticsearch ofrece tres tipos diferentes de configuraciones:
- Configuraciones de todo el cluster
- Estas son configuraciones que se aplican a todo en el clúster, como todos los nodos o todos los índices.
- Configuraciones de nodo
- Estas son configuraciones que se aplican solo al nodo actual.
- Configuración del índice
- Estas son configuraciones que se aplican solo al índice.
Dependiendo de la configuración, puede ser:
- Cambiado dinámicamente en tiempo de ejecución
- Cambiado después de un reinicio (cierre / apertura) del índice
- Algunas configuraciones de índice no requieren que el índice se cierre y se vuelva a abrir, pero podría requerir que el índice se vuelva a fusionar de manera forzosa para que se aplique la configuración.
- El nivel de compresión de un índice es un ejemplo de este tipo de configuración. Se puede cambiar dinámicamente, pero solo los nuevos segmentos aprovechan el cambio. Entonces, si un índice no cambia, entonces nunca se aprovecha del cambio a menos que obligue al índice a recrear sus segmentos.
- Algunas configuraciones de índice no requieren que el índice se cierre y se vuelva a abrir, pero podría requerir que el índice se vuelva a fusionar de manera forzosa para que se aplique la configuración.
- Cambiado después de un reinicio del nodo
- Cambiado después de un reinicio del clúster
- Nunca cambió
Siempre revise la documentación de su versión de Elasticsearch para saber qué puede o no puede hacer con una configuración.
¿Cómo puedo aplicar la configuración?
Puede establecer la configuración de varias maneras, algunas de las cuales no se sugieren:
- Argumentos de línea de comando
En Elasticsearch 1.xy 2.x, puede enviar la mayoría de las configuraciones como Propiedades del sistema Java con el prefijo es. :
$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`
En Elasticsearch 5.x, esto cambia para evitar el uso de las Propiedades del sistema Java, en lugar de usar un tipo de argumento personalizado con -E tomando el lugar de -Des. :
$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`
Este enfoque para aplicar la configuración funciona muy bien cuando se usan herramientas como Puppet, Chef o Ansible para iniciar y detener el clúster. Sin embargo, funciona muy mal al hacerlo manualmente.
- Configuraciones de YAML
- Se muestra en ejemplos
- Ajustes dinámicos
- Se muestra en ejemplos
El orden en que se aplican las configuraciones es el orden más dinámico:
- Ajustes transitorios
- Ajustes persistentes
- Configuraciones de línea de comando
- Configuraciones YAML (estáticas)
Si la configuración se establece dos veces, una vez en cualquiera de esos niveles, el nivel más alto tendrá efecto.
Configuraciones de búsqueda elástica estática
Elasticsearch utiliza un archivo de configuración YAML (Yet Another Markup Language) que se puede encontrar dentro del directorio predeterminado de Elasticsearch (las instalaciones RPM y DEB cambian esta ubicación, entre otras cosas ).
Puede establecer configuraciones básicas en 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_
Configuración del clúster dinámico persistente
Si necesita aplicar una configuración dinámicamente después de que el clúster ya se haya iniciado, y realmente se puede establecer dinámicamente, entonces puede establecerla utilizando la API de _cluster/settings .
Las configuraciones persistentes son uno de los dos tipos de configuraciones a nivel de clúster que se pueden aplicar. Una configuración persistente sobrevivirá un reinicio completo del clúster.
Nota: No todas las configuraciones se pueden aplicar dinámicamente. Por ejemplo, el nombre del clúster no puede ser renombrado dinámicamente. La mayoría de las configuraciones de nivel de nodo tampoco se pueden establecer dinámicamente (porque no se pueden orientar individualmente).
Esta no es la API que se utiliza para establecer la configuración de nivel de índice. Se puede decir que la configuración es una configuración de nivel de índice porque debería comenzar con el index. . Configuraciones cuyo nombre está en forma de indices. son configuraciones de todo el clúster porque se aplican a todos los índices.
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Advertencia : en Elasticsearch 1.xy 2.x, no puede anular la configuración de una configuración persistente.
Afortunadamente, esto se ha mejorado en Elasticsearch 5.x y ahora puedes eliminar una configuración configurándola en null :
POST /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
Una configuración no establecida volverá a su valor predeterminado, o cualquier valor definido en un nivel de prioridad más bajo (por ejemplo, la configuración de la línea de comando).
Configuraciones transitorias de cluster dinámico
Si necesita aplicar una configuración dinámicamente después de que el clúster ya se haya iniciado, y realmente se puede establecer dinámicamente, entonces puede establecerla utilizando la API de _cluster/settings .
Las configuraciones transitorias son uno de los dos tipos de configuraciones a nivel de clúster que se pueden aplicar. Una configuración transitoria no sobrevivirá al reinicio completo del clúster.
Nota: No todas las configuraciones se pueden aplicar dinámicamente. Por ejemplo, el nombre del clúster no puede ser renombrado dinámicamente. La mayoría de las configuraciones de nivel de nodo tampoco se pueden establecer dinámicamente (porque no se pueden orientar individualmente).
Esta no es la API que se utiliza para establecer la configuración de nivel de índice. Se puede decir que la configuración es una configuración de nivel de índice porque debería comenzar con el index. . Configuraciones cuyo nombre está en forma de indices. son configuraciones de todo el clúster porque se aplican a todos los índices.
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
Advertencia : en Elasticsearch 1.xy 2.x, no puede desactivar una configuración transitoria sin un reinicio completo del clúster.
Afortunadamente, esto se ha mejorado en Elasticsearch 5.x y ahora puedes eliminar una configuración configurándola en nula:
POST /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": null
}
}
Una configuración no establecida volverá a su valor predeterminado, o cualquier valor definido en un nivel de prioridad más bajo (por ejemplo, configuraciones persistent ).
Configuración del índice
Las configuraciones de índice son aquellas configuraciones que se aplican a un solo índice. Dichos ajustes comenzarán con el index. . La excepción a esta regla es number_of_shards y number_of_replicas , que también existen en la forma de index.number_of_shards y index.number_of_replicas .
Como su nombre indica, la configuración de nivel de índice se aplica a un solo índice. Algunas configuraciones deben aplicarse en el momento de la creación porque no pueden cambiarse dinámicamente, como la configuración index.number_of_shards , que controla el número de fragmentos primarios para el índice.
PUT /my_index
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1
}
}
o, en un formato más conciso, puede combinar prefijos de clave en cada uno . :
PUT /my_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
Los ejemplos anteriores crearán un índice con la configuración suministrada. Puede cambiar dinámicamente la configuración por índice utilizando el _settings final de _settings índice. Por ejemplo, aquí cambiamos dinámicamente la configuración de slowlog solo para el nivel de advertencia:
PUT /my_index/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Advertencia : Elasticsearch 1.xy 2.x no validaron muy estrictamente los nombres de configuración de nivel de índice. Si tuvieras un error tipográfico, o simplemente hicieras un ajuste, entonces lo aceptaría a ciegas, pero de lo contrario lo ignoraría. Elasticsearch 5.x valida estrictamente los nombres de configuración y rechazará cualquier intento de aplicar configuraciones de índice con una configuración (es) desconocida (debido a un error tipográfico o un complemento faltante). Ambas declaraciones se aplican a los cambios dinámicos en la configuración del índice y en el momento de la creación.
Configuración del índice dinámico para múltiples índices al mismo tiempo
Puede aplicar el mismo cambio que se muestra en el ejemplo de Index Settings a todos los índices existentes con una solicitud, o incluso con un subconjunto de ellos:
PUT /*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
o
PUT /_all/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
o
PUT /_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}
Si prefiere hacerlo también de forma más selectiva, puede seleccionar múltiples sin suministrar todos:
PUT /logstash-*,my_other_index,some-other-*/_settings
{
"index": {
"indexing.slowlog.threshold.index.warn": "1s",
"search.slowlog.threshold": {
"fetch.warn": "500ms",
"query.warn": "2s"
}
}
}