unassigned - elasticsearch update mapping
Fragmentos y réplicas en Elasticsearch (7)
En ElasticSearch, en el nivel superior indexamos los documentos en índices. Cada índice tiene un número de fragmentos que distribuyen internamente los datos y dentro de los fragmentos Lucene existen los segmentos que son 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.
Mire 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 frente a un índice y tipos para diferentes conjuntos de datos?
Estoy tratando de entender qué fragmento y réplica hay en Elasticsearch, pero no logro entenderlo. Si descargo Elasticsearch y ejecuto el script, entonces, por lo que sé, he iniciado 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.
Explicaré esto usando una palabra real de escenarios. Imagina que estás ejecutando un sitio web de comercio electrónico. A medida que usted se vuelve más popular, más vendedores y productos se agregan a su sitio web. Se dará cuenta de que la cantidad de productos que podría necesitar para indexar ha aumentado y es demasiado grande para caber en un disco duro de un nodo. Incluso si encaja 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 de clúster distribuida en la que funciona la búsqueda de elastics.
Así que 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 un fragmento. Cada nodo que lleva un fragmento de un documento tendrá solo un subconjunto del documento. Supongamos que tiene 100 productos y 5 fragmentos, cada uno tendrá 20 productos. Esta fragmentació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 son agregados y devueltos. Sin embargo, los fragmentos no proporcionan tolerancia a fallos. Esto significa que 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 las réplicas de tolerancia a fallos entran en la imagen. Al anular la búsqueda elástica se crea una única réplica de cada fragmento. Estas réplicas siempre se crean en otro nodo donde el fragmento primario no reside. Por lo tanto, para que el sistema sea tolerante a fallos, es posible que deba aumentar la cantidad de nodos en su grupo y también depende de la cantidad de fragmentos de su índice. La fórmula general para calcular el número de nodos requeridos según las réplicas y los 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 la tolerancia a fallas.
Configurar el número de fragmentos es una operación estática, lo que significa que tiene que especificarlo cuando está creando un índice. Cualquier cambio posterior a eso requerirá una reindexación completa de los datos y llevará tiempo. Sin embargo, configurar la cantidad de réplicas es una operación dinámica y puede realizarse en cualquier momento después de la creación del índice también.
puede configurar el número de fragmentos y réplicas para su índice con el siguiente comando.
curl -XPUT ''localhost:9200/sampleindex?pretty'' -H ''Content-Type: application/json'' -d '' { "settings":{ "number_of_shards":2, "number_of_replicas":1 } } ''
Si realmente no te gusta verlo amarillo. puede establecer el número de réplicas para que sea cero:
curl -XPUT ''localhost:9200/_settings'' -d ''
{
"index" : {
"number_of_replicas" : 0
}
}
''
Tenga en cuenta que debe hacer esto solo en su cuadro de desarrollo local.
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. Digamos que creó su propio nuevo clúster 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 también indexa el primer documento) puede definir de qué fragmentos se compondrá. 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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Cada vez que indexe 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 varios fragmentos ayuda a aprovechar el procesamiento paralelo en una sola máquina, pero el punto es que si iniciamos 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á entonces, por ejemplo, solo tres fragmentos:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Dado que los dos fragmentos restantes se han movido al nodo recién iniciado:
____ ____
| 4 | | 5 |
|____| |____|
¿Por qué pasó esto? Porque elasticsearch es un motor de búsqueda distribuido y de esta manera puede hacer uso de 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 tiene un crecimiento previsible, simplemente quédese con un solo fragmento primario.
Otro tipo de fragmento es una réplica. El valor predeterminado es 1, lo que significa que todos los fragmentos primarios se copiarán 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 se encuentra el primario relacionado (sería como colocar una copia de seguridad en el mismo disco que los datos originales).
De vuelta a nuestro ejemplo, con 1 réplica tendremos el índice completo en cada nodo, ya que se asignarán 3 fragmentos de réplica en el primer nodo y contendrán exactamente los mismos datos que las primarias en el segundo nodo:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Lo mismo para el segundo nodo, que contendrá una copia de los fragmentos primarios en el primer nodo:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Como tiene "number_of_replicas":1
, las réplicas ya no se pueden asignar, ya que nunca se asignan en el mismo nodo donde se encuentra su primario. Es por eso que tendrá 5 fragmentos no asignados, las réplicas y el estado del clúster será YELLOW
lugar de GREEN
. No hay pérdida de datos, pero podría ser mejor ya que algunos fragmentos no se pueden asignar.
Tan pronto como el nodo que queda haya vuelto, se unirá al clúster de nuevo y las réplicas se asignarán de nuevo. El fragmento existente en el segundo nodo se puede cargar, pero deben estar sincronizados 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 pondrá GREEN
.
Espero que esto aclare las cosas para ti.
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 número de réplicas == 1 significa que el grupo debe tener la copia principal y 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
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 grupo tiene un solo nodo maestro que es elegido automáticamente por el grupo y que puede ser reemplazado si el nodo maestro actual falla.
Casco:
- Al ser un servidor de búsqueda distribuido,
ElasticSearch
utiliza el concepto llamadoShard
para distribuir documentos de índice en todos los nodos. - Un
index
puede almacenar potencialmente una gran cantidad de datos que pueden exceder los límites de hardware de unsingle node
- Por ejemplo, un solo índice de mil millones de documentos que ocupan 1TB de espacio en disco puede no caber en el disco de un solo nodo o puede ser demasiado lento para atender las solicitudes de búsqueda desde un solo nodo solo.
- Para resolver este problema,
Elasticsearch
ofrece la capacidad de subdividir su índice en varias partes llamadasshards
. - Cuando crea un índice, simplemente puede definir el número de
shards
que desea. -
Documents
se almacenan enshards
y los fragmentos se asignan a losnodes
de sucluster
- A medida que su
cluster
crece o se reduce,Elasticsearch
migrará automáticamente los fragmentos entrenodes
para que elcluster
permanezca equilibrado. - Un fragmento puede ser un
primary shard
o unreplica shard
. - Cada documento en su índice pertenece a un
single primary shard
, por lo que la cantidad de fragmentos primarios que tiene determina la cantidad máxima de datos que puede contener su índice - Un
replica shard
es solo una copia de un fragmento primario.
Réplica:
-
Replica shard
es la copia delprimary Shard
, para evitar la pérdida de datos en caso de falla del hardware. -
Elasticsearch
permite hacer una o más copias de los fragmentos de su índice en lo que se conoce como fragmentos de réplica, oreplicas
para abreviar. - Un
index
también se puede replicar en cero (es decir, sin réplicas) o más veces. - El
number of shards
y réplicas se puede definir por índice en el momento en que se crea el índice. - Después de crear el índice, puede cambiar el número de réplicas dinámicamente en cualquier momento, pero no
cannot change the number of shards
después del hecho. - De forma predeterminada, a cada índice en
Elasticsearch
se le asignan 5 fragmentos primarios y1 replica
que significa que si tiene al menos dos nodos en su grupo, 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.