Dimensionnement d'un cluster Elasticsearch et test des performances dans Rally

Dans cet article, nous allons comprendre les approches de base du dimensionnement d'Elasticsearch, montrer des comparaisons des benchmarks de cluster lors du chargement des journaux et des métriques. Et la différence est perceptible là-bas. Nous espérons que cela vous aidera à déterminer la taille du cluster Elasticsearch et à décrypter que «cela dépend» .







En quelque sorte, cet article est une suite de notre article sur le dimensionnement sur Habré . Mais des exemples réels sont apparus ici, donc s'il y a un besoin d'une sorte de continuité, commencez par cet article, puis revenez ici. Tous les détails sont sous la coupe.



Cet article est basé sur l' analyse comparative et le dimensionnement de votre cluster Elasticsearch pour les journaux et les métriques sur le blog Elastic. Nous l'avons légÚrement modifié et avons supprimé les exemples avec Elastic basé sur le cloud.



Ressources matérielles du cluster Elasticsearch



Les performances d'un cluster Elasticsearch dépendent principalement de la façon dont vous l'utilisez et de ce qui s'exécute en dessous (au sens du matériel). Le matériel se caractérise par les éléments suivants:



Sauter



Le fournisseur recommande d'utiliser des disques SSD dans la mesure du possible. Mais, Ă©videmment, cela peut ne pas ĂȘtre le cas partout, donc l'architecture chaud-chaud-froid et l'Index Lifecycle Management (ILM) sont Ă  votre service.



Elasticsearch ne nécessite pas de stockage redondant (vous pouvez vous passer de RAID 1/5/10), les scénarios de stockage de journaux ou de métriques ont généralement au moins une réplique pour une tolérance de panne minimale.



Mémoire



La mémoire sur le serveur est divisée en:



JVM Heap. Stocke les métadonnées sur le cluster, les index, les segments, les segments et les données de champ de document. Idéalement, vous devriez allouer 50% de la RAM disponible à cela.



Cache du systĂšme d'exploitation. Elasticsearch utilisera la mĂ©moire disponible restante pour mettre en cache les donnĂ©es, ce qui amĂ©liorera considĂ©rablement les performances en empĂȘchant les lectures de disque pendant les recherches de texte intĂ©gral, les agrĂ©gations de valeurs de documents et le tri. Et n'oubliez pas de dĂ©sactiver le swap (fichier d'Ă©change) pour Ă©viter de vider le contenu de la RAM sur le disque puis de le lire (c'est lent!).



CPU



Les nƓuds Elasticsearch ont ce que l'on appelle. pools de threads et files d'attente de threads qui utilisent les ressources informatiques disponibles. Le nombre et les performances des cƓurs de processeur dĂ©terminent la vitesse moyenne et le dĂ©bit maximal des opĂ©rations de donnĂ©es dans Elasticsearch. Le plus souvent, il s'agit de 8 Ă  16 cƓurs.



Réseau



Performances du rĂ©seau - la bande passante et la latence peuvent affecter considĂ©rablement la communication entre les nƓuds Elasticsearch et la communication entre les clusters Elasticsearch. Veuillez noter que par dĂ©faut, une vĂ©rification de la disponibilitĂ© des nƓuds est effectuĂ©e toutes les secondes et si un nƓud ne ping pas dans les 30 secondes, il est marquĂ© comme indisponible et est arrĂȘtĂ© Ă  partir du cluster.



Dimensionnement d'un cluster Elasticsearch par volume de stockage



Le stockage des journaux et des mĂ©triques nĂ©cessite gĂ©nĂ©ralement une quantitĂ© importante d'espace disque, il est donc utile d'utiliser la quantitĂ© de ces donnĂ©es pour dĂ©terminer initialement la taille de notre cluster Elasticsearch. Voici quelques questions pour comprendre la structure de donnĂ©es qui doit ĂȘtre gĂ©rĂ©e dans un cluster:



  • Combien de donnĂ©es brutes (Go) allons-nous indexer par jour?
  • Combien de jours conserverons-nous les donnĂ©es?
  • Combien de jours y a-t-il dans la zone chaude?
  • Combien de jours y a-t-il dans la zone chaude?
  • Combien de rĂ©pliques seront utilisĂ©es?


Il est conseillé de mettre 5% ou 10% au-dessus et pour que 15% de l'espace disque total reste toujours en stock. Essayons maintenant de compter ce cas.



Taille totale des données (Go) = Nombre de données brutes par jour (Go) * Nombre de jours de stockage * (Nombre de réplicas + 1).



Stockage total (Go) = Total des données (Go) * (1 + 0,15 espace de stockage + 0,1 stockage supplémentaire).



Nombre total de nƓuds de donnĂ©es = OKRVVERH (taille totale des donnĂ©es (Go) / taille de la mĂ©moire par nƓud de donnĂ©es / mĂ©moire: ratio de donnĂ©es). Dans le cas d'une grande installation, il est prĂ©fĂ©rable de conserver un nƓud supplĂ©mentaire supplĂ©mentaire en stock.



