Technique

Exécuter Elasticsearch sur AWS

Partie 1 - Créer les instances

Nos clients nous disent souvent qu'ils exécutent des clusters Elasticsearch sur Amazon Web Services (AWS). AWS est un système pratique permettant de fournir et d'adapter les ressources informatiques en fonction de l'évolution des besoins de l'entreprise. Elasticsearch exploite l'architecture informatique à la demande de EC2 pour faciliter l'ajout et la suppression d'instances EC2 ainsi que des nœuds Elasticsearch correspondants, au fur et à mesure que les besoins en capacité et performance de l'entreprise évoluent.

Cet article vous explique comment déployer Elasticsearch 2.3.3 sur Amazon EC2. Dans cet exemple, nous configurerons un cluster Elasticsearch à trois nœuds.


Etape 1 : Choisir une Amazon Machine Image (AMI)

Elasticsearch s'exécute sous différents systèmes d'exploitation, tels que CentOS, Redhat, Ubuntu et Amazon Linux. Nous vous suggérons d'utiliser la dernière version d'Amazon Linux AMI.

Choose an Amazon Machine Image (AMI).png


Etape 2 : Choisir un type d'instance

Pour bien démarrer, choisissez un type d'instance m3.2xlarge, offrant 8 vCPU, 30 Go de mémoire, 2 disques SSD de 80 Go et une performance réseau élevée. Les disques SSD (Solid State Drive) sont préférables car l'indexation est gourmande en E/S et une performance de réseau élevée est essentielle pour un cluster performant et fiable.

M3.2xlarge est notre recommandation de base. Pour savoir si cela est adapté dans votre cas, effectuez un benchmark de votre solution afin de déterminer si elle convient en termes de performance et d'évolutivité.

Cliquez sur le bouton « Next: Configure Instance Details ».

Choose an Instance Type.png


Etape 3: Configurer les détails de l'instance

Chaque nœud Elasticsearch s'exécutera sur sa propre instance EC2, vous devez donc configurer le nombre d'instances sur 3.

A noter que tous les comptes AWS créés après le 4 décembre 2013 prennent uniquement en charge EC2-VPC ; l'option « Network » pour « Launch into EC2-Classic » ne sera donc pas disponible pour ces utilisateurs et ne devrait de toute façon pas être activée.

Il est judicieux de choisir « Enable termination protection » car cela empêche la suppression accidentelle de nœuds et de leurs données.

Laissez les valeurs par défaut dans les autres champs et cliquez sur le bouton « Next: Add Storage ».

Configure Instance Details.png


Etape 4: Ajouter de l'espace de stockage

Laissez le volume de stockage sur 8 Go. Si vous connaissez d'ores et déjà vos besoins de stockage d'indexation, vous pouvez ajuster ce chiffre maintenant. Laissez le type de volume sur « General Purpose SSD ».

Cliquez sur le bouton « Next : Tag Instance ».

Add Storage.png


Etape 5: Taguer l'instance

Dans ce champ, vous fournissez une paire clé/valeur, par exemple « name » et « esonaws », pour mieux vous souvenir de vos instances ec2.

Cliquez sur le bouton « Next : Configure Security Group ».

Step 5 Tag Instance.png


Etape 6: Configurer le group de sécurité

Ce panneau de configuration vous permet de configurer les règles du firewall pour l'accès à votre instance. Par défaut, Elasticsearch expose le port TCP 9200 pour l'accès REST API et le port TCP 9300 pour la communication interne du cluster. Pensez à ajouter des règles qui permettront la connexion au port TCP 9200 à partir de sous-réseaux précis, en général des sous-réseaux privés, et au port TCP 9300 à partir des sous-réseaux abritant les nœuds Elasticsearch. Si vous prévoyez de modifier les paramètres par défaut des ports dans elasticsearch.yml, configurez des règles pour ces ports plutôt que pour les ports TCP 9200 et 9300.

Ajoutez également une règle pour autoriser des connexions SSH sur le port 22, afin de pouvoir vous connecter à cette instance dans les étapes suivantes.

Cliquez sur le bouton « Review and Launch ».

Configure Security Group.png


Etape 7: Verifier et lancer l'instance

Notez toutes les alertes et vérifiez les paramètres de lancement de l'instance. Puis cliquez sur le bouton « Launch ».

Review Instance Launch.png

Ici, vous devez fournir une paire de clés d'authentification ou en créer une nouvelle.

Select Key Pair.png

Cela vous permettra d'activer l'accès SSH à l'instance EC2. Si vous avez besoin d'aide pour paramétrer une paire de clés, l'article Amazon EC2 Key Pairs vous explique comment créer une nouvelle paire de clés.

Démarrez les instances EC2 et notez les adresses IP privées attribuées ; nous les utiliserons ultérieurement.


Partie 2 - Installation d'Elasticsearch

Installer le RPM

Connectez-vous à chaque instance EC2 à l'aide de SSH.

