ElasticSearch de 400+ opération de cluster de nuds et la maintenance, nous résumons ces expériences

Auteur | Anton Hägerstrand

Traducteur | Yangzhen Tao

ingénieurs Meltwater de partager la façon dont leur fonctionnement et la maintenance des clusters de nuds ElasticSearch par le blog technique 400+ officiel. Décrit les caractéristiques des données de séries chronologiques accumulées d'affaires, la quantité de données et des stratégies de l'indice de roulement quotidien, ainsi que leur choix de la version ElasticSearch (oui, maintenant ils utilisent le 1.X, mais faire des changements au niveau de la source) pourquoi ne pas choisir un service de cloud computing gérés, la structure de l'indice et la planification fragmentation, et enfin se concentrer sur leurs efforts et de l'expérience en termes de performance, nous donnons une liste de référence de la performance.

Meltwater jour pour traiter les données de poste de millions de grandeur, et donc un besoin d'une technologie capable de gérer le stockage et la récupération des données de commande.

la version 0.11.X depuis le début, nous avons été un utilisateur fidèle est ElasticSearch. Après quelques tours et détours, nous pensons que, finalement, a fait le choix de la technologie droite.

ElasticSearch pour soutenir nos principales applications de surveillance des médias, le client à travers l'application peut récupérer et analyser les supports de données, tels que des articles de presse, (publics) messages Facebook, messages Instagram, blog et micro-blog. Nous avons recueilli l'aide d'un mélange API contenu, le traitement et l'exploration et un peu, afin qu'ils puissent être récupérés ElasticSearch.

Cet article partagera l'expérience que nous avons appris, comment accorder ElasticSearch, ainsi que quelques-uns des pièges à contourner.

La quantité de données

Chaque jour, le nombre de nouvelles et de micro-blogging très grand produit, au sommet des besoins de l'indice d'environ 3 millions d'éditoriaux, et près de 100 millions de données de messages sociaux. L'éditorial dans lequel la conservation à long terme des données pour la recherche (datant de 2009), les données de messages sociaux a sauvé près de 15 mois. Les données actuelles de découpe primaire utilisé environ 200 espace disque de la tuberculose, copier les données d'environ 600 TB.

Notre entreprise a trois mille demandes par minute. Toutes les demandes appelé « Recherche-service » du service, qui complètera tous Interagir avec groupe ElasticSearch à son tour. La plupart des règles de récupération sont complexes, y compris le panneau et le flux de nouvelles. Par exemple, un client peut être intéressé par Tesla et Elon Musk, mais veulent exclure toutes les informations sur SpaceX ou PayPal. Les utilisateurs peuvent utiliser une syntaxe similaire de requête Lucene et la syntaxe souple est la suivante:

Tesla "Elon Musk" NOT (SpaceX ou PayPal)

Nos plus longues telles requêtes ont plus de 60 pages. L'accent est mis sur: aucune requête est une requête comme « Barack Obama » dans Google si simple En plus de 3 mille demandes par minute,, il est tout simplement bête terrible, mais les nuds ES doit essayer de trouver un ensemble assorti de documents.

 édition

Nous courons une version personnalisée 1.7.6 est basée ElasticSearch. La seule différence entre cette version et la version 1.7.6 du tronc, nous rétroportage (backport) un bitsets rugissants / bitmaps en tant que cache. Cette fonction est transplanté à partir de 5 à Lucene Lucene 4, qui correspond à la version ES 1.X transplanté. ElasticSearch 1.X défaut bitset utilisé comme cache pour les résultats rares pour les frais généraux est très grande, mais ElasticSearch 2.X a été optimisé.

Pourquoi ne pas utiliser ElasticSearch version plus récente de celui-ci? La principale raison est difficile de mettre à niveau. Dans une mise à niveau de roulement entre version majeure est disponible uniquement dans l'ES 5 à 6 (devrait également soutenir la mise à niveau de roulement ES 2 à 5, mais ne l'ont pas essayé). Par conséquent, nous pouvons mettre à jour en redémarrant le cluster. Est presque inacceptable Downtime pour nous, mais peut-être en mesure de répondre à un redémarrage provoqué 30-60 minutes les temps d'arrêt, et le vrai souci est le cas d'échec n'a pas vraiment processus rollback.