Elastic recommande les ratios de mĂ©moire suivants: donnĂ©es pour diffĂ©rents types de nƓuds: chaud → 1:30 (30 Go d'espace disque par gigaoctet de mĂ©moire), chaud → 1: 160, froid → 1: 500). OKRVVERKH - entoure Ă  l'entier supĂ©rieur le plus proche.



Exemple de calcul de petit cluster



Supposons que ~ 1 Go de donnĂ©es arrive chaque jour, qui doit ĂȘtre stockĂ© pendant 9 mois.



Total des données (Go) = 1 Go x (9 mois x 30 jours) x 2 = 540 Go



Stockage total (Go) = 540 Go x (1 + 0,15 + 0,1) = 675 Go



Nombre total de nƓuds de donnĂ©es = 675 Go / 8 Go de RAM / 30 = 3 nƓuds.



Exemple de calcul d'un grand cluster



Vous obtenez 100 Go par jour et vous stockerez ces donnĂ©es pendant 30 jours dans la zone chaude et 12 mois dans la zone chaude. Vous disposez de 64 Go de mĂ©moire par nƓud, dont 30 Go sont allouĂ©s au tas JVM et le reste au cache du systĂšme d'exploitation. Le rapport mĂ©moire / donnĂ©es recommandĂ© pour la zone chaude est de 1:30, pour la zone chaude - 1: 160.



Ainsi, si vous obtenez 100 Go par jour et que vous devez stocker ces données pendant 30 jours, nous obtenons:



Quantité totale de données (Go) dans la zone chaude = (100 Go x 30 jours * 2) = 6000 Go de stockage



total de la zone chaude (Go) = 6000 Go x (1 + 0,15 + 0,1) = 7500 Go



Total des nƓuds de donnĂ©es de la zone chaude = OK 7500 / 64/30) + 1 = 5 nƓuds



Données totales (Go) dans la zone chaude= (100 Go x 365 jours * 2) = 73000 Go



Stockage total (Go) dans la zone chaude = 73000 Go x (1 + 0,15 + 0,1) = 91250 Go



Nombre total de nƓuds de donnĂ©es dans la zone chaude = OKRVVERKH (91250 / 64/160) + 1 = 10 nƓuds



Ainsi, nous avons obtenu 5 nƓuds pour la zone chaude et 10 nƓuds pour le fruit chaud. Pour la zone froide, calculs similaires, mais le ratio mĂ©moire: les donnĂ©es seront dĂ©jĂ  de 1: 500.



Des tests de performance



Une fois que la taille du cluster a été déterminée, il faut confirmer que les mathématiques fonctionnent dans la vraie vie.



Ce test utilise le mĂȘme outil que les ingĂ©nieurs d'Elasticsearch, Rally . Il est facile Ă  dĂ©ployer et Ă  exĂ©cuter et est entiĂšrement personnalisable, de sorte que plusieurs scĂ©narios (pistes) peuvent ĂȘtre testĂ©s.



Pour faciliter l'analyse des rĂ©sultats, le test est divisĂ© en deux sections: l'indexation et les requĂȘtes de recherche. Les tests utiliseront les donnĂ©es des pistes Metricbeat et des journaux du serveur Web .



Indexage



Les tests répondent aux questions suivantes:



  • Quel est le dĂ©bit maximal pour l'indexation des clusters?
  • Combien de donnĂ©es peuvent ĂȘtre indexĂ©es par jour?
  • Le cluster est-il plus grand ou plus petit que la taille appropriĂ©e?


Ce test utilise un cluster à 3 nƓuds avec la configuration suivante pour chaque nƓud:



  • 8 vCPU;
  • HDD;
  • 32 Go / 16 tas.


Test d'indexation n ° 1



L'ensemble de données utilisé pour le test est constitué de données Metricbeat avec les caractéristiques suivantes:



  • 1 079 600 documents;
  • Volume de donnĂ©es: 1,2 Go;
  • Taille moyenne des documents: 1,17 Ko.


Ensuite, il y aura plusieurs tests pour déterminer la taille optimale des paquets et le nombre optimal de threads.



Tout commence avec 1 client Rally pour trouver la taille de paquet optimale. Au dĂ©part, 100 documents sont chargĂ©s, puis leur nombre double lors des lancements suivants. Le rĂ©sultat sera une taille de lot optimale de 12 000 documents (soit environ 13,7 Mo). À mesure que la taille des paquets augmente, les performances commencent Ă  baisser.



image



Ensuite, en utilisant une méthode similaire, 16 est le nombre optimal de clients pour atteindre 62 000 événements indexés par seconde.



image



Au total, le cluster peut traiter un maximum de 62 000 Ă©vĂ©nements par seconde sans sacrifier les performances. Pour augmenter ce nombre, vous devrez ajouter un nouveau nƓud.



