From e3351e34f935554dad1a6a602b43c76c02375640 Mon Sep 17 00:00:00 2001 From: gcolpart Date: Tue, 11 Oct 2016 00:16:48 +0200 Subject: [PATCH] relecture --- HowtoElasticsearch.md | 122 ++++++++++++++++++++++++++++++++---------- 1 file changed, 93 insertions(+), 29 deletions(-) diff --git a/HowtoElasticsearch.md b/HowtoElasticsearch.md index 5d99b1d5..2fc5c707 100644 --- a/HowtoElasticsearch.md +++ b/HowtoElasticsearch.md @@ -1,60 +1,94 @@ --- title: Howto Elasticsearch +categories: web bdd nosql ... -_Page en cours de vérification._ - * Documentation : * Forum : +[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 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 + + + +~~~ +# /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]()