Comment installer et configurer Elasticsearch sur Ubuntu 14.04

introduction

Elasticsearch est une plateforme de recherche et d'analyse distribuée de données en temps réel. Sa popularité est due à sa facilité d'utilisation, à ses fonctionnalités puissantes et à son évolutivité.

Elasticsearch prend en charge les opérations RESTful. Cela signifie que vous pouvez utiliser des méthodes HTTP (GET, POST, PUT, DELETE, etc.) en combinaison avec un URI HTTP (/ collection / entry) pour manipuler vos données. L’approche intuitive de RESTful est à la fois développeur et convivial, ce qui est l’une des raisons de la popularité d’Elasticsearch.

Elasticsearch est un logiciel gratuit et open source avec une entreprise solide derrière lui - Elastic. Cette combinaison le rend approprié pour une utilisation dans n'importe où des tests personnels à l'intégration d'entreprise.

Cet article vous présentera Elasticsearch et vous montrera comment l'installer, le configurer et commencer à l'utiliser.

Conditions préalables

Avant de suivre ce didacticiel, assurez-vous de remplir les conditions préalables suivantes:

Sauf indication contraire, toutes les commandes nécessitant des privilèges root dans ce tutoriel doivent être exécutées en tant qu'utilisateur non root avec des privilèges sudo.

Hypothèses

Ce didacticiel suppose que vos serveurs utilisent un VPN comme celui décrit ici:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure. Cela fournira une fonctionnalité de réseau privé quel que soit le réseau physique utilisé par vos serveurs.

Si vous utilisez un réseau privé partagé, tel queDigitalOcean Private Networking, cette fonction de sécurité sera déjà activée pour les serveurs de la même équipe ou compte dans la même région. Ceci est particulièrement important lors de l’utilisation d’Elasticsearch, car elle n’a pas de sécurité intégrée dans son interface HTTP.

[[step-1 -—- Installing-java]] == Étape 1 - Installation de Java

Tout d'abord, vous aurez besoin d'un environnement d'exécution Java (JRE) sur votre Droplet, car Elasticsearch est écrit dans le langage de programmation Java. Elasticsearch requiert Java 7 ou supérieur. Elasticsearch recommande Oracle JDK version 1.8.0_73, mais le package natif Ubuntu OpenJDK natif pour JRE fonctionne également.

Cette étape vous montre comment installer les deux versions afin que vous puissiez choisir celle qui vous convient le mieux.

Installer OpenJDK

Le package natif Ubuntu OpenJDK natif pour JRE est gratuit, bien pris en charge et géré automatiquement via le gestionnaire d’installation Ubuntu APT.

Avant d'installer OpenJDK avec APT, mettez à jour la liste des packages disponibles pour l'installation sur votre droplet Ubuntu en exécutant la commande suivante:

sudo apt-get update

Après cela, vous pouvez installer OpenJDK avec la commande:

sudo apt-get install openjdk-7-jre

Pour vérifier que votre JRE est installé et peut être utilisé, exécutez la commande suivante:

java -version

Le résultat devrait ressembler à ceci:

Output of java -versionjava version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Installation de Java 8

Lorsque vous avancez dans l’utilisation d’Elasticsearch et que vous commencez à rechercher de meilleures performances et une meilleure compatibilité Java, vous pouvez choisir d’installer le logiciel propriétaire Java d’Oracle (Oracle JDK 8).

Ajoutez le Oracle Java PPA à apt:

sudo add-apt-repository -y ppa:webupd8team/java

Mettez à jour votre base de données de paquets apt:

sudo apt-get update

Installez la dernière version stable d'Oracle Java 8 avec cette commande (et acceptez le contrat de licence qui apparaît):

sudo apt-get -y install oracle-java8-installer

Enfin, vérifiez qu’il est installé:

java -version

[[step-2 -—- téléchargement-et-installation-elasticsearch]] == Étape 2 - Téléchargement et installation d'Elasticsearch

Elasticsearch peut être téléchargé directement à partir deelastic.co dans les packages zip, tar.gz, deb ou rpm. Pour Ubuntu, il est préférable d’utiliser le paquet deb (Debian) qui installera tout ce dont vous avez besoin pour exécuter Elasticsearch.

