Comment installer et configurer Elasticsearch sur Ubuntu 16.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 RESTful est à la fois conviviale et pour les développeurs, ce qui est l’une des raisons de la popularité d’Elasticsearch.

Elasticsearch est un logiciel libre et à source ouverte reposant sur une entreprise solide: 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ésente Elasticsearch et vous explique comment l'installer, le configurer, le sécuriser et commencer à l'utiliser.

Conditions préalables

Avant de suivre ce tutoriel, vous aurez besoin de:

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.

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

Elasticsearch peut être téléchargé directement depuiselastic.co dans les packageszip,tar.gz,deb ourpm. Pour Ubuntu, il est préférable d’utiliser le packagedeb (Debian) qui installera tout ce dont vous avez besoin pour exécuter Elasticsearch.

Tout d'abord, mettez à jour votre index de paquet.

sudo apt-get update

Téléchargez la dernière version d'Elasticsearch, la version 2.3.1 au moment de la rédaction.

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

Ensuite, installez-le de la manière habituelle Ubuntu avecdpkg.

sudo dpkg -i elasticsearch-2.3.1.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 le serveur, ajoutez son script d'initialisation aux niveaux d'exécution par défaut.

sudo systemctl enable elasticsearch.service

Avant de démarrer Elasticsearch pour la première fois, veuillez consulter la section suivante sur la configuration minimale recommandée.

[[step-2 -—- configuring-elasticsearch]] == Étape 2 - Configuration d'Elasticsearch

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 avecnano ou votre éditeur de texte préféré.

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml

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

Ce sont les paramètres minimum que vous pouvez utiliser avec Elasticsearch. Cependant, il est recommandé de continuer à lire la partie configuration pour une compréhension plus approfondie et un réglage plus précis d’Elasticsearch.

Un paramètre particulièrement important d’Elasticsearch est le rôle du serveur, maître ou esclave. Master servers sont responsables de la santé et de la stabilité du cluster. Dans les grands déploiements comprenant de nombreux nœuds de cluster, il est recommandé d’avoir plusieurs maîtres dédiés. Généralement, un maître dédié ne stockera pas de données ni ne créera d’index. Ainsi, il ne devrait y avoir aucune chance d'être surchargé, ce qui pourrait mettre en danger la santé du cluster.

LesSlave servers sont utilisés comme des bêtes de somme qui peuvent être chargées 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. Par défaut, un nœud est un maître. Si vous n'avez qu'un seul nœud Elasticsearch, vous devez laisser cette option à la valeur par défauttrue car au moins un maître est toujours nécessaire. Sinon, si vous souhaitez configurer le nœud en tant qu'esclave, attribuez une valeurfalse à la variablenode.master comme ceci:

/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. On est quand le noeud est un maître dédié "comme mentionné précédemment. 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 unsearch load balancer.

De nouveau, si vous ne possédez qu'un seul nœud Elasticsearch, vous ne devez pas modifier cette valeur. Sinon, pour désactiver le stockage des données localement, spécifieznode.data commefalse comme ceci:

/etc/elasticsearch/elasticsearch.yml

. . .
node.data: false
. . .

Dans les déploiements Elasticsearch plus importants avec de nombreux nœuds, deux autres options importantes sontindex.number_of_shards etindex.number_of_replicas. Le premier détermine en combien de pièces, oushards, l'index sera divisé. 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.

Par défaut, le nombre de fragments est 5 et le nombre de réplicas est 1. En supposant que vous exploriez et testiez toujours Elasticsearch sur un seul noeud, vous pouvez commencer avec un seul fragment et pas de réplicas. Ainsi, leurs valeurs doivent être définies comme suit:

/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 le spécifiant comme ceci:

/etc/elasticsearch/elasticsearch.yml

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

Une fois toutes les modifications apportées, enregistrez et quittez le fichier. Vous pouvez maintenant lancer Elasticsearch pour la première fois.

sudo systemctl start elasticsearch

Donnez quelques éléments à Elasticsearch pour qu'il démarre complètement avant d'essayer de l'utiliser. Sinon, vous risquez de recevoir des erreurs vous empêchant de vous connecter.

[[step-3 -—- securing-elasticsearch]] == Étape 3 - Sécurisation d'Elasticsearch