Ci-dessous, le mĂȘme test avec un paquet de 12 000 Ă©vĂ©nements, mais Ă  titre de comparaison, les donnĂ©es de bande passante sont donnĂ©es pour 1 nƓud, 2 et 3 nƓuds.



image



Pour un environnement de test, le débit d'indexation maximal sera:



  • Avec 1 nƓud et 1 fragment, 22 000 Ă©vĂ©nements par seconde ont Ă©tĂ© indexĂ©s;
  • Avec 2 nƓuds et 2 fragments, 43 000 Ă©vĂ©nements par seconde ont Ă©tĂ© indexĂ©s;
  • Avec 3 nƓuds et 3 fragments, 62 000 Ă©vĂ©nements par seconde ont Ă©tĂ© indexĂ©s.


Toute demande d'index supplĂ©mentaire sera mise en file d'attente et lorsqu'elle sera pleine, le nƓud rĂ©pondra en rejetant la demande d'index.



Veuillez noter que l'ensemble de données affecte les performances du cluster, il est donc important d'exécuter des pistes de rallye avec vos propres données.



Test d'indexation n ° 2



Pour l'étape suivante, les pistes de données du journal du serveur HTTP avec la configuration suivante seront utilisées:



  • 247 249 096 documents;
  • Volume de donnĂ©es: 31,1 Go;
  • Taille moyenne des documents: 0,8 Ko.


La taille optimale de l'emballage est de 16 000 documents.



image



Le nombre optimal de clients est de 32. Par



image



conséquent, le débit d'indexation maximal dans Elasticsearch est de 220 000 événements par seconde.



Chercher



Le débit de recherche sera estimé sur la base de 20 clients et de 1 000 opérations par seconde. Trois tests seront effectués pour la recherche.



Test de recherche n ° 1



Compare le temps de service (ou plutĂŽt le 90e centile) pour un ensemble de requĂȘtes.



Ensemble de données de Metricbeat:



  • Histogramme de date agrĂ©gĂ© avec intervalle automatique (auto-date-historgram);
  • Histogramme de date agrĂ©gĂ© avec fuseau horaire avec intervalle automatique (auto-date-histogram-with-tz);
  • Histogramme de date agrĂ©gĂ© (histogramme de date);
  • Histogramme de date agrĂ©gĂ© avec fuseau horaire (date-histogram-with-tz).


Vous pouvez voir que la requĂȘte auto-date-histogram-with-tz a la durĂ©e de service la plus longue du cluster.



image



Ensemble de données du journal du serveur HTTP:



  • DĂ©faut;
  • Terme;
  • Varier;
  • Hourly_agg;
  • Desc_sort_timestamp;
  • Asc_sort_timestamp.


Vous pouvez voir que les requĂȘtes desc_sort_timestamp et desc_sort_timestamp ont une durĂ©e de vie plus longue.



image



Test de recherche n ° 2 Regardons



maintenant les requĂȘtes parallĂšles. Voyons comment le temps de service du 90e centile augmente si les requĂȘtes sont exĂ©cutĂ©es en parallĂšle.



image



Test de recherche n ° 3



Tenez compte de la vitesse d'indexation et du temps de service des requĂȘtes de recherche en prĂ©sence d'une indexation parallĂšle.



ExĂ©cutons une tĂąche d'indexation et de recherche parallĂšle pour voir la vitesse d'indexation et la durĂ©e du service de requĂȘte.



image



Voyons comment le temps de service de requĂȘte du 90e centile a augmentĂ© lors de l'exĂ©cution de recherches en parallĂšle avec des opĂ©rations d'indexation.



image



Au total, avec 32 clients pour l'indexation et 20 utilisateurs pour la recherche:



  • Le dĂ©bit d'indexation est de 173 000 Ă©vĂ©nements par seconde, ce qui est infĂ©rieur Ă  220 000 lors des expĂ©riences prĂ©cĂ©dentes;
  • La bande passante de recherche est de 1 000 Ă©vĂ©nements par seconde.


Rally est un outil d'analyse comparative puissant, mais vous ne devez l'utiliser qu'avec des données qui seront également mises en production à l'avenir.






Quelques annonces:

Nous avons développé une formation sur les bases du travail avec Elastic Stack , qui est adaptée aux besoins spécifiques du client. Programme de formation détaillé sur demande.


Nous vous invitons Ă  vous inscrire Ă  l'Elastic Day en Russie et Ă  la CIS 2021, qui se tiendra en ligne le 3 mars de 10 h Ă  13 h.





Lisez nos autres articles:








Si vous ĂȘtes intĂ©ressĂ© par les services d'administration et de support pour votre installation Elasticsearch, vous pouvez laisser une demande dans le formulaire de commentaires sur une page spĂ©ciale.



Abonnez-vous Ă  notre groupe Facebook et Ă  notre chaĂźne Youtube .



All Articles