Jusqu'à présent, nous avons choisi de ne pas mettre à niveau le cluster. Bien sûr, nous espérons que peut être mis à jour, mais il y a plus de tâches urgentes. Comment mettre en uvre effectivement cette mise à jour n'a pas encore été finalisé, il est susceptible de choisir de créer un nouveau cluster, au lieu de mettre à niveau ceux qui existent déjà.

Configuration noeud

Nous avons commencé à exécuter le cluster principal AWS depuis Juin 2017, comme un exemple de l'utilisation du noeud de données i3.2xlarge. Avant de lancer COLO (Colocalisé Data Center) dans un cluster, mais migration ultérieure vers le cloud AWS, afin de gagner du temps dans le nouveau temps d'arrêt de la machine, nous faire une plus grande flexibilité dans l'expansion et la réduction du volume.

Nous avons couru trois nuds candidats maître disponibles dans différents domaines et à discovery.zen.minimum_master_nodes ensemble 2. Ce problème est d'éviter split-brain problème de split brain stratégie très commune.

Nos ensemble de données en termes de stockage, 80% de la capacité requise et trois exemplaires ou plus, ce qui nous permet d'exécuter le nud de données 430. Dans un premier temps l'intention d'utiliser les données à différents niveaux, des données plus anciennes stockées sur des disques plus lents, mais étant donné que nous ne liés à un ordre de grandeur inférieur de plus de 15 mois de données (données de modifier uniquement parce que nous les anciennes données mis au rebut sociaux ), mais cela n'a pas fonctionné. Le matériel est en tête beaucoup plus d'un mois à courir dans le COLO, mais les services de cloud computing soutenir l'expansion cluster 2 fois, et presque sans dépenser beaucoup de temps.

Vous pouvez demander, pourquoi choisir leur propre gestion et la maintenance groupe ES. En fait, nous avons examiné le plan d'hébergement, mais à la fin a choisi d'installer leur propre, au motif que: AWS ElasticSearch service exposé à contrôlabilité pauvres de l'utilisateur, le coût-Cloud élastique que la course directement sur le cluster EC22-3 fois plus élevé.

Afin de se protéger quand on de la surface disponible est vers le bas, le nud dispersé dans l'UE-ouest-1 est disponible dans les trois domaines. Nous utiliser le plugin AWS pour terminer le réglage. Il offre une fonctionnalité appelée attributs de nud aws_availability_zone, nous cluster.routing.allocation.awareness.attributes à aws_availability_zone. Cela garantit qu'une copie des ES stockées dans une autre zone disponible, autant que possible, autant que possible pendant que la requête est acheminée vers la même zone des noeuds disponibles.

Ces instances sont en cours d'exécution Amazon Linux, montés temporairement ext4, environ 64 Go de mémoire. Nous mémoire tas alloué 26FR pour le noeud ES, pour le reste du cache disque. Pourquoi est-26FR? Parce que la machine virtuelle Java est construit sur une magie noire.

Nous utilisons également des groupes Terraform d'expansion automatique pour fournir des exemples et utiliser des marionnettes pour terminer toute la configuration de l'installation.

Structure Index

Parce que nos données et les requêtes sont basées sur des séries chronologiques, nous utilisons donc une indexation en fonction du temps, comme ELK (ElasticSearch, logstash, Kibana) pile. Tout en permettant également différents types de données stockées dans différentes bases de données d'index des documents et des éditoriaux tels que la classe de documents sociaux les données finales est dans une base de données d'index par jour différent. Cela ne peut être mis au rebut en cas de besoin indice social, et d'augmenter le nombre d'optimisation des requêtes. index Japon courir chaque tranche de l'un des deux.

L'ensemble a généré beaucoup de découpage en tranches (près 40k). Avec autant de fragments et les nuds, les opérations de cluster peuvent devenir plus spécial. Par exemple, la possibilité de supprimer l'index semble être le maître du cluster de goulot d'étranglement, il doit être poussé à l'information sur l'état du cluster pour tous les nuds. Nos données d'état du cluster d'environ 100 Mo, mais par compression TCP peut être réduite à 3 Mo (peut friser localhost: 9200 / _cluster / État / _ALL voir vos propres données d'état de cluster). nud maître est toujours nécessaire pour pousser 1,3 Go de données (430 x 3 Mo taille du noeud d'état) à chaque changement. En plus de cela 1,3 Go de données, il y a environ 860 Mo à transmettre entre la surface disponible (tels que l'Internet public par base). Ce serait plus de temps, en particulier lors de la suppression des index des centaines. Nous espérons que la nouvelle version de ElasticSearch pour optimiser ce, premier 2.0 prend en charge l'envoi des états ne cluster à partir du début de ces données de différence caractéristique ES.

 performance