Au moment d'écrire ces lignes, la dernière version d'Elasticsearch est la 1.7.2. Téléchargez-le dans un répertoire de votre choix avec la commande:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

Ensuite, installez-le de la manière habituelle Ubuntu avec la commandedpkg comme ceci:

sudo dpkg -i elasticsearch-1.7.2.deb

[.tip] #Tip: Si vous voulez la dernière version publiée d'Elasticsearch, accédez àelastic.co pour trouver le lien, puis utilisezwget pour le télécharger sur votre Droplet. Assurez-vous de télécharger le package deb.
#

Cela entraîne l'installation d'Elasticsearch dans/usr/share/elasticsearch/ avec ses fichiers de configuration placés dans/etc/elasticsearch et son script d'initialisation ajouté dans/etc/init.d/elasticsearch.

Pour vous assurer qu'Elasticsearch démarre et s'arrête automatiquement avec Droplet, ajoutez son script d'initialisation aux niveaux d'exécution par défaut à l'aide de la commande suivante:

sudo update-rc.d elasticsearch defaults

[[step-3 -—- configuring-elegant]] == Étape 3 - Configuration d'Elastic

Maintenant que Elasticsearch et ses dépendances Java ont été installés, il est temps de configurer Elasticsearch.

Les fichiers de configuration d'Elasticsearch se trouvent dans le répertoire/etc/elasticsearch. Il y a deux fichiers:

  • elasticsearch.yml - Configure les paramètres du serveur Elasticsearch. C'est là que sont stockées toutes les options, à l'exception de celles de la journalisation. C'est pourquoi ce fichier nous intéresse principalement.

  • logging.yml - Fournit la configuration pour la journalisation. Au début, vous n’avez pas à éditer ce fichier. Vous pouvez laisser toutes les options de journalisation par défaut. Vous pouvez trouver les journaux résultants dans/var/log/elasticsearch par défaut.

Les premières variables à personnaliser sur n'importe quel serveur Elasticsearch sontnode.name etcluster.name danselasticsearch.yml. Comme leur nom l'indique,node.name spécifie le nom du serveur (nœud) et du cluster auquel ce dernier est associé.

Si vous ne personnalisez pas ces variables, unnode.name sera attribué automatiquement en fonction du nom d’hôte du Droplet. Lescluster.name seront automatiquement définis sur le nom du cluster par défaut.

La valeurcluster.name est utilisée par la fonction de découverte automatique d'Elasticsearch pour découvrir et associer automatiquement les nœuds Elasticsearch à un cluster. Ainsi, si vous ne modifiez pas la valeur par défaut, vous risquez d’avoir des nœuds indésirables, situés sur le même réseau, dans votre cluster.

Pour commencer à modifier le fichier de configuration principal deelasticsearch.yml:

sudo nano /etc/elasticsearch/elasticsearch.yml

Supprimez le caractère# au début des lignes pournode.name etcluster.name pour les décommenter, puis modifiez leurs valeurs. Vos premières modifications de configuration dans le fichier/etc/elasticsearch/elasticsearch.yml devraient ressembler à ceci:

/etc/elasticsearch/elasticsearch.yml

...
node.name: "My First Node"
cluster.name: mycluster1
...

Un autre paramètre important est le rôle du serveur, qui peut être «maître» ou «esclave». Les «maîtres» sont responsables de la santé et de la stabilité du cluster. Dans les déploiements de grande taille avec de nombreux nœuds de cluster, il est recommandé d’avoir plusieurs «maîtres» dédiés. En général, un «maître» dédié ne stocke pas de données ni ne crée d’index. Ainsi, il ne devrait y avoir aucune chance d'être surchargé, ce qui pourrait mettre en danger la santé du cluster.

Les «esclaves» sont utilisés comme des «chevaux de travail» pouvant être chargés avec des tâches de données. Même si un nœud «esclave» est surchargé, l’intégrité du cluster ne doit pas être sérieusement affectée, à condition que d’autres nœuds puissent supporter une charge supplémentaire.

