Installation service ElasticSearch

De EjnTricks
Révision de 4 octobre 2018 à 13:04 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

ElasticSearch a été installé depuis les binaires fournis pour Linux. Le déploiement a été réalisé dans le répertoire /var/opt/elasticsearch.

Cet article présente la mise en place d'un service avec systemd, qui est facilitée lors de l'installation d'un paquet Debian.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Folder-icon.png Répertoire exécution

Lors de l'exécution d'ElasticSearch, un fichier PID peut être créé. Dans le cadre de cette installation, ce fichier est créé dans le répertoire /var/run/elasticsearch. La création de ce répertoire sera mise en place lors de la déclaration du service.

L'option RuntimeDirectory permet d'indiquer le nom du répertoire, soit kibana pour cette installation.

L'option RuntimeDirectoryMode permet de spécifier les permissions qui seront affectés à ce répertoire, La valeur par défaut étant 766, cela correspond au besoin de cette installation, et l'option n'est pas configurée.

Le répertoire sera alors automatiquement créé lors du démarrage du service, mais également supprimé lors de son arrêt. Le fichier PID sera alors automatiquement supprimé lors de l'arrêt, ce qui évitera des messages d'avertissement lors du démarrage pour informer qu'un fichier est déjà existant.

Ce principe est mis en place par défaut dans les fichiers du paquet.


Configuration-icon.png Paramétrages

Les fichiers de paramétrage mis en place s'inspire du contenu du paquet Debian.

Process-icon.png Configuration par défaut

Warning-icon.png Attention, cette organisation est reprise même si cela est redondant avec la configuration du service, décrite dans le prochain paragraphe.

Un premier fichier elasticsearch de configuration est mis à disposition dans le répertoire /etc/default, afin de personnaliser l'instance. Un exemple est fourni dans les source, https://github.com/elastic/elasticsearch/blob/master/distribution/packages/src/common/env/elasticsearch.

Le contenu du fichier est modifié pour changer l'option ES_PATH_CONF avec le nouvel emplacement du répertoire de configuration.

################################
# Elasticsearch
################################

# Elasticsearch home directory
#ES_HOME=/usr/share/elasticsearch

# Elasticsearch Java path
#JAVA_HOME=

# Elasticsearch configuration directory
#ES_PATH_CONF=/etc/elasticsearch
ES_PATH_CONF=/var/opt/elasticsearch/common/config

# Elasticsearch PID directory
#PID_DIR=/var/run/elasticsearch

# Additional Java OPTS
#ES_JAVA_OPTS=

# Configure restart on package upgrade (true, every other setting will lead to not restarting)
#RESTART_ON_UPGRADE=true

################################
# Elasticsearch service
################################

# SysV init.d
#
# The number of seconds to wait before checking if Elasticsearch started successfully as a daemon process
ES_STARTUP_SLEEP_TIME=5

################################
# System properties
################################

# Specifies the maximum file descriptor number that can be opened by this process
# When using Systemd, this setting is ignored and the LimitNOFILE defined in
# /usr/lib/systemd/system/elasticsearch.service takes precedence
#MAX_OPEN_FILES=65536

# The maximum number of bytes of memory that may be locked into RAM
# Set to "unlimited" if you use the 'bootstrap.memory_lock: true' option
# in elasticsearch.yml.
# When using systemd, LimitMEMLOCK must be set in a unit file such as
# /etc/systemd/system/elasticsearch.service.d/override.conf.
#MAX_LOCKED_MEMORY=unlimited

# Maximum number of VMA (Virtual Memory Areas) a process can own
# When using Systemd, this setting is ignored and the 'vm.max_map_count'
# property is set at boot time in /usr/lib/sysctl.d/elasticsearch.conf
#MAX_MAP_COUNT=262144

Les permissions sont modifiées comme lors de l'installation pour restreindre l'accès au compte de service.

#sudo chown root:root /etc/default/elasticsearch
#sudo chmod 644 /etc/default/elasticsearch

Robot-icon.png Configuration du service

On déclare ensuite le service systemd dans le fichier elasticsearch.service dans le répertoire /lib/systemd/system. Un exemple est fourni dans les source, https://github.com/elastic/elasticsearch/blob/master/distribution/packages/src/common/systemd/elasticsearch.service.

La configuration mise en place est la suivante, permettant de référencer les emplacements spécifiques.

[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
RuntimeDirectory=elasticsearch
#Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_HOME=/var/opt/elasticsearch/installed
#Environment=ES_PATH_CONF=/etc/elasticsearch
Environment=ES_PATH_CONF=/var/opt/elasticsearch/common/config
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/default/elasticsearch

#WorkingDirectory=/usr/share/elasticsearch
WorkingDirectory=/var/opt/elasticsearch/installed

User=elasticsearch
Group=elasticsearch

#ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
ExecStart=/var/opt/elasticsearch/installed/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet

# StandardOutput is configured to redirect to journalctl since
# some error messages may be logged in standard output before
# elasticsearch logging system is initialized. Elasticsearch
# stores its logs in /var/log/elasticsearch and does not use
# journalctl by default. If you also want to enable journalctl
# logging, you can simply remove the "quiet" option from ExecStart.
StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of processes
LimitNPROC=4096

# Specifies the maximum size of virtual memory
LimitAS=infinity

# Specifies the maximum file size
LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group
KillMode=process

# Java process is never killed
SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Examples-icon.png A noter le contenu de la variable d'environnement EnvironmentFile avec -/etc/default/elasticsearch qui permet de charger le fichier si il existe. Dans le cadre de cette installation, ce dernier aurait pu ne pas être mis en place, car il définit la variable ES_PATH_CONF qui est également mis en place dans la déclaration du service.

Examples-icon.png Le paramètre RuntimeDirectory a été rajouté par rapport à la configuration du paquet, afin de gérer le répertoire d'exécution comme expliqué au début de l'article.

Les permissions sont modifiées comme lors de l'installation pour restreindre l'accès au compte de service.

#sudo chown root:root /lib/systemd/system/elasticsearch.service
#sudo chmod 644 /lib/systemd/system/elasticsearch.service


Run-icon.png Création service

La déclaration du service s'effectue via la commande systemctl enable en fournissant l'emplacement du fichier, créant tous les liens nécessaires.

#sudo systemctl enable /lib/systemd/system/elasticsearch.service
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /lib/systemd/system/elasticsearch.service.

Pour le démarrer il suffit alors d'exécuter la commande systemctl avec l'argument start.

#sudo systemctl start elasticsearch


Viewer icon.png Voir aussi

Sources installation service : https://github.com/elastic/elasticsearch/tree/master/distribution/packages/src