Par défaut, Elasticsearch n'a pas de sécurité intégrée et peut être contrôlé par toute personne pouvant accéder à l'API HTTP. Ce n'est pas toujours un risque de sécurité car Elasticsearch écoute uniquement sur l'interface de bouclage (c'est-à-dire127.0.0.1) qui n'est accessible que localement. Ainsi, aucun accès public n’est possible et votre Elasticsearch est suffisamment sécurisé tant que tous les utilisateurs du serveur sont dignes de confiance ou qu’il s’agit d’un serveur Elasticsearch dédié.

Néanmoins, si vous souhaitez renforcer la sécurité, la première chose à faire est d’activer l’authentification. L'authentification est fournie par lesShield plugincommerciaux. Malheureusement, ce plugin n'est pas gratuit, mais il existe un essai gratuit de 30 jours que vous pouvez utiliser pour le tester. Sa page officielle contient d’excellentes instructions d’installation et de configuration. La seule chose que vous devrez peut-être savoir en plus est que le chemin vers le gestionnaire d'installation du plugin Elasticsearch est/usr/share/elasticsearch/bin/plugin.

Si vous ne souhaitez pas utiliser le plug-in commercial mais vous devez toujours autoriser l'accès à distance à l'API HTTP, vous pouvez au moins limiter l'exposition du réseau avec le pare-feu par défaut d'Ubuntu, UFW (Uncomplicated Firewall). Par défaut, UFW est installé mais non activé. Si vous décidez de l'utiliser, procédez comme suit:

Commencez par créer une règle pour autoriser tous les services nécessaires. Vous aurez au moins besoin de SSH pour pouvoir vous connecter au serveur. Pour permettre un accès mondial à SSH, le port 22 de la liste blanche.

sudo ufw allow 22

Ensuite, autorisez l'accès au port API HTTP Elasticsearch par défaut (TCP 9200) pour l'hôte distant de confiance, par exempleTRUSTED_IP, comme ceci:

sudo ufw allow from TRUSTED_IP to any port 9200

Seulement après, activez UFW avec la commande:

sudo ufw enable

Enfin, vérifiez le statut de UFW avec la commande suivante:

sudo ufw status

Si vous avez correctement spécifié les règles, le résultat devrait ressembler à ceci:

Output of java -versionStatus: active

To                         Action      From
--                         ------      ----
9200                       ALLOW       TRUSTED_IP
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

Une fois que vous avez confirmé que UFW est activé et protège le port Elasticsearch 9200, vous pouvez autoriser Elasticsearch à écouter les connexions externes. Pour ce faire, ouvrez à nouveau le fichier de configuration deelasticsearch.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 en0.0.0.0 pour qu'elle ressemble à ceci:

/etc/elasticsearch/elasticsearch.yml

. . .
network.host: 0.0.0.0
. . .

Nous avons spécifié0.0.0.0 pour qu'Elasticsearch écoute sur toutes les interfaces et les adresses IP liées. Si vous souhaitez qu'il n'écoute que sur une interface spécifique, vous pouvez spécifier son IP à la place de0.0.0.0.

Pour que le paramètre ci-dessus prenne effet, redémarrez Elasticsearch avec la commande suivante:

sudo systemctl restart elasticsearch

Après cela, essayez de vous connecter depuis l'hôte approuvé à Elasticsearch. Si vous ne parvenez pas à vous connecter, assurez-vous que l'UFW fonctionne et que la variablenetwork.host a été correctement spécifiée.

[[step-4 -—- testing-elasticsearch]] == Étape 4 - Test d'Elasticsearch

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

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

Vous devriez voir la réponse suivante:

Output of curl{
  "name" : "My First Node",
  "cluster_name" : "mycluster1",
  "version" : {
    "number" : "2.3.1",
    "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp" : "2016-04-04T12:25:05Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "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.

Pour effectuer une vérification plus approfondie de Elasticsearch, exécutez la commande suivante:

curl -XGET 'http://localhost:9200/_nodes?pretty'

Dans la sortie de la commande ci-dessus, vous pouvez voir et vérifier tous les paramètres actuels du nœud, du cluster, des chemins d’application, des modules, etc.

[[step-5 -—- using-elasticsearch]] == Étape 5 - 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:create,read,update etdelete. Pour travailler avec lui, nous utiliserons à nouveaucurl.

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,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

Aveccuel, nous avons envoyé une requête HTTP POST au serveur Elasticsearch. L'URI de la requête était/tutorial/helloworld/1 avec plusieurs paramètres:

  • 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.

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.

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,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "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 People!"
  }
}

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.

Related