
- Quelle est la taille d'un cluster dont j'ai besoin?
- Eh bien, ça dépend ... (gloussement de colÚre)
Elasticsearch est le cĆur de la pile Ă©lastique, dans laquelle se dĂ©roule toute la magie des documents: Ă©mission, rĂ©ception, traitement et stockage. Les performances dĂ©pendent du nombre correct de nĆuds et de l'architecture de la solution. Et le prix, d'ailleurs, aussi, si votre abonnement est Gold ou Platinum.
Les principales caractéristiques du matériel sont le disque (stockage), la mémoire (mémoire), les processeurs (calcul) et le réseau (réseau). Chacun de ces composants est responsable de l'action qu'Elasticsearch effectue sur les documents, qui sont respectivement le stockage, la lecture, le calcul et la réception / transmission. Parlons des principes généraux du dimensionnement et révélons le «ça dépend». Et à la fin de l'article, vous trouverez des liens vers des webinaires et des articles connexes. C'est parti!
Cet article est basé sur
le dimensionnement et la planification de la capacité du webinaire de David Moore . Nous avons complété son raisonnement par des liens et des commentaires pour le rendre un peu plus clair. à la fin de l'article, une piste bonus est des liens vers des matériaux élastiques pour ceux qui veulent mieux se plonger dans le sujet. Si vous avez une bonne expérience avec Elasticsearch, veuillez partager dans les commentaires comment concevoir un cluster. Nous et tous nos collÚgues aimerions connaßtre votre opinion.
Architecture et opérations d'Elasticsearch
Au dĂ©but de l'article, nous avons parlĂ© de 4 composants qui forment le matĂ©riel: disque, mĂ©moire, processeurs et rĂ©seau. Le rĂŽle d'un nĆud affecte l'Ă©limination de chacun de ces composants. Un nĆud peut jouer plusieurs rĂŽles Ă la fois, mais avec la croissance du cluster, ces rĂŽles doivent ĂȘtre rĂ©partis sur diffĂ©rents nĆuds.
Les nĆuds maĂźtres surveillent la santĂ© du cluster dans son ensemble. Dans le travail du nĆud maĂźtre, un quorum doit ĂȘtre observĂ©, c'est-Ă -dire leur nombre devrait ĂȘtre impair (peut-ĂȘtre 1, mais mieux 3).
Les nĆuds de donnĂ©es exĂ©cutent des fonctions de stockage. Pour augmenter les performances du cluster, les nĆuds doivent ĂȘtre divisĂ©s en
«chaud», «chaud» et «froid» (figé) . Les premiers sont pour l'accÚs en ligne, le second pour le stockage et le troisiÚme pour l'archivage. En conséquence, pour "chaud", il est raisonnable d'utiliser des disques SSD locaux, et pour les disques durs "chauds" et "froids", il convient localement ou en SAN.
Pour dĂ©terminer la capacitĂ© de stockage des nĆuds pour le stockage, Elastic recommande d'utiliser la logique suivante: «chaud» â 1:30 (30 Go d'espace disque par gigaoctet de mĂ©moire), «chaud» â 1: 100, «froid» â 1: 500). Sous le
tas JVM, pas plus de 50% de la mémoire totale et pas plus de 30 Go pour éviter le raid du ramasse-miettes. La mémoire restante sera utilisée comme cache du systÚme d'exploitation.
Les indicateurs de performances des instances Elastisearch tels que les
pools de threads et les files d'attente de threads sont plus affectés par l'
utilisation du cĆur du processeur. Les premiers sont formĂ©s sur la base des actions que le nĆud effectue: rechercher, analyser, Ă©crire et autres. Les seconds sont la file d'attente des requĂȘtes correspondantes de diffĂ©rents types. Le nombre de processeurs Elasticsearch disponibles Ă utiliser est dĂ©terminĂ© automatiquement, mais vous pouvez spĂ©cifier cette valeur manuellement dans les paramĂštres (cela peut ĂȘtre utile lorsque deux instances Elasticsearch ou plus s'exĂ©cutent sur le mĂȘme hĂŽte). Le nombre maximal de pools de threads et de files d'attente de threads de chaque type peut ĂȘtre dĂ©fini dans les paramĂštres. La mĂ©trique des pools de threads est la mĂ©trique de performances principale pour Elasticsearch.
Les nĆuds d'ingestion prennent les donnĂ©es des collecteurs (Logstash, Beats, etc.), effectuent des conversions sur eux et Ă©crivent dans l'index cible.
Les nĆuds d'apprentissage automatique sont destinĂ©s Ă l'analyse des donnĂ©es. Comme nous l'avons Ă©crit dans un
article sur l'apprentissage automatique dans Elastic Stack , le mĂ©canisme est Ă©crit en C ++ et fonctionne en dehors de la JVM, qui exĂ©cute Elasticsearch lui-mĂȘme, il est donc raisonnable d'effectuer de telles analyses sur un nĆud distinct.
Les nĆuds coordinateurs acceptent une demande de recherche et l'acheminent. La prĂ©sence de ce type de nĆud accĂ©lĂšre le traitement des requĂȘtes de recherche.
Si nous considĂ©rons la charge sur les nĆuds en termes de capacitĂ©s d'infrastructure, la distribution sera quelque chose comme ceci:
Ensuite, nous présentons 4 principaux types d'opérations dans Elasticsearch, chacune nécessitant un certain type de ressource.
Index - traitement et enregistrement d'un document dans l'index. Le diagramme ci-dessous montre les ressources utilisées à chaque étape.
Supprimer - supprimer un document de l'index.
Mise Ă jour - Fonctionne comme Index et Supprimer, car les documents dans Elasticsearch sont immuables.
Recherche - obtenir un ou plusieurs documents ou leur agrégation à partir d'un ou plusieurs index.

