Dimensionnement d'Elasticsearch



- 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:
NodaConduireLa mémoireCPURéseau
Maütre↓↓↓↓
Les donnĂ©es↑↑↑↑→
IngĂ©rer↓→↑→
Apprentissage automatique↓↑↑↑↑→
Coordinateur↓→→→
↑↑ - trĂšs Ă©levĂ©, ↑ - Ă©levĂ©, → - moyen, ↓ - faible

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émentaire

Webinaire "Dimensionnement d'Elasticsearch et planification des capacités"

Webinaire sur la planification des capacités d'Elasticsearch

Discours à ElasticON sur le thÚme «Dimensionnement quantitatif des clusters»

Webinaire sur l'utilitaire Rally pour déterminer les indicateurs de performance du cluster

Article sur les tailles d'Elasticsearch

Webinaire sur la pile Ă©lastique

Source: https://habr.com/ru/post/fr470640/


All Articles