dimanche 11 mars 2018

ElasticSearch won't start on Ubuntu server 16.04

Impossible de se connecter à ElasticSearch sur une version fraiche d'Ubuntu serveur 16.04

Il s'agit d'une traduction du post de fcoelho sur le fil de discussion d'elastic.

root@ubuntu1604lts:~# curl -X GET 'http://localhost:9200'
curl: (7) Failed connect to localhost:9200; Connection refused.


Même avec la configuration réseau par défaut.

Le service ElasticSearch ne démarre pas

root@ubuntu1604lts:~# systemctl status elasticsearch
● elasticsearch.service - LSB: Starts elasticsearch
   Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
   Active: active (exited) since Sun 2018-03-11 15:08:09 CET; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1386 ExecStop=/etc/init.d/elasticsearch stop (code=exited, status=0/S
  Process: 1421 ExecStart=/etc/init.d/elasticsearch start (code=exited, status=0


Le serveur n'écoute pas sur le port 9200 :

root@ubuntu1604lts:~# netstat -atp tcp | grep -i "listen"
tcp        0      0 *:ssh                   *:*                     LISTEN      811/sshd
tcp        0      0 *:postgresql            *:*                     LISTEN      553/postgres
tcp        0      0 *:5433                  *:*                     LISTEN      554/postgres
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      811/sshd
tcp6       0      0 [::]:postgresql         [::]:*                  LISTEN      553/postgres
tcp6       0      0 [::]:5433               [::]:*                  LISTEN      554/postgres


La solution

Il semble que pour lancer le service ElasticSearch sur Ubuntu 16.4, il faut paramétrer START_DAEMON à true dans le fichier /etc/default/elasticsearch :

 # Start Elasticsearch automatically
START_DAEMON=true

Par défaut, cette ligne est commentée dans le paquet elasticsearch d'Ubuntu (sic)

La décommenter permet au service de se lancer correctement.

On peut également s'assurer que le service démarre avec le bon utilisateur. Pour cela, il suffit de décommetter les 2 lignes suivantes :

# Run Elasticsearch as this user ID and group ID
ES_USER=elasticsearch
ES_GROUP=elasticsearch


Important

Pour finir, assurez-vous d'utiliser systemctl restart au lieu de start car le service est démarré juste après l'isntallation, et apparemment, il y a soit un socket, un pidfile ou quelque chose d'autre que le système retient et qui devrait être disponible pour que le service démarre à nouveau.


On peut également forcer la main à ElasticSearch en le démarrant avec son utilisateur :
root@ubuntu1604lts:~# sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch &