Estoy tratando de entender qué fragmento y réplica hay en Elasticsearch, pero no pude entenderlo. Si descargo Elasticsearch y ejecuto el script, por lo que sé, he comenzado un clúster con un solo nodo. Ahora este nodo (mi PC) tiene 5 fragmentos (?) Y algunas réplicas (?).
¿Qué son? ¿Tengo 5 duplicados del índice? Si es así, ¿por qué? Podría necesitar alguna explicación.
elasticsearch
full-text-search
LuckyLuke
fuente
fuente
Respuestas:
Trataré de explicar con un ejemplo real, ya que la respuesta y las respuestas que recibiste no parecen ayudarte.
Cuando descarga elasticsearch y lo inicia, crea un nodo elasticsearch que intenta unirse a un clúster existente si está disponible o crea uno nuevo. Supongamos que creó su propio clúster nuevo con un solo nodo, el que acaba de iniciar. No tenemos datos, por lo tanto, necesitamos crear un índice.
Cuando crea un índice (un índice se crea automáticamente cuando indexa también el primer documento), puede definir cuántos fragmentos estará compuesto. Si no especifica un número, tendrá el número predeterminado de fragmentos: 5 primarios. Qué significa eso?
Significa que elasticsearch creará 5 fragmentos primarios que contendrán sus datos:
Cada vez que indexa un documento, Elasticsearch decidirá qué fragmento primario debe contener ese documento y lo indexará allí. Los fragmentos primarios no son una copia de los datos, ¡son los datos! Tener múltiples fragmentos ayuda a aprovechar el procesamiento paralelo en una sola máquina, pero el punto es que si comenzamos otra instancia de Elasticsearch en el mismo clúster, los fragmentos se distribuirán de manera uniforme sobre el clúster.
El nodo 1 contendrá, por ejemplo, solo tres fragmentos:
Como los dos fragmentos restantes se han movido al nodo recién iniciado:
¿Por qué pasó esto? Debido a que elasticsearch es un motor de búsqueda distribuido y de esta forma, puede utilizar múltiples nodos / máquinas para administrar grandes cantidades de datos.
Cada índice de Elasticsearch se compone de al menos un fragmento primario, ya que es donde se almacenan los datos. Sin embargo, cada fragmento tiene un costo, por lo tanto, si tiene un solo nodo y no hay un crecimiento previsible, simplemente quédese con un único fragmento primario.
Otro tipo de fragmento es una réplica. El valor predeterminado es 1, lo que significa que cada fragmento primario se copiará en otro fragmento que contendrá los mismos datos. Las réplicas se utilizan para aumentar el rendimiento de búsqueda y para la conmutación por error. Nunca se asignará un fragmento de réplica en el mismo nodo donde está el primario relacionado (sería casi como poner una copia de seguridad en el mismo disco que los datos originales).
Volviendo a nuestro ejemplo, con 1 réplica tendremos el índice completo en cada nodo, ya que se asignarán 2 fragmentos de réplica en el primer nodo y contendrán exactamente los mismos datos que los fragmentos primarios en el segundo nodo:
Lo mismo para el segundo nodo, que contendrá una copia de los fragmentos primarios en el primer nodo:
Con una configuración como esta, si un nodo se cae, todavía tiene todo el índice. Los fragmentos de réplica se convertirán automáticamente en primarios y el clúster funcionará correctamente a pesar del fallo del nodo, de la siguiente manera:
Como lo ha hecho
"number_of_replicas":1
, las réplicas ya no se pueden asignar, ya que nunca se asignan en el mismo nodo donde está su primario. Es por eso que tendrá 5 fragmentos no asignados, las réplicas y el estado del clúster será enYELLOW
lugar deGREEN
. Sin pérdida de datos, pero podría ser mejor ya que algunos fragmentos no se pueden asignar.Tan pronto como se haga una copia de seguridad del nodo que quedaba, se unirá nuevamente al clúster y las réplicas se asignarán nuevamente. El fragmento existente en el segundo nodo se puede cargar, pero deben sincronizarse con los otros fragmentos, ya que las operaciones de escritura probablemente ocurrieron mientras el nodo estaba inactivo. Al final de esta operación, el estado del clúster se convertirá
GREEN
.Espero que esto te aclare las cosas.
fuente
Un índice se divide en fragmentos para distribuirlos y escalarlos.
Las réplicas son copias de los fragmentos y proporcionan confiabilidad si se pierde un nodo. A menudo hay confusión en este número porque el conteo de réplicas == 1 significa que el clúster debe tener la copia principal y una copia replicada del fragmento disponible para estar en estado verde.
Para poder crear réplicas, debe tener al menos 2 nodos en su clúster.
Puede encontrar las definiciones aquí más fáciles de entender: http://www.elasticsearch.org/guide/reference/glossary/
Saludos cordiales, Paul
fuente
Si realmente no te gusta verlo amarillo. puede establecer el número de réplicas en cero:
Tenga en cuenta que debe hacer esto solo en su cuadro de desarrollo local.
fuente
Casco:
ElasticSearch
utiliza el concepto llamadoShard
para distribuir documentos de índice en todos los nodos.index
potencialmente puede almacenar una gran cantidad de datos que pueden exceder los límites de hardware de unasingle node
Elasticsearch
proporciona la capacidad de subdividir su índice en varias partes llamadasshards
.shards
que desea.Documents
se almacenanshards
y los fragmentos se asignannodes
en sucluster
cluster
crezca o se reduzca,Elasticsearch
migrará automáticamente fragmentos entre ellosnodes
para que loscluster
restos se equilibren.primary shard
o areplica shard
.single primary shard
, por lo que el número de fragmentos primarios que tiene determina la cantidad máxima de datos que puede contener su índicereplica shard
es solo una copia de un fragmento primario.Réplica:
Replica shard
es la copia deprimary Shard
, para evitar la pérdida de datos en caso de falla de hardware.Elasticsearch
le permite hacer una o más copias de los fragmentos de su índice en lo que se denomina fragmentos de réplica, oreplicas
para abreviar.index
se puede replicar un cero (lo que significa que no hay réplicas) o más veces.number of shards
réplicas y se pueden definir por índice en el momento en que se crea el índice.cannot change the number of shards
después de los hechos.Elasticsearch
se le asignan 5 fragmentos primarios y1 replica
eso significa que si tiene al menos dos nodos en su clúster, su índice tendrá 5 fragmentos primarios y otros 5 fragmentos de réplica (1 réplica completa) para un total de 10 fragmentos por índice.fuente
Un índice se divide en fragmentos para distribuirlos y escalarlos.
Las réplicas son copias de los fragmentos.
Un nodo es una instancia en ejecución de búsqueda elástica que pertenece a un clúster.
Un clúster consta de uno o más nodos que comparten el mismo nombre de clúster. Cada clúster tiene un único nodo maestro que el clúster elige automáticamente y que puede reemplazarse si el nodo maestro actual falla.
fuente
AWS ec2
instancias, cada una tiene elasticsearch instalado. Significa que tenemos tres nodos aquí? Si todos estos nodos tienen el mismocluster.name: test
conjunto de propiedades, ¿formará un nombre de Clústertest
que tenga tres nodos?Explicaré esto usando escenarios de palabras reales. Imagina que estás ejecutando un sitio web de comercio electrónico. A medida que se vuelve más popular, más vendedores y productos agregan a su sitio web. Te darás cuenta de que la cantidad de productos que necesitas indexar ha crecido y es demasiado grande para caber en un disco duro de un nodo. Incluso si cabe en el disco duro, realizar una búsqueda lineal a través de todos los documentos en una máquina es extremadamente lento. un índice en un nodo no aprovechará la configuración del clúster distribuido en el que trabaja el elasticsearch.
Entonces elasticsearch divide los documentos en el índice a través de múltiples nodos en el clúster. Cada división del documento se llama fragmento. Cada nodo que lleve un fragmento de un documento tendrá solo un subconjunto del documento. supongamos que tiene 100 productos y 5 fragmentos, cada fragmento tendrá 20 productos. Esta división de datos es lo que hace posible la búsqueda de baja latencia en Elasticsearch. La búsqueda se realiza en paralelo en múltiples nodos. Los resultados se agregan y devuelven. Sin embargo, los fragmentos no proporcionan tolerancia a fallas. Es decir, si algún nodo que contiene el fragmento está inactivo, el estado del clúster se vuelve amarillo. Lo que significa que algunos de los datos no están disponibles.
Para aumentar la tolerancia a fallas, las réplicas entran en escena. Por defecto, la búsqueda elástica crea una única réplica de cada fragmento. Estas réplicas siempre se crean en otro nodo donde el fragmento primario no reside. Entonces, para que el sistema sea tolerante a fallas, es posible que deba aumentar la cantidad de nodos en su clúster y también depende de la cantidad de fragmentos de su índice. La fórmula general para calcular el número de nodos requeridos en base a réplicas y fragmentos es "número de nodos = número de fragmentos * (número de réplicas + 1)". La práctica estándar es tener al menos una réplica para tolerancia a fallas.
Configurar el número de fragmentos es una operación estática, lo que significa que debe especificarlo cuando crea un índice. Cualquier cambio después de eso requerirá una reindexación completa de los datos y llevará tiempo. Pero, configurar el número de réplicas es una operación dinámica y también se puede hacer en cualquier momento después de la creación del índice.
Puede configurar el número de fragmentos y réplicas para su índice con el siguiente comando.
fuente
No es una respuesta, sino otra referencia de conceptos básicos para ElasticSearch, y creo que son bastante claros como complemento de la respuesta de @javanna.
Fragmentos
Réplicas
fuente
En ElasticSearch, en el nivel superior indexamos los documentos en índices. Cada índice tiene un número de fragmentos que distribuye internamente los datos y dentro de los fragmentos existen los segmentos de Lucene, que es el almacenamiento central de los datos. Entonces, si el índice tiene 5 fragmentos, significa que los datos se han distribuido entre los fragmentos y no existen los mismos datos en los fragmentos.
Cuidado con el video que explica el núcleo de ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Artículo sobre índices múltiples o fragmentos múltiples ¿ Búsqueda elástica, índices múltiples versus un índice y tipos para diferentes conjuntos de datos?
fuente
Elasticsearch es magníficamente escalable y todo el crédito se destina a su arquitectura distribuida. Se hace posible debido a Sharding. Ahora, antes de seguir adelante, consideremos un caso de uso simple y muy común. Supongamos que tiene un índice que contiene una gran cantidad de documentos, y por simplicidad, considere que el tamaño de ese índice es de 1 TB (es decir, la suma de tamaños de cada documento en ese índice es de 1 TB ) Además, suponga que tiene dos nodos, cada uno con 512 GB de espacio disponible para almacenar datos. Como se puede ver claramente, nuestro índice completo no puede almacenarse en ninguno de los dos nodos disponibles y, por lo tanto, debemos distribuir nuestro índice entre estos nodos.
En casos como este donde el tamaño de un índice excede los límites de hardware de un solo nodo, Sharding viene al rescate. Sharding resuelve este problema dividiendo los índices en piezas más pequeñas y estas piezas se denominan fragmentos.
fuente
En sus términos más simples,
shard
no es más que una parte de un índice que se almacena en el disco dentro de una carpeta separada:Esta captura de pantalla muestra todo el directorio de Elasticsearch.
Como puede ver, todos los datos van al
data
directorio.Al inspeccionar el índice
C-mAfLltQzuas72iMiIXNw
, vemos que tiene cinco fragmentos (carpetas0
para4
).Por otro lado, el
JH_A8PgCRj-GK0GeQ0limw
índice tiene solo un fragmento (0
carpeta).Las
pri
vistas el número total de fragmentos.fuente