Nous avons compris l'architecture et les types de charges, passons maintenant Ă la formation d'un modĂšle de dimensionnement.
Dimensionnement d'Elasticsearch et questions avant sa formation
Elastic recommande d'utiliser deux stratégies de dimensionnement: orientée stockage et débit. Dans le premier cas, les ressources disque et la mémoire sont d'une importance primordiale, et dans le second cas, la mémoire, la puissance du processeur et le réseau.
Dimensionnement de l'architecture Elasticsearch en fonction de la taille du stockage
Avant les calculs, nous obtenons les données initiales. Besoin:
- La quantité de données brutes par jour;
- La période de stockage des données en jours;
- Facteur de transformation des données (facteur json + facteur d'indexation + facteur de compression);
- Nombre de réplications de fragments;
- La quantitĂ© de nĆuds de donnĂ©es de mĂ©moire;
- Le rapport mémoire / données (1:30, 1: 100, etc.).
Malheureusement, le facteur de transformation des données n'est calculé qu'empiriquement et dépend de diverses choses: le format des données brutes, le nombre de champs dans les documents, etc. Pour le savoir, vous devez charger une partie des données de test dans l'index. Sur le sujet de ces tests, il y a une
vidéo intéressante de la conférence et une
discussion dans la communauté Elastic . En général, vous pouvez le laisser égal à 1.
Par défaut,
Elasticsearch compresse les donnĂ©es en utilisant l'algorithme LZ4, mais il y a aussi DEFLATE, qui appuie 15% de plus. En gĂ©nĂ©ral, une compression de 20 Ă 30% peut ĂȘtre obtenue, mais elle est Ă©galement calculĂ©e empiriquement. Lors du passage Ă l'algorithme DEFLATE, la charge sur la puissance de calcul augmente.
Il y a encore des recommandations supplémentaires:
- Déposez 15% pour avoir une réserve d'espace disque;
- Engagez 5% pour les besoins supplémentaires;
- Fixez 1 Ă©quivalent d'un nĆud de donnĂ©es pour assurer une migration rapide.
Passons maintenant aux formules. Il n'y a rien de compliqué ici, et nous pensons qu'il sera intéressant pour vous de vérifier la conformité de votre cluster avec ces recommandations.
Quantité totale de données (Go) = données brutes par jour * nombre de jours de stockage * facteur de transformation des données * (nombre de répliques - 1)
Stockage total des données (Go) = Total des données (Go) * (1 + 0,15 stock + 0,05 besoins supplémentaires)
Nombre total de nĆuds = OK (Stockage total de donnĂ©es (Go) / Volume de mĂ©moire par nĆud / rapport mĂ©moire / donnĂ©es + 1 Ă©quivalent de nĆud de donnĂ©es)
Dimensionnement de l'architecture Elasticsearch pour dĂ©terminer le nombre de fragments et de nĆuds de donnĂ©es en fonction de la taille du stockage
Avant les calculs, nous obtenons les données initiales. Besoin:
- Le nombre de modÚles d'index que vous allez créer;
- Le nombre de fragments de base et de répliques;
- AprÚs combien de jours la rotation d'index sera effectuée, le cas échéant;
- Le nombre de jours pour stocker les indices;
- La quantitĂ© de mĂ©moire pour chaque nĆud.
Il y a encore des recommandations supplémentaires:
- Ne dĂ©passez pas 20 fragments par segment JVM de 1 Go sur chaque nĆud;
- Ne dépassez pas 40 Go d'espace disque de partition.
Les formules sont les suivantes:
Nombre de fragments = Nombre de modÚles d'index * Nombre de fragments principaux * (Nombre de fragments répliqués + 1) * Nombre de jours de stockage
Nombre de nĆuds de donnĂ©es = OK (nombre de fragments / (20 * mĂ©moire pour chaque nĆud))
Dimensionnement de la bande passante Elasticsearch
Le cas le plus courant lorsqu'une bande passante Ă©levĂ©e est nĂ©cessaire est frĂ©quent et dans les requĂȘtes de recherche en grand nombre.
Données initiales nécessaires pour le calcul:
- Recherches de pointe par seconde;
- Temps de réponse admissible moyen en millisecondes;
- Nombre de cĆurs et de threads par cĆur de processeur sur les nĆuds de donnĂ©es.
Valeur maximale des threads = OK (nombre maximal de requĂȘtes de recherche par seconde * nombre moyen de temps pour rĂ©pondre Ă une requĂȘte de recherche en millisecondes / 1000 millisecondes)
Pool de threads de volume = OKRUP ((nombre de cĆurs physiques par nĆud * nombre de threads par cĆur * 3/2) +1)
Nombre de nĆuds de donnĂ©es = OK (valeur maximale du thread / volume du pool de threads)
Peut-ĂȘtre que toutes les donnĂ©es initiales ne seront pas entre vos mains lors de la conception de l'architecture, mais aprĂšs avoir regardĂ© le
webinaire ou lu cet article, une compréhension apparaßtra qui affecte en principe la quantité de ressources matérielles.
Veuillez noter qu'il n'est pas nĂ©cessaire d'adhĂ©rer Ă l'architecture donnĂ©e (par exemple, crĂ©er des nĆuds coord coord et des nĆuds de gestionnaire). Il suffit de savoir qu'une telle architecture de rĂ©fĂ©rence existe et qu'elle peut donner une amĂ©lioration des performances que vous ne pourriez pas obtenir par d'autres moyens.
Dans l'un des articles suivants, nous publierons une liste complÚte des questions auxquelles il faut répondre pour déterminer la taille du cluster.
Pour nous contacter, vous pouvez utiliser des messages personnels sur Habré ou le
formulaire de feedback sur le site .
Matériel supplémentaireWebinaire "Dimensionnement d'Elasticsearch et planification des capacités"Webinaire sur la planification des capacités d'ElasticsearchDiscours à ElasticON sur le thÚme «Dimensionnement quantitatif des clusters»Webinaire sur l'utilitaire Rally pour déterminer les indicateurs de performance du clusterArticle sur les tailles d'ElasticsearchWebinaire sur la pile élastique