Comme mentionné précédemment, notre ES groupent afin de répondre aux besoins des clients pour récupérer, traiter certaines requêtes très complexes.

En réponse à une charge de requête, au cours des quelques dernières années, nous avons fait beaucoup de travail en termes de performance. Nous devons essayer un partage équitable du test de performance groupe ES peut être vu de la citation suivante.

Malheureusement, lorsque le groupe est en baisse, moins d'un tiers de l'enquête peut être menée à bien. Nous croyons que le test lui-même conduit à un temps d'arrêt du cluster. - Extrait de l'utilisation de requêtes réelles sur les nouvelles ES grappe plate-forme du premier test de performance

Pour contrôler le processus d'exécution des requêtes, nous avons développé un plug-in pour réaliser une série de type de requête personnalisée. Pour fournir des fonctionnalités et l'optimisation des performances ElasticSearch version officielle est pas pris en charge par l'utilisation de ces types de requêtes. Par exemple, nous avons réalisé les expressions de requête génériques à l'appui de la mise en uvre de la requête SpanNear, l'autre est optimisé pour le soutien « * » au lieu de match tout requête, il y a un certain nombre d'autres fonctionnalités.

ElasticSearch Lucene et la performance dépend fortement de la requête spécifique et des données, il n'y a pas de solution miracle. Même si, pour donner encore un peu avancé de la référence de base:

  • Limitez votre champ de recherche, impliquant uniquement les données pertinentes . Par exemple, pour une base de données d'index par jour, récupérer uniquement en fonction de la plage de dates pertinentes. La plage de recherche d'index intermédiaire, pour éviter les requêtes / filtres de plage d'utilisation.

  • Ignorer les caractères génériques de préfixe Lorsque vous utilisez des caractères génériques - à moins que vous pouvez établir terme index inversé. Double fini wildcards difficile à optimiser.

  • Les signes de préoccupation liés à la consommation des ressources  nuds de données d'utilisation du processeur continuent de monter en flèche il? QI attendre à monter? GC jeter un oeil sur les statistiques. Ceux-ci peuvent être obtenus à partir de l'outil profileurs ou par un agent JMX. Si ParNewGC consomme plus de 15% du temps, pour vérifier le prochain journal de mémoire. S'il y a une pause SerialGC, vous pouvez vraiment avoir un problème.

  • Si vous avez le problème de la collecte des ordures, ne pas essayer de régler les paramètres GC . Cela arrive souvent parce que les paramètres par défaut ont été très raisonnables. Il est plutôt l'accent sur la réduction de l'allocation de mémoire. Plus précisément, comment faire? Voir ci-dessous.

  • Si vous rencontrez des problèmes de mémoire, mais il n'y a pas de temps à résoudre, peut envisager Azul Zing . Ceci est un produit très cher, mais vous seul pouvez les utiliser pour améliorer la machine virtuelle Java le débit deux fois. Mais à la fin, nous ne l'utilisons pas, parce que nous ne pouvons pas prouver la valeur pour l'argent.

  • Envisagez d'utiliser le cache Y compris ElasticSearch cache extérieur et cache niveau Lucene. Dans ElasticSearch 1.X cache peut être contrôlé à l'aide d'un filtre. Après la sortie semble plus difficile, mais les apparences peuvent être obtenus pour son propre type de mise en cache de requête. Nous pourrions faire un travail similaire à l'avenir pour passer à 2.X temps.

  • Voir s'il y a des données à chaud (Par exemple un noeud de supporter toute la charge). Vous pouvez essayer d'équilibrer la charge, en utilisant le filtrage de filtrage d'allocation de tesson politique affectation de tranche, ou essayer de migration de ligne de routage re-groupe de cluster reroutage de la fragmentation. Nous avons utilisé automatiquement réacheminés optimisation linéaire, mais l'utilisation de la stratégie d'automatisation simple est également d'une grande aide.

  • Mettre en place un environnement de test (Je préfère un ordinateur portable) partie représentative peut être chargée à partir de l'environnement de ligne de données (Recommandé qu 'au moins une tranche). Utilisez la lecture de la demande en ligne sous pression (plus difficile). Utiliser les paramètres locaux pour tester la consommation de ressource demandée.

  • Pour toutes ces raisons, Activation d'un profileur sur le processus ElasticSearch. Il est dans cette liste des plus importante . Nous utilisons également l'enregistreur de vol via Java Mission Control et VisualVM. Les gens essaient de spéculer sur les problèmes de performance (y compris consultant rémunéré / support technique) perdent leur (et votre) temps. JVM sous enquête quelle partie consomme du temps et de la mémoire, et ensuite explorer le code source ElasticSearch / Lucene, la section de vérification de code qui effectue une allocation ou de la mémoire.

  • Une fois que la demande est de savoir quelle partie a conduit à la réponse lente, vous pouvez optimiser par des tentatives de modifier la demande (Par exemple, la polymérisation des conseils changements à long terme est effectuée, ou le transfert type de requête). Modifier le type de séquence d'interrogation ou d'une requête, peut avoir un impact plus important. Si cela ne fonctionne pas, vous pouvez essayer d'optimiser le code ES / Lucene. Cela peut sembler exagéré, mais ils peuvent réduire les 3-4 fois la consommation CPU et 4-8 fois l'utilisation de la mémoire pour nous. Quelques modifications mineures (comme les indices requête), mais d'autres peuvent nous obliger à réécrire complètement l'exécution de la requête. Le code final est fortement dépendante de notre mode de requête, il peut ou ne peut pas être utilisé par d'autres. - à moins que vous pouvez établir terme index inversé. Double fini wildcards difficile à optimiser.

