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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Como los dos fragmentos restantes se han movido al nodo recién iniciado:
____ ____
| 4 | | 5 |
|____| |____|
¿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:
____ ____ ____ ____ ____
| 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 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á en YELLOW
lugar de GREEN
. 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.