Chapitre 9. Mise à l’échelle (Scaling out)

Ce chapitre couvre

  • Ajout de nœuds à votre cluster Elasticsearch
  • Choix du noeud master dans votre cluster Elasticsearch
  • Retrait et mise hors service des nœuds
  • Utilisation de l’API _cat pour comprendre votre cluster
  • Stratégies de planification et de mise à l’échelle (Scaling out)
  • Alias ​​et routage personnalisé

Maintenant que vous avez une bonne idée de ce dont Elasticsearch est capable, vous êtes prêt à entendre parler de la prochaine fonctionnalité phare d’Elasticsearch: la possibilité de redimensionner (scaler), c’est-à-dire de pouvoir gérer davantage d’indexation et de recherche au fur et à mesure que la charge augmente. De nos jours, la mise à l’échelle est un facteur important lorsqu’il s’agit de millions ou de milliards de documents. Vous ne pourrez pas toujours supporter la quantité de trafic que vous souhaitez sur une seule instance en cours d’exécution d’Elasticsearch, sans mise à l’échelle sous une forme ou une autre. Heureusement, Elasticsearch est facilement adaptable. Dans ce chapitre, nous examinerons les capacités de dimensionnement dont dispose Elasticsearch et comment vous pouvez les utiliser pour améliorer les performances et obtenir plus de fiabilité.

Après avoir déjà vu comment Elasticsearch traite les données de rencontre que nous avons présentées aux chapitres 2 et 3, nous sommes maintenant prêts à discuter de la façon d’adapter votre système de recherche à la gestion de tout le trafic que vous pouvez lui envoyer. Imaginez que vous êtes assis dans votre bureau et que votre patron annonce que votre site a été présenté dans le magazine Wired comme le nouveau site à la mode que tout le monde devrait utiliser pour réserver des rencontres sociales. Votre travail: assurez-vous qu’Elasticsearch puisse gerer l’afflux de nouveaux groupes et événements, ainsi que toutes les nouvelles recherches attendues sur le site une fois l’article de Wired publié! Vous avez 24 heures. Comment allez-vous étendre votre serveur Elasticsearch pour gérer ce trafic dans cette période? Heureusement, Elasticsearch facilite la mise à l’échelle en ajoutant des nœuds à votre cluster Elasticsearch existant.

9.1. AJOUT DE NŒUDS À VOTRE CLUSTER ÉLASTICSEARCH

Même si vous ne vous retrouvez pas dans une situation de travail semblable à celle que nous venons de décrire, au cours de votre expérimentation avec Elasticsearch, vous arriverez tôt ou tard au point où vous aurez besoin d’augmenter la puissance de traitement de votre cluster Elasticsearch.

Vous devez pouvoir rechercher et indexer les données dans vos index plus rapidement, avec plus de parallélisation; votre ordinateur manque d’espace disque ou le nœud Elasticsearch manque peut-être de mémoire lorsqu’il effectue des requêtes sur vos données. Dans ces cas, le moyen le plus simple d’améliorer les performances de votre nœud Elasticsearch consiste généralement à le transformer en un cluster Elasticsearch en ajoutant plusieurs nœuds, ce que vous avez appris à connaître au chapitre 2. Elasticsearch facilite la mise à l’échelle horizontale en ajoutant des nœuds à votre cluster. afin qu’ils puissent partager la charge de travail d’indexation et de recherche. En ajoutant des nœuds à votre cluster Elasticsearch, vous pourrez bientôt gérer l’indexation et la recherche parmi des millions de groupes et d’événements.

9.1.1. Ajout de nœuds à votre cluster

La première étape de la création d’un cluster Elasticsearch consiste à ajouter un autre nœud (ou nœuds) au nœud unique pour en faire un cluster de 2 nœuds. L’ajout d’un noeud à votre environnement de développement local est aussi simple que d’extraire la distribution Elasticsearch dans un répertoire distinct, de le saisir et d’exécuter la commande bin / elasticsearch, comme le montre l’extrait de code suivant. Elasticsearch choisira automatiquement le prochain port disponible (dans ce cas, 9201) et rejoindra automatiquement le nœud existant comme par magie! Si vous voulez aller plus loin, il n’est même pas nécessaire d’extraire la distribution d’Elasticsearch; Plusieurs instances d’Elasticsearch peuvent être exécutées à partir du même répertoire sans interférer les unes avec les autres:

