Cómo optimizar el espacio en disco y el uso de Elasticsearch

Aprende a prevenir y manejar los casos en los que el disco de Elasticsearch está demasiado lleno (sobreutilización) y cuando la capacidad del disco está infrautilizada para optimizar los costos del clúster.

¿Todavía no conoces Elasticsearch? Únete a nuestro webinar de los Primeros pasos con Elasticsearch. También puedes iniciar una prueba gratuita en el cloud o prueba Elastic en tu máquina ahora mismo.

La gestión de discos es importante en cualquier base de datos, y Elasticsearch no es una excepción. Si no tienes suficiente espacio en disco disponible, Elasticsearch dejará de asignar fragmentos al nodo. Esto acabará impidiéndote poder escribir datos en el clúster, con el riesgo potencial de pérdida de datos en tu aplicación. Por otro lado, si tienes demasiado espacio en disco, entonces estás pagando por más recursos de los que necesitas.

Antecedentes sobre las marcas de agua

Hay varios umbrales de "marca de agua" en tu clúster de Elasticsearch que te ayudan a rastrear el espacio disponible en disco. A medida que el disco se llena en un nodo, el primer umbral que se cruzará será la "marca de agua de disco bajo". El segundo umbral será entonces el "umbral alto de marca de agua en disco". Finalmente, se alcanzará la "fase de inundación de disco". Una vez superado este umbral, el clúster bloqueará la escritura en TODOS los índices que tengan un fragmento (primario o réplica) en el nodo que pasó la marca de agua. Las lecturas (búsquedas) seguirán siendo posibles.

Cómo prevenir y manejar casos cuando el disco está demasiado lleno (sobreutilización)

Existen varios métodos para gestionar casos cuando tu disco de Elasticsearch está demasiado lleno:

  1. Eliminar datos antiguos: Normalmente, los datos no deben conservar indefinidamente. Una forma de evitar y solucionar que el disco esté demasiado lleno es cerciorar de que, cuando los datos alcancen cierta edad, se archiven y eliminen de forma fiable. Una forma de hacerlo es usando ILM.
  2. Agregar capacidad de almacenamiento: Si no puedes eliminar los datos, quizá quieras agregar más nodos de datos o aumentar el tamaño de los discos para conservar todos los datos sin afectar negativamente al rendimiento. Si necesitas agregar capacidad de almacenamiento al clúster, deberías considerar si necesitas agregar solo capacidad de almacenamiento, o tanto capacidad de almacenamiento como RAM y recursos de CPU en proporción (ver la sección sobre la proporción entre tamaño de disco, RAM y CPU más abajo).

Cómo agregar capacidad de almacenamiento a tu clúster de Elasticsearch

  1. Aumentar el número de nodos de datos: Recuerda que los nuevos nodos deben tener el mismo tamaño que los nodos existentes y la misma versión de Elasticsearch.
  2. Aumentar el tamaño de los nodos existentes: En entornos basados en la nube, suele ser fácil aumentar el tamaño del disco y la RAM/CPU en los nodos existentes.
  3. Aumenta solo el tamaño del disco: En entornos basados en la nube, a menudo es relativamente fácil aumentar el tamaño del disco.
  4. Instantánea y restauración: Si estás dispuesto a permitir que se recuperen datos antiguos a petición en un proceso automatizado desde copias de seguridad, puedes hacer instantáneas de índices antiguos, eliminarlos y restaurar datos temporalmente a petición de las instantáneas. 
  5. Reducir réplicas por fragmento: Otra opción para reducir los datos es reducir el número de réplicas de cada fragmento. Para alta disponibilidad, te gustaría tener una réplica por fragmento, pero cuando los datos envejecen, podrías trabajar sin réplicas. Esto normalmente podría funcionar si los datos son persistentes o si tienes una copia de seguridad que restaurar si es necesario.
  6. Crea alertas: Para evitar que los discos se llenen en el futuro y actuar de forma proactiva, deberías crear alertas basadas en el uso del disco que te avisen cuando el disco empiece a llenar. 

Cómo prevenir y gestionar casos en los que la capacidad del disco está infrautilizada

