shards - replicas elasticsearch
¿Cuándo comienzas nodos Elasticsearch adicionales? (1)
Estoy en el medio de intentar reemplazar una configuración de Solr con Elasticsearch. Esta es una nueva configuración, que aún no ha visto producción, así que tengo mucho espacio para jugar con las cosas y hacer que funcionen bien.
Tengo muchísimas cantidades de datos. Estoy indexando algunos datos en vivo y manteniéndolos durante 7 días (usando el campo _ttl). No guardo ningún dato en el índice (y deshabilité el campo _source). Espero que mi índice se estabilice alrededor de 20 mil millones de filas. Estaré poniendo esta información en 2-3 índices nombrados. Hasta el momento, el rendimiento de la búsqueda con hasta mil millones de filas es totalmente aceptable, pero el rendimiento de la indexación es un problema.
Estoy un poco confundido acerca de cómo ES usa los fragmentos internamente. Creé dos nodos de ES, cada uno con un directorio de datos separado, cada uno con 8 índices y 1 réplica. Cuando miro el estado del clúster, solo veo un fragmento y una réplica para cada nodo. ¿No cada nodo mantiene múltiples índices ejecutándose internamente? (La comprobación de la ubicación de almacenamiento en disco muestra que definitivamente hay solo un índice Lucene presente). - Se resolvió, ya que mi configuración de índice no se recogió correctamente desde la configuración. Crear el índice usando la API y especificar la cantidad de fragmentos y réplicas ahora produjo exactamente lo que esperaba ver.
Además, traté de ejecutar múltiples copias del mismo nodo ES (desde la misma configuración), y reconoce que ya hay una copia ejecutándose y crea su propia área de trabajo. Estas nuevas instancias de nodos también parecen tener solo un índice en el disco. - Ahora que cada nodo está usando múltiples índices, un solo nodo con muchos índices es más que suficiente para estrangular todo el sistema, por lo que no es un problema.
¿Cuándo se inician nodos Elasticsearch adicionales para obtener el máximo rendimiento de indexación? ¿Debo tener muchos nodos ejecutados con 1 réplica de índice 1 o menos nodos con toneladas de índices? ¿Hay algo que me falta en mi configuración para que los nodos individuales hagan más trabajo?
Además: ¿Hay alguna métrica para saber cuándo un nodo HTTP está sobrecargado? Ahora mismo tengo un nodo dedicado solo a HTTP, pero aparte del uso de la CPU, no puedo decir si está funcionando bien o no. ¿Cuándo es el momento de iniciar nodos HTTP adicionales y dividir su software de indexación para apuntar a los distintos nodos?
Vamos a aclarar la terminología un poco primero:
- Nodo : ejecución de una instancia de Elasticsearch (un proceso de Java). Por lo general, cada nodo se ejecuta en su propia máquina.
- Clúster : uno o más nodos con el mismo nombre de clúster.
- Índice : más o menos como una base de datos.
- Tipo : más o menos como una tabla de base de datos.
- Shard : efectivamente un índice lucene. Cada índice está compuesto por uno o más fragmentos. Un fragmento puede ser un fragmento primario (o simplemente fragmento) o una réplica .
Cuando crea un índice, puede especificar la cantidad de fragmentos y el número de réplicas por fragmento. El valor predeterminado es 5 fragmentos primarios y 1 réplica por fragmento. Los fragmentos se distribuyen automáticamente de manera uniforme en el clúster. Nunca se asignará un fragmento de réplica en la misma máquina donde está el fragmento primario relacionado.
Lo que ves en el estado del clúster es raro, te sugiero que verifiques la configuración de tu índice utilizando la API de configuración de obtención . Parece que configuró solo un fragmento, pero de todos modos debería ver más fragmentos si tiene más de un índice. Si necesita más ayuda, puede publicar el resultado que obtiene de elasticsearch.
La cantidad de fragmentos y réplicas que utiliza realmente depende de sus datos, la forma de acceder a ellos y la cantidad de nodos / servidores disponibles. Es una buena práctica sobreasignar un poco los fragmentos para redistribuirlos en caso de que agregue más nodos a su clúster, ya que no puede (por ahora) cambiar el número de fragmentos una vez que haya creado el índice. De lo contrario, siempre puede cambiar la cantidad de fragmentos si está dispuesto a hacer un reindex completo de sus datos.
Cada fragmento adicional tiene un costo, ya que cada fragmento es efectivamente una instancia de Lucene. La cantidad máxima de fragmentos que puede tener por máquina realmente depende del hardware disponible y de sus datos también. Es bueno saber que tener 100 índices con cada fragmento o un índice con 100 fragmentos es realmente igual ya que tendría 100 instancias de lucene en ambos casos.
Por supuesto, en el momento de la consulta, si desea consultar un solo índice elasticsearch compuesto por 100 fragmentos, elasticsearch debería consultarlos a todos para obtener los resultados adecuados (a menos que utilice un enrutamiento específico para sus documentos y luego consulte solo un fragmento específico). Esto tendría un costo de rendimiento.
Puede verificar fácilmente el estado de su clúster y nodos utilizando la API de información de nodos de clúster a través de la cual puede verificar mucha información útil, todo lo que necesita para saber si sus nodos se ejecutan sin problemas o no. Aún más fácil, hay un par de complementos para verificar esa información a través de una agradable interfaz de usuario (que internamente usa las API bigdesk todos modos): paramedic y bigdesk .