Tutoriel | Installation d’un cluster ElasticSearch
Article publié le 28 Mars 2018
Un petit tutoriel qui pourra être utile à ceux qui, comme moi, ont souffert de la prise en main d'ElasticSearch ;-).
Ce tutoriel expliquera la marche à suivre pour monter un cluster ElasticSearch.
Dans l'exemple ci-dessous, je vais monter un cluster ElasticSearch composé de trois nœuds.
1) Installation
Installez ElasticSearch sur chaque machine (au moment où ce tutoriel a été rédigé, la version courante d'ElasticSearch est la 6.2)
Installation sous Debian:
Téléchargez et installez la clé GPG:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Ajoutez le répo elasticsearch (à adapter en fonction de la version courante du moment):
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Enfin, Installez ElasticSearch
sudo apt-get update && sudo apt-get install elasticsearch
Installation sous RedHat:
Téléchargez et installez la clé GPG:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ajoutez le répo (à adapter en fonction de la version courante du moment):
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Enfin, installez ElasticSearch
sudo yum install elasticsearch
2) Configuration
Chaque machine doit être joignable via le hostname (enregistrement DNS ou fichier host impératif)
- Une fois les noeuds ElasticSearch installés, éditez le fichier /etc/elasticsearch/elasticsearch.yml et remplacez la conf par celle ci-dessous sur chaque nœuds de votre cluster elasticsearch:
cluster.name: moncluster
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch#A sécuriser si nécessaire
network.host: 0.0.0.0
http.port: 9200# Nombre de noeuds sans compter cette machine
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: [ "<nom dns du noeud 1>", "<nom dns du noeud 2>", "<nom dns du noeud 3>" ]# Nombre total de nœuds composant votre cluster
gateway.expected_nodes: 3
#Nombre de nœuds sans compter cette machine
gateway.recover_after_nodes: 2
node.name: <nom du noeud>action.destructive_requires_name: true
bootstrap.memory_lock: true
- Éditez le fichier de configuration systemd /usr/lib/systemd/system/elasticsearch.service et rajoutez à la fin de ce fichier la ligne suivante:
LimitMEMLOCK=infinity
- Éditez le fichier /etc/security/limits.conf et rajoutez à la fin du fichier les lignes suivantes:
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch - nofile 65536
elasticsearch - nproc 2048
- Désactivez le Swap
swapoff -a
- Les paramètres java sont configurable directement via le ficher de configuration /etc/elasticsearch/jvm.options (notamment les paramètres mémoires)
Une fois les nœuds paramétrés, redémarrez le service elasticsearch sur chacune de vos machines
service elasticsearch restart
3) Vérification du cluster
Avant toute chose, vous pouvez vérifier dans les logs elasticsearch si vos machines communiquent bien entre elles (/var/log/elasticsearch.log) et avoir quelque chose de similaire à la log ci-dessous:
[2018-03-28T13:17:54,213][INFO ][o.e.n.Node ] [els02] starting ...
[2018-03-28T13:17:54,379][INFO ][o.e.t.TransportService ] [els02] publish_address {192.168.2.91:9300}, bound_addresses {[::]:9300}
[2018-03-28T13:17:54,390][INFO ][o.e.b.BootstrapChecks ] [els02] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2018-03-28T13:17:57,508][INFO ][o.e.c.s.MasterService ] [els02] zen-disco-elected-as-master ([1] nodes joined)[{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300}], reason: new_master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300}, added {{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300},}
[2018-03-28T13:17:57,594][INFO ][o.e.c.s.ClusterApplierService] [els02] new_master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300}, added {{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300},}, reason: apply cluster state (from master [master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300} committed version [1] source [zen-disco-elected-as-master ([1] nodes joined)[{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300}]]])
[2018-03-28T13:17:57,601][INFO ][o.e.g.GatewayService ] [els02] delaying initial state recovery for [5m]. expecting [3] nodes, but only have [2]
[2018-03-28T13:17:57,632][INFO ][o.e.h.n.Netty4HttpServerTransport] [els02] publish_address {192.168.2.91:9200}, bound_addresses {[::]:9200}
[2018-03-28T13:17:57,632][INFO ][o.e.n.Node ] [els02] started
[2018-03-28T13:18:21,135][INFO ][o.e.c.s.MasterService ] [els02] zen-disco-node-join[{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300}], reason: added {{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300},}
[2018-03-28T13:18:21,279][INFO ][o.e.c.s.ClusterApplierService] [els02] added {{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300},}, reason: apply cluster state (from master [master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300} committed version [2] source [zen-disco-node-join[{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300}]]])
[2018-03-28T13:18:21,372][INFO ][o.e.g.GatewayService ] [els02] recovered [0] indices into cluster_state
Enfin, il existe un plugin Chrome très utiles permettant d'avoir un statut en temps réel de votre cluster elasticsearch: ElasticSearch Head:
enjoy !
éditer le fichier conf et l’écraser pas les lignes indiquées ci dessous, pas trop clair. écraser c’est supprimer ce qui existe avant pour mettre les lignes indiquées ci dessous est ce cela que vous voulez dire. sinon pourquoi avoir inutilement éditer et écraser: deux actions qui vont ensemble . merci pour les éclaircissements.
En effet c’était mal dit.
Phrase modifiée 😉