Si la capacidad de tu disco está infrautilizada, existen varias opciones para reducir el volumen de almacenamiento en tu clúster.

Cómo reducir el volumen de almacenamiento en un clúster de Elasticsearch

Existen varios métodos para reducir el volumen de almacenamiento de un clúster.

1. Reducir el número de nodos de datos

Si quieres reducir el almacenamiento de datos y también reducir los recursos de RAM y CPU en la misma proporción, esta es la estrategia más sencilla. Desmantelar nodos innecesarios probablemente suponga el mayor ahorro de costos.

Antes de desactivar el nodo, deberías:

  • Cerciorar de que el nodo a desmantelar no sea necesario como nodo MAESTRO. Siempre deberías tener al menos tres nodos con el rol de nodo MAESTRO.
  • Migra los fragmentos de datos fuera del nodo para ser desmantelados.

2. Sustituir nodos existentes por nodos más pequeños

Si no puedes reducir aún más el número de nodos (normalmente 3 sería una configuración mínima), entonces quizá quieras reducir el tamaño de los nodos existentes. Recuerda que es recomendable cerciorar de que todos los nodos de datos tengan la misma memoria RAM y tamaño de disco, ya que los fragmentos se equilibran en función del número de fragmentos por nodo.

El proceso sería:

  • Agregar nuevos nodos más pequeños al clúster
  • Migra los fragmentos lejos de los nodos para ser desmantelados
  • Apaga los nodos antiguos

3. Reducir el tamaño del disco en los nodos

Si SOLO quieres reducir el tamaño del disco en los nodos sin cambiar la RAM o la CPU total del clúster, entonces puedes reducir el tamaño del disco para cada nodo. Reducir el tamaño del disco en un nodo Elasticsearch no es un proceso trivial.

La forma más sencilla de hacerlo suele ser:

  • Migrar fragmentos desde el nodo
  • Detener el nodo
  • Montar un nuevo volumen de datos en el nodo con el tamaño adecuado
  • Copiar todos los datos del volumen de disco antiguo al volumen nuevo
  • Desacoplar el antiguo volumen A
  • Nodo inicial y migra fragmentos de vuelta a nodo

Esto requiere que tengas suficiente capacidad en los otros nodos para almacenar temporalmente los fragmentos extra del nodo durante este proceso. En muchos casos, el costo de gestionar este proceso puede superar los posibles ahorros en el uso del disco. Por esta razón, puede ser más sencillo reemplazar el nodo por completo por uno nuevo con el tamaño de disco deseado (ver "Sustituir nodos existentes por nodos más pequeños" arriba).

Al pagar por recursos innecesarios, el costo obviamente puede reducir optimizando la utilización de los recursos.

La relación entre el tamaño del disco, la RAM y la CPU

La proporción ideal de capacidad de disco respecto a RAM en tu clúster dependerá de tu caso de uso particular. Por esta razón, al considerar cambios en tu capacidad de almacenamiento, también deberías considerar si las relaciones actuales de disco/RAM/CPU están adecuadamente equilibradas y si, como consecuencia, necesitas agregar o reducir RAM y CPU en la misma proporción.

Los requisitos de RAM y CPU dependen del volumen de actividad de indexación , el número y tipo de consultas, y también de la cantidad de datos que se están buscando y agregando. Esto suele ser proporcional a la cantidad de datos almacenados en el clúster y, por tanto, también debe estar relacionado con el tamaño del disco.

La proporción entre la capacidad del disco y la RAM puede cambiar según el caso de uso. Consulta algunos ejemplos aquí:

Actividad en el índiceRetenciónActividad de búsquedaCapacidad del discoCARNERO
Aplicación de búsqueda empresarialIngestión moderada de logarítmicLargoLuz2TB32GB
Monitorización de aplicacionesIngesta intensiva de troncosCortoLuz1TB32GB
Comercio electrónicoIndexación de datos de luzIndefinidoPesado500GB32GB

Recuerda que modificar la configuración de las máquinas de nodos debe hacer con cuidado, ya que puede implicar tiempo de inactividad de nodos y debes cerciorarte de que los fragmentos no empiecen a migrar a otros nodos ya sobreextendidos.

Contenido relacionado

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo