18
0
Fork 0

relecture

This commit is contained in:
gcolpart 2016-10-11 00:16:48 +02:00
parent 11277125d0
commit e3351e34f9
1 changed files with 93 additions and 29 deletions

View File

@ -1,60 +1,94 @@
---
title: Howto Elasticsearch
categories: web bdd nosql
...
_Page en cours de vérification._
* Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html>
* Forum : <https://discuss.elastic.co/c/elasticsearch>
[Elasticsearch](https://www.elastic.co/fr/products/elasticsearch) est un serveur de base de données écrit en Java disposant dune interface REST HTTP.
## Installation
Vu le développement actif d'Elasticsearch, nous préconisons l'installation des paquets Debian distribués par Elasticsearch :
~~~
# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" >> /etc/apt/sources.list.d/elasticsearch.list
# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# apt install elasticsearch openjdk-7-jre
~~~
Pour que le démon soit géré automatiquement par systemd :
On vérifie qu'on a bien Java >= 1.7 activé :
~~~
$ java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
~~~
Pour activer le démarrage automatique :
~~~
# systemctl enable elasticsearch
Synchronizing state for elasticsearch.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d elasticsearch defaults
Executing /usr/sbin/update-rc.d elasticsearch enable
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
# systemctl start elasticsearch
~~~
## Configuration
## Configuration de base
Il est conseillé de ne pas activer le logging stdout vers la console, mais de conserver seulement vers les logs. (`/var/log/elasticsearch`).
Dans `/etc/elasticsearch/logging.yml`
Les paramètres système (répertoires utilisés, configuration JVM) se trouvent dans le fichier `/etc/default/elasticsearch`,
les options applicatives (mémoire, réseau, cluster) se trouvent dans le fichier `/etc/elasticsearch/elasticsearch.yml`.
On peut ainsi définir un *tmpdir* spécifique (utile quand `/tmp` est en _noexec_) dans `/etc/default/elasticsearch` :
~~~
ES_JAVA_OPTS="-Djava.io.tmpdir=/var/lib/elasticsearch/tmp"
~~~
Dans ce cas, assurez-vous de créer le répertoire avec les bons droits :
~~~
# mkdir /var/lib/elasticsearch/tmp
# chown elasticsearch: /var/lib/elasticsearch/tmp
# chmod 750 /var/lib/elasticsearch/tmp
~~~
Via le fichier `/etc/elasticsearch/elasticsearch.yml` vous devez au minimum configurer :
~~~{.yaml}
cluster.name: foo
node.name: bar
~~~
## Journaux
On conseille de ne pas activer le logging stdout vers la console, mais de conserver seulement les logs dans `/var/log/elasticsearch/`. On peut faire cela via le fichier `/etc/elasticsearch/logging.yml` :
~~~{.diff}
-rootLogger: ${es.logger.level}, console, file
+rootLogger: ${es.logger.level}, file
~~~
Si on a un `/tmp` en _noexec_, il faut changer le chemin, au risque d'avoir l'erreur suivante.
Les journaux intéressants sont dans `/var/log/elasticsearch/_cluster_name_.log`
~~~
[2016-06-15 14:53:05,714][WARN ][bootstrap ] unable to load JNA native support library, native methods will be disabled.
java.lang.UnsatisfiedLinkError: /tmp/jna--1985354563/jna3461912487982682933.tmp: /tmp/jna--1985354563/jna3461912487982682933.tmp: failed
to map segment from shared object: Operation not permitted
## Configuration réseau
Par défaut, Elasticsearch écoute sur 127.0.0.1 sur TCP/9200 pour son interface REST HTTP.
La directive de configuration suivante peut être positionnée pour qu'il écoute sur plusieurs interfaces réseau :
~~~{.yaml}
network.host: ["192.0.2.42", "198.51.100.42", "127.0.0.1"]
~~~
Dans `/etc/default/elasticsearch` :
## Plugins
~~~
ES_JAVA_OPTS="-Djava.io.tmpdir=/var/lib/elasticsearch/tmp"
~~~
Assurez-vous de créer le répertoire :
~~~
# mkdir /var/lib/elasticsearch/tmp
# chown elasticsearch: /var/lib/elasticsearch/tmp
~~~
## Plugins utiles
Les plugins permettent différentes améliorations, notamment en terme de visualisation simple et conviviale d'une base de données.
On verra ici les plus utiles.
### Kopf - web admin interface for elasticsearch
@ -62,15 +96,31 @@ Assurez-vous de créer le répertoire :
~~~
# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/
~~~
*Note :* cela nécessite un accès réseau vers https://github.com/
L'interface **Kopf** est ainsi disponible sur http://127.0.0.1:9200/_plugin/kopf/
### Head - web front end for an elastic search cluster
<https://github.com/mobz/elasticsearch-head>
~~~
# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/
~~~
L'interface **Head** est ainsi disponible sur http://127.0.0.1:9200/_plugin/head/
## Mode cluster
_Paragraphe à revoir car l'auto-découverte et le multicast ont changé._
Exemples avec 3 instances nommés **elastic1**, **elastic2** et **elastic3**.
Spécifier un nom de cluster dans `elasticsearch.yml` sur chaque machine.
Spécifier un nom de cluster commun dans `elasticsearch.yml` sur chaque machine.
~~~
cluster.name: mycluster
@ -117,10 +167,10 @@ lastic3][CLCB_hU5TeGXLziFcLjY8w][inet[/192.168.4.204:9300]],}, reason: zen-disco
Indique que les deux slaves ont été ajoutés.
On peut consulter le status en faisant des requêtes de types RESTFul. :
On peut consulter le *status* en faisant des requêtes de types RESTFul. :
~~~
curl 'http://localhost:9200/_nodes?pretty=true'
~~~{.bash}
$ curl 'http://localhost:9200/_nodes?pretty=true'
~~~
Si le master passe en DOWN, un autre est élu.
@ -452,3 +502,17 @@ date=$(date +%Y-%m-%d)
curl -s -XDELETE "localhost:9200/_snapshot/backup/snapshot_${date}" | grep -v acknowledged..true
curl -s -XPUT "localhost:9200/_snapshot/backup/snapshot_${date}?wait_for_completion=true" -o /tmp/es_snapshot_${date}.log
~~~
## FAQ
### Erreur "failed to map segment from shared object: Operation not permitted"
Si vous obtenez une erreur du type :
~~~
[2016-06-15 14:53:05,714][WARN ][bootstrap ] unable to load JNA native support library, native methods will be disabled.
java.lang.UnsatisfiedLinkError: /tmp/jna--1985354563/jna3461912487982682933.tmp: /tmp/jna--1985354563/jna3461912487982682933.tmp: failed
to map segment from shared object: Operation not permitted
~~~
C'est peut-être que vous avez votre partition `/tmp` en _noexec_, il faut alors changer le chemin comme indiqué sur [#configuration-de-base]()