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.
Ensuite, en utilisant une méthode similaire, 16 est le nombre optimal de clients pour atteindre 62 000 événements indexés par seconde.
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.
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.
Le nombre optimal de clients est de 32. Par
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.
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.
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.
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.
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.
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:
- Dimensionnement d'Elasticsearch
- Comment les licences Elastic Stack (Elasticsearch) sont-elles concédées et différentes?
- Comprendre l'apprentissage automatique dans la pile élastique (alias Elasticsearch, alias ELK)
- Ălastique sous le verrou: activation des options de sĂ©curitĂ© pour le cluster Elasticsearch pour un accĂšs de l'intĂ©rieur et de l'extĂ©rieur
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 .