Comment installer et configurer Elasticsearch sur CentOS 7

introduction

Elasticsearch est une plateforme de recherche distribuée et d’analyse 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 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 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 tutoriel suppose que vos serveurs utilisent un VPN semblable à celui décrit ci-dessous: https://www.digitalocean.com/community/tutorials/how-to-use-ansible-and-tinc-vpn-to-secure-your- server-infrastructure [Comment utiliser Ansible et Tinc VPN pour sécuriser votre infrastructure de serveur]. 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 que DigitalOcean Private Networking, vous devez utiliser un VPN pour protéger Elasticsearch contre les accès non autorisés. Chaque serveur doit être sur le même réseau privé, car Elasticsearch n’a pas de sécurité intégrée dans son interface HTTP. Le réseau privé ne doit pas être partagé avec des ordinateurs non fiables.

É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. Vous pouvez utiliser le package natif CentOS OpenJDK pour JRE. Ce JRE est gratuit, bien pris en charge et géré automatiquement via le gestionnaire d’installation CentOS Yum.

Vous pouvez installer le dernier OpenJDK avec la commande:

sudo yum install java-1.8.0-openjdk.x86_64

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

java -version

Le résultat devrait ressembler à ceci:

Output of java -versionopenjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

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). Pour plus d’informations sur cette opération, consultez l’article sur Comment installer Java sur CentOS. et Fedora.

Étape 2 - Télécharger et installer Elasticsearch

Elasticsearch peut être téléchargé directement à partir de elastic.co dans les packages zip, tar.gz, deb ou rpm. Pour CentOS, il est préférable d’utiliser le paquet natif rpm 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.3. Téléchargez-le dans un répertoire de votre choix avec la commande:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm

Puis installez-le comme d’habitude avec CentOS avec la commande + rpm + comme ceci:

sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm

Ainsi, Elasticsearch est installé dans + / usr / share / elasticsearch / +, ses fichiers de configuration étant placés dans + / etc / elasticsearch + et son script init 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 systemctl enable elasticsearch.service

É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 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 un serveur Elasticsearch sont + node.name + et + cluster.name + dans + elasticsearch.yml +. Comme leurs noms le suggèrent, + node.name + spécifie le nom du serveur (nœud) et le cluster auquel ce dernier est associé.

Si vous ne personnalisez pas cette variable, un + node.name + sera automatiquement attribué en fonction du nom d’hôte Droplet. `` Cluster.name + `sera automatiquement défini sur le nom du cluster par défaut.

La valeur + cluster.name + est utilisée par la fonctionnalité de découverte automatique d’Elasticsearch pour détecter et associer automatiquement des 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 à éditer le fichier de configuration principal + elasticsearch.yml +:

sudo nano /etc/elasticsearch/elasticsearch.yml

Supprimez le caractère + # + au début des lignes pour + node.name et` + cluster.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:
cluster.name:
...

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 s’appelle + node.master +. Si vous ne possédez qu’un seul nœud Elasticsearch, vous devez laisser cette option commentée afin qu’elle conserve sa valeur par défaut, + true + - i.e. le nœud unique doit également être un maître. Sinon, si vous souhaitez configurer le noeud en tant qu’esclave, supprimez le caractère + # + au début de la ligne + node.master +, et remplacez la valeur par + faux +:

/etc/elasticsearch/elasticsearch.yml

...
node.master:
...

Une autre option de configuration importante est + node.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 noeud Elasticsearch, vous devez laisser ce paramètre commenté afin qu’il conserve la valeur + true + par défaut. Sinon, pour désactiver le stockage des données localement, supprimez la mise en commentaire de la ligne suivante et remplacez la valeur par + false +:

/etc/elasticsearch/elasticsearch.yml

...
node.data:
...

+ Index.number_of_shards + et + index.number_of_replicas + sont deux autres options importantes. 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 le signe + # + au début des lignes):

/etc/elasticsearch/elasticsearch.yml

...
index.number_of_shards:
index.number_of_replicas:
...

Un dernier paramètre que vous pourriez vouloir modifier est + path.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 autre chemin + path.data en décommentant la ligne` + path.data + `et en modifiant sa valeur:

/etc/elasticsearch/elasticsearch.yml

...
path.data:
...

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.

Étape 4 - Sécurisation 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 à utiliser iptables 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, éditez le fichier + elasticsearch.yml +:

sudo nano /etc/elasticsearch/elasticsearch.yml

Recherchez la ligne contenant + network.bind_host +, décomprimez-la en supprimant le caractère + # + au début de la ligne, puis remplacez la valeur par + localhost + de la manière suivante:

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host:
...

+ De plus, pour plus de sécurité, vous pouvez désactiver les scripts dynamiques 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
...

Pour que les modifications ci-dessus prennent effet, vous devrez redémarrer Elasticsearch à l’aide de la commande suivante:

sudo service elasticsearch restart

Étape 5 - Test

À ce jour, Elasticsearch devrait être exécuté 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" : "CentOS Node",
 "cluster_name" : "mysqluster",
 "version" : {
   "number" : "1.7.3",
   "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682",
   "build_timestamp" : "2015-10-15T09:14:17Z",
   "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, vérifiez que vous avez bien suivi les instructions d’installation et que vous avez laissé du temps au démarrage complet d’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’id 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é le + message + 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émentaire + pretty + 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?'

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, consultez la page https://www.elastic.co/guide/fr/elasticsearch/reference/current/docs.html de la documentation de l’API].

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.