relecture
This commit is contained in:
parent
11277125d0
commit
e3351e34f9
|
@ -1,60 +1,94 @@
|
||||||
---
|
---
|
||||||
title: Howto Elasticsearch
|
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>
|
* Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html>
|
||||||
* Forum : <https://discuss.elastic.co/c/elasticsearch>
|
* 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 d’une interface REST HTTP.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Vu le développement actif d'Elasticsearch, nous préconisons l'installation des paquets Debian distribués par Elasticsearch :
|
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 -
|
# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
|
||||||
# apt install elasticsearch openjdk-7-jre
|
# 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
|
# 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`).
|
Les paramètres système (répertoires utilisés, configuration JVM) se trouvent dans le fichier `/etc/default/elasticsearch`,
|
||||||
Dans `/etc/elasticsearch/logging.yml`
|
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}
|
~~~{.diff}
|
||||||
-rootLogger: ${es.logger.level}, console, file
|
-rootLogger: ${es.logger.level}, console, file
|
||||||
+rootLogger: ${es.logger.level}, 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`
|
||||||
|
|
||||||
~~~
|
## Configuration réseau
|
||||||
[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
|
Par défaut, Elasticsearch écoute sur 127.0.0.1 sur TCP/9200 pour son interface REST HTTP.
|
||||||
to map segment from shared object: Operation not permitted
|
|
||||||
|
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
|
||||||
|
|
||||||
~~~
|
Les plugins permettent différentes améliorations, notamment en terme de visualisation simple et conviviale d'une base de données.
|
||||||
ES_JAVA_OPTS="-Djava.io.tmpdir=/var/lib/elasticsearch/tmp"
|
On verra ici les plus utiles.
|
||||||
~~~
|
|
||||||
|
|
||||||
Assurez-vous de créer le répertoire :
|
|
||||||
|
|
||||||
~~~
|
|
||||||
# mkdir /var/lib/elasticsearch/tmp
|
|
||||||
# chown elasticsearch: /var/lib/elasticsearch/tmp
|
|
||||||
~~~
|
|
||||||
|
|
||||||
## Plugins utiles
|
|
||||||
|
|
||||||
### Kopf - web admin interface for elasticsearch
|
### 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
|
# /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
|
## Mode cluster
|
||||||
|
|
||||||
_Paragraphe à revoir car l'auto-découverte et le multicast ont changé._
|
_Paragraphe à revoir car l'auto-découverte et le multicast ont changé._
|
||||||
|
|
||||||
Exemples avec 3 instances nommés **elastic1**, **elastic2** et **elastic3**.
|
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
|
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.
|
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. :
|
||||||
|
|
||||||
~~~
|
~~~{.bash}
|
||||||
curl 'http://localhost:9200/_nodes?pretty=true'
|
$ curl 'http://localhost:9200/_nodes?pretty=true'
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Si le master passe en DOWN, un autre est élu.
|
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 -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
|
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]()
|
||||||
|
|
Loading…
Reference in a new issue