Maintenant que vous avez ajouté un deuxième nœud Elasticsearch au cluster, vous pouvez exécuter la commande health à partir de l’endroit précédent et voir comment l’état du cluster a changé, comme indiqué dans la figure suivante.

Il n’y a maintenant plus de fragments non attribués dans ce cluster, comme vous pouvez le constater avec le compte unassigned_shards qui est zéro. Comment exactement les fragments se sont-ils retrouvés sur l’autre noeud? Examinez la figure 9.1 et voyez ce qu’il advient de l’index de test avant et après l’ajout d’un nœud au cluster. Sur le côté gauche, les fragments primaires pour l’index de test ont tous été affectés à Node1, tandis que les fragments de réplica ne sont pas attribués. Dans cet état, le cluster est jaune car tous les fragments primaires ont une maison, mais pas les répliques. Une fois qu’un deuxième nœud est ajouté, les fragments de répliques non attribués sont affectés au nouveau nœud Node2, ce qui entraîne le passage du cluster à l’état vert.

Lorsqu’un autre nœud est ajouté, Elasticsearch essaiera automatiquement d’équilibrer les fragments entre tous les nœuds. La figure 9.2 montre comment les mêmes fragments sont répartis sur trois nœuds Elasticsearch dans le même cluster. Notez qu’il n’existe aucune interdiction d’avoir des fragments primaires et de répliques sur le même noeud tant que les fragments primaires et de répliques d’un même numéro ne sont pas sur le même noeud.

Si un nombre encore plus grand de noeuds sont ajoutés à ce cluster, Elasticsearch tentera d’équilibrer le nombre de fragments entre eux de manière uniforme, car chaque noeud ajouté de cette manière partage la charge en prenant une partie des données (sous forme de fragments). Félicitations, vous venez de mettre à l’échelle horizontalement votre cluster Elasticsearch!

L’ajout de nœuds à votre cluster Elasticsearch apporte des avantages substantiels, le principal étant la haute disponibilité et des performances accrues. Lorsque les répliques sont activées (ce qui est le cas par défaut), Elasticsearch promeut automatiquement un fragment de réplique en fragment principal si le fragment principal ne peut pas être localisé. Ainsi, même si vous perdez le noeud où se trouvent les fragments principaux de votre index, vous pourrez toujours accéder aux données de vos index. Cette répartition des données entre les nœuds augmente également les performances, car les requêtes de recherche et d’extraction peuvent être traitées à la fois par des fragments primaires et des fragments de répliques, comme vous le rappellerez à la figure 2.9. Cette mise à l’échelle ajoute également plus de mémoire au cluster dans son ensemble. Ainsi, si les recherches et les agrégations gourmandes en mémoire prennent trop de temps ou entraînent un manque de mémoire, l’ajout de nœuds supplémentaires est presque toujours un moyen facile de gérer davantage de opérations complexes.

Maintenant que vous avez transformé votre nœud Elasticsearch en un véritable cluster en ajoutant un nœud, vous vous demandez peut-être comment chaque nœud a pu découvrir et communiquer avec le ou les autres nœuds. Dans la section suivante, nous parlerons des méthodes de découverte de nœuds d’Elasticsearch.

9.2. DÉCOUVERTE D’AUTRES NŒUDS ELASTICSEARCH

Vous vous demandez peut-être exactement comment le deuxième nœud que vous avez ajouté à votre cluster a découvert le premier nœud et a automatiquement rejoint le cluster. Les noeuds Elasticsearch peuvent utiliser deux méthodes différentes pour se découvrir: multidiffusion ou monodiffusion. Elasticsearch peut utiliser les deux à la fois, mais est configuré par défaut pour n’utiliser que la multidiffusion, car la monodiffusion nécessite une liste de noeuds connus auxquels se connecter.

9.2.1. Découverte multicast

Lorsque Elasticsearch démarre, il envoie un ping multicast à l’adresse 224.2.2.4 sur le port 54328, auquel répondent d’autres nœuds Elasticsearch portant le même nom de cluster. Par conséquent, si vous remarquez que la copie locale d’Elasticsearch exécutée par votre collègue et rejoignant votre cluster, vei