Le paramètre qui détermine le rôle du serveur est appelénode.master. Si vous n'avez qu'un seul nœud Elasticsearch, vous devez laisser cette option en commentaire afin qu'elle conserve sa valeur par défaut detrue - c.-à-d. le nœud unique doit également être un maître. Sinon, si vous souhaitez configurer le nœud comme esclave, supprimez le caractère# au début de la lignenode.master et changez la valeur enfalse:

/etc/elasticsearch/elasticsearch.yml

...
node.master: false
...

Une autre option de configuration importante estnode.data, qui détermine si un nœud stockera des données ou non. Dans la plupart des cas, cette option doit être laissée à sa valeur par défaut (true), mais il existe deux cas dans lesquels vous pouvez souhaiter ne pas stocker de données sur un nœud. La première est que le nœud est un «maître» dédié, comme nous l'avons déjà mentionné. L'autre est lorsqu'un nœud est utilisé uniquement pour extraire des données à partir de nœuds et pour agréger les résultats. Dans ce dernier cas, le nœud agira comme un «équilibreur de charge de recherche».

Encore une fois, si vous n'avez qu'un seul nœud Elasticsearch, vous devez laisser ce paramètre en commentaire afin qu'il conserve la valeur par défauttrue. Sinon, pour désactiver le stockage local des données, décommentez la ligne suivante et changez la valeur enfalse:

/etc/elasticsearch/elasticsearch.yml

...
node.data: false
...

Deux autres options importantes sontindex.number_of_shards etindex.number_of_replicas. La première détermine en combien de fragments (fragments) sera divisé l'indice. La seconde définit le nombre de réplicas qui seront répartis sur le cluster. Avoir plus de fragments améliore les performances d'indexation, alors que plus de répliques accélère la recherche.

