Je vais essayer d'expliquer avec un vrai exemple car la réponse et les réponses que vous avez obtenues ne semblent pas vous aider.
Lorsque vous téléchargez elasticsearch et démarrez-le, vous créez un noeud elasticsearch qui essaie de rejoindre un cluster existant s'il est disponible ou en crée un nouveau. Supposons que vous ayez créé votre propre nouveau cluster avec un seul nœud, celui que vous venez de démarrer. Nous n'avons pas de données, nous devons donc créer un index.
Lorsque vous créez un index (un index est automatiquement créé lorsque vous indexez également le premier document), vous pouvez définir le nombre de fragments qui le composera. Si vous ne spécifiez pas de nombre, il aura le nombre de fragments par défaut: 5 primaires. Qu'est-ce que ça veut dire?
Cela signifie qu'elasticsearch créera 5 fragments principaux qui contiendront vos données:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Chaque fois que vous indexez un document, elasticsearch décidera quel fragment principal est censé contenir ce document et l'indexera là. Les fragments primaires ne sont pas une copie des données, ce sont les données! Avoir plusieurs fragments aide à tirer parti du traitement parallèle sur une seule machine, mais le fait est que si nous démarrons une autre instance elasticsearch sur le même cluster, les fragments seront distribués de manière uniforme sur le cluster.
Le nœud 1 ne contiendra alors par exemple que trois fragments:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Étant donné que les deux fragments restants ont été déplacés vers le nœud nouvellement démarré:
____ ____
| 4 | | 5 |
|____| |____|
Pourquoi cela arrive-t-il? Parce qu'elasticsearch est un moteur de recherche distribué et de cette façon, vous pouvez utiliser plusieurs nœuds / machines pour gérer de grandes quantités de données.
Chaque index elasticsearch est composé d'au moins un fragment principal, car c'est là que les données sont stockées. Chaque fragment a un coût, cependant, donc si vous avez un seul nœud et aucune croissance prévisible, restez avec un seul fragment principal.
Un autre type de fragment est une réplique. La valeur par défaut est 1, ce qui signifie que chaque fragment principal sera copié dans un autre fragment qui contiendra les mêmes données. Les répliques sont utilisées pour augmenter les performances de recherche et pour le basculement. Un fragment de réplique ne sera jamais alloué sur le même noeud où se trouve le primaire associé (ce serait à peu près comme mettre une sauvegarde sur le même disque que les données d'origine).
Revenons à notre exemple, avec 1 réplique, nous aurons l'index entier sur chaque nœud, car 2 fragments de réplique seront alloués sur le premier nœud et ils contiendront exactement les mêmes données que les fragments principaux sur le deuxième nœud:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Idem pour le deuxième nœud, qui contiendra une copie des fragments principaux sur le premier nœud:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
Avec une configuration comme celle-ci, si un nœud tombe en panne, vous avez toujours l'index entier. Les fragments de réplique deviendront automatiquement des éléments primaires et le cluster fonctionnera correctement malgré la défaillance du nœud, comme suit:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Comme vous l'avez déjà fait "number_of_replicas":1
, les répliques ne peuvent plus être affectées car elles ne sont jamais allouées sur le même nœud que leur principal. C'est pourquoi vous aurez 5 fragments non attribués, les répliques et l'état du cluster seront à la YELLOW
place de GREEN
. Aucune perte de données, mais cela pourrait être mieux car certains fragments ne peuvent pas être attribués.
Dès que le nœud restant est sauvegardé, il rejoint à nouveau le cluster et les répliques sont à nouveau attribuées. Le fragment existant sur le deuxième nœud peut être chargé, mais ils doivent être synchronisés avec les autres fragments, car les opérations d'écriture se sont probablement produites alors que le nœud était en panne. À la fin de cette opération, l'état du cluster deviendra GREEN
.
J'espère que cela clarifie les choses pour vous.