Configuración de un clúster de Elasticsearch: Guía de configuración paso a paso
Configure un clúster de Elasticsearch con roles de nodo seguros, ajustes de descubrimiento, redes, tamaño del heap y comprobaciones de estado.
Configuración de un clúster de Elasticsearch: Guía de configuración paso a paso
Configurar un clúster de Elasticsearch consiste principalmente en tomar algunas decisiones iniciales correctamente: nombres de nodo, descubrimiento, roles, redes y memoria. Si esos aspectos básicos están mal, su clúster podría formarse de manera poco fiable, exponerse en la interfaz incorrecta o tener problemas durante los reinicios de nodos.
Esta guía explica los ajustes principales que debe revisar antes de poner Elasticsearch detrás de cargas de trabajo reales. Los ejemplos usan elasticsearch.yml y asumen un clúster pequeño de tres nodos, pero las mismas comprobaciones aplican al escalar.
Prerrequisitos
Antes de sumergirse en la configuración, asegúrese de tener lo siguiente en su lugar:
- Entorno de ejecución Java: Muchas distribuciones de Elasticsearch incluyen un JDK integrado. Si proporciona su propio entorno de ejecución Java, consulte la matriz de compatibilidad para su versión de Elasticsearch.
java -version - Recursos del sistema: Asigne suficiente RAM, CPU y espacio en disco para sus nodos de Elasticsearch. Los requisitos exactos dependen de su volumen de datos y la complejidad de las consultas.
- Acceso a la red: Asegúrese de que los nodos puedan comunicarse entre sí en los puertos de transporte configurados (el valor predeterminado es 9300).
Instalación
Aunque esta guía se centra en la configuración, una configuración exitosa comienza con una instalación correcta. Elasticsearch se puede instalar mediante gestores de paquetes (apt, yum), descargando el archivo o usando Docker. Consulte la documentación oficial de Elasticsearch para obtener instrucciones de instalación detalladas específicas para su sistema operativo o método de implementación.
Archivos de configuración principales
El archivo de configuración principal de Elasticsearch es elasticsearch.yml, que normalmente se encuentra en el directorio config/ de su instalación de Elasticsearch. Los ajustes clave dentro de este archivo determinan el comportamiento del clúster.
Configuración del clúster: Directivas de configuración clave
1. Nombre del clúster (cluster.name)
Este ajuste identifica de manera única su clúster. Todos los nodos en el mismo clúster deben compartir el mismo cluster.name. Si no se establece, el valor predeterminado es elasticsearch.
- Importancia: Esencial para que los nodos descubran y se unan al clúster correcto. Los diferentes clústeres en la misma red deben tener nombres distintos.
- Ejemplo (
elasticsearch.yml):cluster.name: mi-cluster-de-produccion
2. Rol del nodo (node.roles)
A los nodos de Elasticsearch se les pueden asignar roles específicos para optimizar la asignación de recursos y el rendimiento. Los roles comunes incluyen master, data, ingest y ml. Para clústeres más pequeños, un solo nodo puede tener múltiples roles.
- Nodo elegible como maestro: Responsable de acciones a nivel de clúster como crear/eliminar índices, rastrear nodos y asignar fragmentos. Se recomienda tener nodos maestros dedicados en entornos de producción para mayor estabilidad.
node.roles: [ master ] - Nodo de datos: Almacena datos y realiza operaciones relacionadas con datos como indexación y búsqueda. Los nodos de datos dedicados son cruciales para el rendimiento.
node.roles: [ data ] - Nodo de ingesta: Se utiliza para el preprocesamiento de documentos antes de la indexación (por ejemplo, usando canalizaciones de ingesta).
node.roles: [ ingest ] - Nodo de aprendizaje automático: Ejecuta funciones de aprendizaje automático para la detección de anomalías y otras tareas.
node.roles: [ ml ] - Nodo solo de coordinación: Maneja solicitudes de búsqueda y masivas, pero no almacena datos ni participa en la elección del maestro. Útil para descargar cargas de consultas pesadas de los nodos de datos o maestros.
node.roles: []
Mejor práctica: En producción, dedique nodos a roles específicos (por ejemplo, separe los nodos maestros de los nodos de datos) para una mejor tolerancia a fallos y rendimiento. Para configuraciones más pequeñas, los nodos pueden tener roles combinados.
3. Ajustes de red (network.host, http.port, transport.port)
Estos ajustes controlan cómo se comunican sus nodos de Elasticsearch.
network.host: La dirección IP o nombre de host al que se vincula el nodo. Para clústeres de múltiples nodos, configúrelo en una dirección IP accesible por otros nodos. Usar0.0.0.0lo vincula a todas las interfaces de red disponibles.network.host: 192.168.1.100 # o network.host: _site_ # o network.host: 0.0.0.0http.port: El puerto para la API REST HTTP (predeterminado: 9200).http.port: 9200transport.port: El puerto para la comunicación entre nodos (predeterminado: 9300).transport.port: 9300
Advertencia: Tenga en cuenta las reglas del firewall para asegurarse de que los nodos puedan comunicarse en el transport.port.
4. Ajustes de descubrimiento (discovery.seed_hosts, cluster.initial_master_nodes)
Estos ajustes son cruciales para que los nodos encuentren y se unan al clúster.
discovery.seed_hosts: Una lista de direcciones IP o nombres de host de otros nodos en el clúster a los que los nuevos nodos pueden conectarse para descubrir el clúster.discovery.seed_hosts: - "host1:9300" - "host2:9300" - "192.168.1.101:9300"cluster.initial_master_nodes: Una lista de nombres de nodos elegibles como maestro que se usa solo para arrancar un clúster completamente nuevo. Elimine este ajuste después de que el clúster se haya formado. Dejar ajustes de arranque obsoletos puede causar confusión durante reconstrucciones posteriores o formación accidental del clúster.cluster.initial_master_nodes: - "node-1" - "node-2" - "node-3"
Consejo: En entornos de nube o redes dinámicas, considere usar servicios como DNS o mecanismos de descubrimiento del proveedor de nube.
Configuración de un clúster de múltiples nodos
Para configurar un clúster de múltiples nodos, configurará el archivo elasticsearch.yml de cada nodo. Asegúrese de que:
cluster.namesea idéntico en todos los nodos.- Cada nodo tenga un
node.nameúnico (por ejemplo,node-1,node-2). network.hostesté configurado en una dirección IP accesible por otros nodos.discovery.seed_hostsenumere las direcciones de al menos un quórum de nodos elegibles como maestro.cluster.initial_master_nodesincluya los nombres de los nodos elegibles como maestro iniciales solo durante el primer arranque del clúster.
Ejemplo para node-1:
cluster.name: mi-cluster-de-produccion
node.name: node-1
node.roles: [ master, data ]
network.host: 192.168.1.100
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
Ejemplo para node-2 (similar, con node.name: node-2):
cluster.name: mi-cluster-de-produccion
node.name: node-2
node.roles: [ master, data ]
network.host: 192.168.1.101
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
5. Tamaño del heap (jvm.options)
Elasticsearch utiliza una cantidad significativa de memoria. El tamaño del heap de la Máquina Virtual Java (JVM) se configura en el archivo jvm.options (generalmente en el directorio config/). Se recomienda establecer el tamaño mínimo y máximo del heap al mismo valor para evitar problemas de rendimiento causados por el redimensionamiento del heap.
- Mejor práctica: Establezca el tamaño del heap en no más de la mitad de la RAM del sistema y deje memoria para la caché del sistema de archivos. Evite heaps demasiado grandes; muchas implementaciones se mantienen por debajo del umbral de punteros de objetos ordinarios comprimidos, que comúnmente está alrededor del rango de 30 GB, pero depende de la JVM.
Ejemplo (jvm.options):
-Xms4g
-Xmx4g
Esto establece tanto el tamaño inicial como el máximo del heap en 4 gigabytes.
6. Asignación y replicación de fragmentos (cluster.routing.*)
Estos ajustes controlan cómo se distribuyen y replican los fragmentos entre los nodos.
cluster.routing.allocation.disk.watermark.low,high,flood_stage: Umbrales para evitar la asignación de fragmentos en discos que se están quedando sin espacio.cluster.routing.allocation.enable: Controla la asignación de fragmentos (por ejemplo,all,primaries,new_primaries,none).
Ejemplo:
cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"
Verificación del estado del clúster
Una vez que los nodos estén iniciados, puede verificar el estado y la salud del clúster utilizando la API de estado del clúster.
curl -X GET "localhost:9200/_cluster/health?pretty"
Campos clave de salida:
status:green(todos los fragmentos asignados),yellow(algunas réplicas no asignadas),red(algunos fragmentos primarios no asignados).number_of_nodes: El número total de nodos en el clúster.number_of_data_nodes: El número de nodos designados como nodos de datos.active_shards,relocating_shards,initializing_shards,unassigned_shards.
Consejo: Apunte a un estado green. Un estado yellow indica que, aunque sus datos están seguros (los fragmentos primarios están asignados), es posible que carezca de suficientes réplicas para una alta disponibilidad. Un estado red significa que los datos están en riesgo y requieren atención inmediata.
Próximos pasos
Después de configurar exitosamente su clúster de Elasticsearch, normalmente procederá a:
- Creación de índices: Defina cómo se almacenarán y organizarán sus datos.
- Mapeo: Defina el esquema de sus documentos, especificando tipos de datos para los campos.
- Analizadores: Configure el análisis de texto para una búsqueda de texto completo efectiva.
- Seguridad: Implemente autenticación y autorización.
Esta guía proporciona la base esencial para un clúster de Elasticsearch estable y eficiente. El monitoreo continuo y la optimización basada en su carga de trabajo específica son clave para el éxito a largo plazo.