En supposant que vous exploriez et testiez toujours Elasticsearch sur un seul noeud, il est préférable de commencer avec un seul fragment et pas de réplicas. Ainsi, leurs valeurs doivent être définies comme suit (assurez-vous de supprimer les# au début des lignes):

/etc/elasticsearch/elasticsearch.yml

...
index.number_of_shards: 1
index.number_of_replicas: 0
...

Un dernier paramètre que vous pourriez être intéressé à changer estpath.data, qui détermine le chemin où les données sont stockées. Le chemin par défaut est/var/lib/elasticsearch. Dans un environnement de production, il est recommandé d’utiliser une partition et un point de montage dédiés pour stocker les données Elasticsearch. Dans le meilleur des cas, cette partition dédiée constituera un support de stockage distinct qui offrira de meilleures performances et une meilleure isolation des données. Vous pouvez spécifier un cheminpath.data différent en décommentant la lignepath.data et en modifiant sa valeur:

/etc/elasticsearch/elasticsearch.yml

...
path.data: /media/different_media
...

Une fois que vous avez apporté toutes les modifications, veuillez enregistrer et quitter le fichier. Vous pouvez maintenant lancer Elasticsearch pour la première fois avec la commande suivante:

sudo service elasticsearch start

Veuillez prévoir au moins 10 secondes pour que Elasticsearch démarre complètement avant de pouvoir l'utiliser. Sinon, vous risquez de recevoir des erreurs vous empêchant de vous connecter.

[[step-4 -—- sécurisation-élastique]] == Étape 4 - Fixation de l'élastique

Elasticsearch n'a pas de sécurité intégrée et peut être contrôlé par toute personne pouvant accéder à l'API HTTP. Cette section n’est pas un guide complet sur la sécurisation d’Elasticsearch. Prenez toutes les mesures nécessaires pour empêcher tout accès non autorisé à celui-ci et au serveur / machine virtuelle sur lequel il s'exécute. Pensez à utiliseriptables pour sécuriser davantage votre système.

Le premier ajustement de sécurité est d'empêcher l'accès public. Pour supprimer l'accès public, modifiez le fichierelasticsearch.yml:

sudo nano /etc/elasticsearch/elasticsearch.yml

Trouvez la ligne qui contientnetwork.bind_host, décommentez-la en supprimant le caractère# au début de la ligne, et changez la valeur enlocalhost pour qu'elle ressemble à ceci:

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host: localhost
...

[.warning] #Warning: Étant donné qu'Elasticsearch ne dispose d'aucune sécurité intégrée, il est très important de ne pas définir cette adresse sur une adresse IP accessible à des serveurs que vous ne contrôlez pas ou ne faites pas confiance. Ne liez pas Elasticsearch à une adresse IP publique oushared private network!
#
De plus, pour plus de sécurité, vous pouvez désactiver les scripts dynamiques qui sont utilisés pour évaluer les expressions personnalisées. En créant une expression malveillante personnalisée, un attaquant pourrait compromettre votre environnement.

Pour désactiver les expressions personnalisées, ajoutez la ligne suivante à la fin du fichier/etc/elasticsearch/elasticsearch.yml:

/etc/elasticsearch/elasticsearch.yml

...
script.disable_dynamic: true
...

[[step-5 -—- testing]] == Étape 5 - Test

Elasticsearch devrait maintenant fonctionner sur le port 9200. Vous pouvez le tester avec curl, l'outil de transfert d'URL côté client en ligne de commande et une simple requête GET comme celle-ci:

curl -X GET 'http://localhost:9200'

Vous devriez voir la réponse suivante:

Output of curl{
  "status" : 200,
  "name" : "Harry Leland",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

Si vous voyez une réponse similaire à celle ci-dessus, Elasticsearch fonctionne correctement. Si ce n'est pas le cas, assurez-vous de suivre correctement les instructions d'installation et de laisser un certain temps au démarrage complet d'Elasticsearch.

[[step-6 -—- using-elasticsearch]] == Étape 6 - Utilisation d'Elasticsearch

Pour commencer à utiliser Elasticsearch, commençons par ajouter des données. Comme déjà mentionné, Elasticsearch utilise une API RESTful, qui répond aux commandes CRUD habituelles: Créer, Lire, Mettre à jour et Supprimer. Pour travailler avec, nous utiliserons à nouveau curl.

Vous pouvez ajouter votre première entrée avec la commande:

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Vous devriez voir la réponse suivante:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

Avec curl, nous avons envoyé une demande HTTP POST au serveur Elasticsearch. L'URI de la demande était/tutorial/helloworld/1. Il est important de comprendre les paramètres ici:

  • tutorial est l'index des données dans Elasticsearch.

  • helloworld est le type.

  • 1 est l'identifiant de notre entrée sous l'index et le type ci-dessus.

Vous pouvez récupérer cette première entrée avec une requête HTTP GET comme celle-ci:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

Le résultat devrait ressembler à:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

Pour modifier une entrée existante, vous pouvez utiliser une requête HTTP PUT comme ceci:

curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
  "message": "Hello People!"
}'

Elasticsearch devrait reconnaître les modifications réussies comme ceci:

Output{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "created" : false
}

Dans l'exemple ci-dessus, nous avons modifié lesmessage de la première entrée en «Hello People!». Avec cela, le numéro de version a été automatiquement augmenté à2.

Vous avez peut-être remarqué l'argument supplémentairepretty dans la requête ci-dessus. Il permet un format lisible par l’homme afin que vous puissiez écrire chaque champ de données sur une nouvelle ligne. Vous pouvez également «épater» vos résultats lors de la récupération de données et obtenir une sortie beaucoup plus agréable, comme ceci:

curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

Maintenant, la réponse sera dans un format bien meilleur:

Output{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "found" : true,
  "_source":{ "message": "Hello World!" }
}

Jusqu'à présent, nous avons ajouté et interrogé des données dans Elasticsearch. Pour en savoir plus sur les autres opérations, veuillez vérifierthe API documentation.

Conclusion

C’est comme cela qu’il est facile d’installer, de configurer et de commencer à utiliser Elasticsearch. Une fois que vous avez suffisamment joué avec les requêtes manuelles, votre prochaine tâche consistera à commencer à l'utiliser à partir de vos applications.