$ ssh -v -i /pathto/[certfilename].pem ec2-user@[ec2hostname]

Puis installez le pack RPM Elasticsearch sur chaque instance EC2 comme indiqué ci-dessous.

$ sudo rpm -i https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.3/elasticsearch-2.3.3.rpm

D'autres versions d'Elasticsearch sont disponibles ici. Consultez le guide si vous préférez utiliser yum pour l'installation.

Enregistrez Elasticsearch en tant que service.

$ sudo chkconfig --add elasticsearch


Installer les plugins

Vous devez installer le plugin « cloud-aws » sur chaque instance EC2 du cluster.

$ cd /usr/share/elasticsearch/ 
$ sudo bin/plugin install cloud-aws

Si vous avez besoin d'autres plugins, tels que Marvel, pour le monitoring ou ICU, ou pour la prise en charge d'autres langues, installez-les maintenant.


Configurer Elasticsearch

La taille maximale de l'espace heap JVM doit être déterminée en fonction de la mémoire de l'appareil. Ouvrez « /etc/sysconfig/elasticsearch » dans chaque instance EC2 avec votre éditeur habituel et configurez les paramètres « ES_HEAP_SIZE » et « MAX_LOCKED_MEMORY ». La configuration suivante convient à une instance m3.2xlarge. Il est conseillé que la valeur de « ES_HEAP_SIZE » représente la moitié de la mémoire, sans dépasser 32 Go.

ES_HEAP_SIZE=15g 
MAX_LOCKED_MEMORY=unlimited

Ouvrez « /etc/elasticsearch/elasticsearch.yml » sur chaque machine et ajustez les paramètres suivants.

ccluster.name:esonaws 
bootstrap.mlockall: true 
discovery.zen.ping.unicast.hosts: [_ip_address_,…] 
network.host: [_ip_address_]

« discovery.zen.ping.unicast.hosts » est une liste des adresses privées des instances EC2. Tous les nœuds pouvant être des nœuds master doivent être répertoriés. Dans un petit cluster, les nœuds doivent tous être configurés en tant que nœuds master et nœuds data. L'adresse IP n'est pas obligatoire pour un cluster avec un seul nœud.
« _site_ » et « _local_ » représentent l'adresse privée et l'adresse loopback locale « 127.0.0.1 », et permettent l'accès à distance.


Mise en route et vérification

Si vous configurez plusieurs nœuds Elasticsearch, ceux-ci doivent tous être de la même version, avec les mêmes plugins et de configurations équivalentes. Démarrez Elasticsearch dans chaque instance EC2.

$ sudo service elasticsearch start

Une fois qu'il a démarré, vérifiez le cluster Elasticsearch à l'aide de curl pour demander l'état du cluster.

$ curl localhost:9200/_cluster/health?pretty

Si tout est correct, « status » sera « green » (ou « yellow » pour un nœud unique). Le « number_of_nodes » doit être identique au nombre de nœuds du démarrage.  En fonction de vos settings d’index, vous aurez peut-être besoin d’au moins deux noeuds pour que votre cluster passe à l’état « green ». Un minimum de trois nœuds est recommandé pour éviter les conflits d’élection de maitre.  Si l'état n'est pas « green », vous pouvez vérifier s'il y a des erreurs dans la configuration du groupe de sécurité ou dans les logs sous « /var/log/elasticsearch ».

{ 
  “cluster_name” : “esonaws”, 
  “status” : “green”, 
  “timed_out” : false, 
  “number_of_nodes” : 3, 
  “number_of_data_nodes” : 3, 
  “active_primary_shards” : 8, 
  “active_shards” : 16, 
  “relocating_shards” : 0, 
  “initializing_shards” : 0, 
  “unassigned_shards” : 0, 
  “delayed_unassigned_shards” : 0, 
  “number_of_pending_tasks” : 0, 
  “number_of_in_flight_fetch” : 0, 
  “task_max_waiting_in_queue_millis” : 0, 
  “active_shards_percent_as_number” : 100.0 
}

Votre cluster Elasticsearch est prêt !


Récapitulatif

Le déploiement d'un cluster Elasticsearch sous Amazon EC2 est assez simple mais nécessite toutefois quelques manipulations pour la configuration, une certaine connaissance de SSH et des paires de clés, tout en supposant que vous assurerez la gestion des appareils.

Si vous préférez la simplicité avec un service complètement managé, Elastic Cloud, le service Elasticsearch et Kibana sous AWS hébergé par Elastic, est un choix intelligent. Vous pouvez installer un cluster en quelques clics. Elastic Cloud est fourni avec la Security (Shield), Kibana, des plugins supportés, de l'évolutivité du cluster à la demande, de la sauvegarde de automatique et plus encore.

elastic cloud is easy vi.gif

Profitez d'un essai Elastic Cloud gratuit, sans fournir de numéro de carte de crédit. Le lien suivant est une vidéo qui vous permet de découvrir Elastic Cloud plus en détail.