J'essaie de comprendre ce qu'est un fragment et une réplique dans Elasticsearch, mais je n'ai pas réussi à le comprendre. Si je télécharge Elasticsearch et exécute le script, à partir de ce que je sais, j'ai démarré un cluster avec un seul nœud. Maintenant, ce nœud (mon PC) a 5 fragments (?) Et quelques répliques (?).
Quels sont-ils, ai-je 5 doublons de l'index? Si oui, pourquoi? Je pourrais avoir besoin d'explications.
elasticsearch
full-text-search
Lucky Luke
la source
la source
Réponses:
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:
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:
Étant donné que les deux fragments restants ont été déplacés vers le nœud nouvellement démarré:
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:
Idem pour le deuxième nœud, qui contiendra une copie des fragments principaux sur le premier nœud:
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:
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 à laYELLOW
place deGREEN
. 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.
la source
Un index est divisé en fragments afin de les distribuer et de les mettre à l'échelle.
Les répliques sont des copies des fragments et offrent une fiabilité en cas de perte d'un nœud. Il y a souvent de la confusion dans ce nombre car le nombre de répliques == 1 signifie que le cluster doit avoir la copie principale et répliquée du fragment disponible pour être à l'état vert.
Pour que des répliques soient créées, vous devez avoir au moins 2 nœuds dans votre cluster.
Vous pouvez trouver les définitions ici plus faciles à comprendre: http://www.elasticsearch.org/guide/reference/glossary/
Cordialement, Paul
la source
Si vous n'aimez vraiment pas le voir jaune. vous pouvez définir le nombre de répliques à zéro:
Notez que vous ne devez le faire que sur votre boîte de développement locale.
la source
Tesson:
ElasticSearch
utilise le concept appeléShard
pour distribuer les documents d'index sur tous les nœuds.index
peut potentiellement stocker une grande quantité de données pouvant dépasser les limites matérielles d'unsingle node
Elasticsearch
offre la possibilité de subdiviser votre index en plusieurs morceaux appelésshards
.shards
souhaité.Documents
sont stockés dansshards
, et les fragments sont alloués ànodes
dans votrecluster
cluster
fur et à mesure que votre croissance ou rétrécissement,Elasticsearch
migrera automatiquement les fragments entrenodes
afin que lecluster
reste reste équilibré.primary shard
ou unreplica shard
.single primary shard
, donc le nombre de fragments principaux que vous avez détermine la quantité maximale de données que votre index peut contenirreplica shard
n'est qu'une copie d'un fragment principal.Réplique:
Replica shard
est la copie deprimary Shard
, pour éviter la perte de données en cas de panne matérielle.Elasticsearch
vous permet de faire une ou plusieurs copies des fragments de votre index en ce que l'on appelle des fragments de réplique, oureplicas
pour faire court.index
peut également être répliqué zéro (ce qui signifie pas de répliques) ou plusieurs fois.number of shards
répliques et peuvent être définies par index au moment de la création de l'index.cannot change the number of shards
après coup.Elasticsearch
se voit allouer 5 fragments principaux,1 replica
ce qui signifie que si vous avez au moins deux nœuds dans votre cluster, votre index aura 5 fragments principaux et 5 autres fragments de réplique (1 réplique complète) pour un total de 10 fragments par indice.la source
Un index est divisé en fragments afin de les distribuer et de les mettre à l'échelle.
Les répliques sont des copies des fragments.
Un nœud est une instance en cours de recherche élastique qui appartient à un cluster.
Un cluster se compose d'un ou plusieurs nœuds qui partagent le même nom de cluster. Chaque cluster a un seul nœud maître qui est choisi automatiquement par le cluster et qui peut être remplacé en cas de défaillance du nœud maître actuel.
la source
AWS ec2
instances, chacune a installé elasticsearch. Signifie que nous avons trois nœuds ici? Si tous ces nœuds ont le mêmecluster.name: test
jeu de propriétés, va-t-il créer un nom de clustertest
qui aurait trois nœuds?Je vais expliquer cela en utilisant un vrai scénario de mots. Imaginez que vous dirigez un site Web de commerce électronique. À mesure que vous devenez plus populaire, plus de vendeurs et de produits s'ajoutent à votre site Web. Vous vous rendrez compte que le nombre de produits que vous pourriez avoir besoin d'indexer a augmenté et qu'il est trop grand pour tenir dans un disque dur d'un nœud. Même s'il tient dans le disque dur, effectuer une recherche linéaire à travers tous les documents sur une seule machine est extrêmement lent. un index sur un nœud ne bénéficiera pas de la configuration de cluster distribué sur laquelle fonctionne elasticsearch.
Elasticsearch répartit donc les documents de l'index sur plusieurs nœuds du cluster. Chaque fractionnement du document est appelé un fragment. Chaque nœud portant un fragment d'un document n'aura qu'un sous-ensemble du document. supposons que vous ayez 100 produits et 5 fragments, chaque fragment aura 20 produits. Ce partage des données rend possible la recherche à faible latence dans elasticsearch. la recherche est effectuée en parallèle sur plusieurs nœuds. Les résultats sont agrégés et renvoyés. Cependant, les fragments ne fournissent pas de tolérance aux pannes. Cela signifie que si un nœud contenant le fragment est en panne, la santé du cluster devient jaune. Cela signifie que certaines données ne sont pas disponibles.
Pour augmenter la tolérance aux pannes, les répliques entrent en image. Par deault, la recherche élastique crée une réplique unique de chaque fragment. Ces répliques sont toujours créées sur un autre nœud où le fragment principal ne réside pas. Donc, pour rendre le système tolérant aux pannes, vous devrez peut-être augmenter le nombre de nœuds dans votre cluster et cela dépend également du nombre de fragments de votre index. La formule générale pour calculer le nombre de nœuds requis en fonction des répliques et des fragments est "nombre de nœuds = nombre de fragments * (nombre de répliques + 1)". La pratique standard est d'avoir au moins une réplique pour la tolérance aux pannes.
La configuration du nombre de fragments est une opération statique, ce qui signifie que vous devez le spécifier lorsque vous créez un index. Tout changement après cela nécessitera une réindexation complète des données et prendra du temps. Mais, la configuration du nombre de répliques est une opération dynamique et peut également être effectuée à tout moment après la création de l'index.
vous pouvez configurer le nombre de fragments et de répliques pour votre index avec la commande ci-dessous.
la source
Pas une réponse mais une autre référence pour les concepts de base à ElasticSearch, et je pense qu'ils sont assez clairs en complément de la réponse de @ javanna.
Fragments
Les répliques
la source
Dans ElasticSearch, au niveau supérieur, nous indexons les documents dans des index. Chaque index a un certain nombre de fragments qui distribuent en interne les données et à l'intérieur des fragments existent les segments Lucene qui est le stockage de base des données. Donc, si l'index a 5 fragments, cela signifie que les données ont été réparties entre les fragments et qu'il n'y a pas les mêmes données dans les fragments.
Attention à la vidéo qui explique le cœur de l'ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Article sur plusieurs index ou plusieurs fragments Recherche élastique, plusieurs index vs un seul index et types pour différents ensembles de données?
la source
Elasticsearch est extrêmement évolutif avec tout le mérite de son architecture distribuée. Il est rendu possible grâce à Sharding. Maintenant, avant d'aller plus loin, considérons un cas d'utilisation simple et très courant. Supposons que vous ayez un index qui contient beaucoup de documents, et pour des raisons de simplicité, considérez que la taille de cet index est de 1 To (c'est-à-dire que la somme des tailles de chaque document de cet index est de 1 To ). Supposons également que vous disposez de deux nœuds avec chacun 512 Go d'espace disponible pour le stockage des données. Comme on peut le voir clairement, notre index complet ne peut être stocké dans aucun des deux nœuds disponibles et nous devons donc répartir notre index entre ces nœuds.
Dans des cas comme celui-ci où la taille d'un index dépasse les limites matérielles d'un seul nœud, Sharding vient à la rescousse. Sharding résout ce problème en divisant les indices en morceaux plus petits et ces morceaux sont nommés Shards.
la source
Dans ses termes les plus simples, le
shard
n'est rien d'autre qu'une partie d'un index stocké sur le disque dans un dossier séparé:Cette capture d'écran montre l'intégralité du répertoire Elasticsearch.
Comme vous pouvez le voir, toutes les données vont dans le
data
répertoire.En inspectant l'index,
C-mAfLltQzuas72iMiIXNw
nous voyons qu'il a cinq fragments (dossiers0
vers4
).En revanche, l'
JH_A8PgCRj-GK0GeQ0limw
index n'a qu'un seul fragment (0
dossier).Le
pri
vues le nombre total de tessons.la source