Description du graphique: le temps de réponse. Oui / Non rewrite Lucene exécution de la requête. Il a également montre qu'il n'y a plus beaucoup de fois sur des noeuds de mémoire sur une base quotidienne.

Soit dit en passant vers le bas, parce que je sais que nous serons confrontés à un problème: à partir d'un test de performance, nous savons que par la mise à niveau à ES 2.x peut légèrement améliorer les performances, mais ce qui ne change pas. Ceci étant dit, mais si vous avez migré du groupe ES 1.x à l'ES 2.X, nous aimerions entendre vos expériences sur la façon de terminer la migration.

Si vous avez lu jusqu'ici, vous êtes un vrai amour pour ElasticSearch ah (ou au moins vous avez vraiment besoin).

l'action Look sera en mesure de deviner la main de la campagne d'électricité, UZI mangent la main, le dernier ne peur que je suis sait
Précédent
chien âgé de 6 ans est équivalent à l'homme âgé de 40 ans? Après avoir lu « les gens de scie chien » Ceci est le cri d'affiche de groupe d'âge
Prochain
Cette vague d'interprétation rétro pas contre vous! Carhartt WIP 2017 série automne et l'hiver ont instantanément
Roi de gloire: A propos Shangxiang, les points suivants sont la clé de votre explosion de sortie
Millet 9 SE Évaluation: Ceci est un pick-up que vous ne voulez pas mettre le téléphone cellulaire
Utilisé en Autriche ou en allemand de l'automobile avec Panduit vous vous sentez un autre type de nylon 66
Explosif a allumé la sagesse de la vie! Ne pas l'acheter sur les empreintes digitales d'écran de téléphone cellulaire
Deux ans, il est riche champion de la façon de contre-attaque?
Mystérieusement personne ne sait, en utilisant les scripts Shell pour dissimuler les traces des opérations sur les serveurs Linux
frère Spiderman Pays-Bas brutalement spoof! Je pensais qu'il « accidentellement téléchargé l'ensemble du » complexe avec 4 « »
Amazon Sortie AWS 180 minutes plus d'une douzaine de nouveaux produits: l'apprentissage de la machine avec des puces, l'innovation AI, Block Chaining | re: Invent
Roi de gloire la nouvelle version sera mise à jour, ouvert héros partagé, amis disent est le point culminant de la nouvelle peau
Message: Black Shark 2 jeu téléphone mobile a officiellement déclaré l'exposition officielle / X27 vivo affiches
Et assez WTAPS commune? Il a en fait de faire quelque chose dans YOHOOD ci-dessus!