Groupe d'échange QQ: 64655993 J'espère que cela pourra vous aider! ! !
Site officiel:
https://www.elastic.co/cn/products/elasticsearch
1. Description de l'environnement de base
1. Description du système
Système: CentOS-7-x86_64-Minimal-1708
lien de téléchargement:
http://archive.kernel.org/centos-vault/7.4.1708/isos/x86_64/
2. Installez la machine virtuelle
Installez 3 machines virtuelles (le nombre de nœuds dans l'environnement de production dépend des exigences métier spécifiques)
Chaque configuration de machine virtuelle: mémoire 3G, processeur à 2 cœurs
Reportez-vous au processus d'installation:
https://blog.csdn.net/llwy1428/article/details/89328381
3. Adresse de téléchargement d'Elasticsearch
https://www.elastic.co/cn/start
2. Configuration de l'environnement de base
1. Modifiez le nom d'hôte
Modifiez le nom d'hôte de chaque nœud du cluster (les noms d'hôte des trois nœuds de ce cluster sont node3.cn node4.cn node5.cn)
Prenez node3.cn comme exemple:
[root@localhost~]# hostnamectl set-hostname node3.cn
node4.cn et node5.cn sont omis.
2. Configurez le réseau de la machine virtuelle, chaque machine virtuelle est connectée à Internet (et définissez une adresse IP statique)
La configuration de la carte réseau peut faire référence à:
https://blog.csdn.net/llwy1428/article/details/85058028
Définir une adresse IP statique
Ici, prenez le nœud node3.cn comme exemple (reportez-vous à ce nœud pour la configuration des autres nœuds du cluster, et notez que l'ip est unique):
[[email protected] ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
node3.cn的IP是: IPADDR=192.168.11.133
node4.cn的IP是: IPADDR=192.168.11.134
node5.cn的IP是: IPADDR=192.168.11.135
Remarque: la boîte rouge est la pièce modifiée et ajoutée
Enregistrer et quitter après modification
:wq
Redémarrez le service réseau
[root@node3 ~]# service network restart
Peut se référer à:
https://blog.csdn.net/llwy1428/article/details/85058028
La configuration des autres nœuds du cluster fait référence à ce nœud.
3. Installez les outils de base (tous les nœuds doivent être installés)
[root@node3 ~]# yum install -y vim wget lrzsz tree zip unzip net-tools ntp
[root@node3 ~]# yum update -y (可选)
4. (Facultatif) Installez et configurez JDK pour chaque nœud du cluster (es7.x nécessite jdk11 ou supérieur, et openjdk est inclus dans le package d'installation)
JDK doit être installé sur chaque nœud du cluster
Référence des étapes spécifiques:
https://blog.csdn.net/llwy1428/article/details/85232267
5. Configurer le pare-feu
Désactivez le pare-feu et définissez le démarrage pour interdire le démarrage
关闭防火墙 : systemctl stop firewalld
查看状态 : systemctl status firewalld
开机禁用 : systemctl disable firewalld
6. Configurez le fichier hôte
Voici le nœud node3.cn à titre d'exemple, les autres nœuds du cluster sont les mêmes que node3.cn:
[root@node3 ~]# vim /etc/hosts
7. Configurer la synchronisation de l'heure entre les nœuds
Cet article est basé sur le serveur de temps Aliyun, l'adresse du serveur de temps Aliyun: ntp6.aliyun.com
Remarque: s'il existe un serveur de temps dédié, modifiez le nom d'hôte ou l'adresse IP du serveur de temps. Le nom d'hôte doit être mappé dans le fichier etc / hosts.
Prenez node3.cn comme exemple:
Définir le fuseau horaire du système sur Dongba District (Shanghai Time Zone)
[root@node3 ~]# timedatectl set-timezone Asia/Shanghai
Désactivez le service ntpd (cette étape doit être effectuée, sinon l'heure de synchronisation automatique sera invalide)
[root@node3 ~]# systemctl stop ntpd.service
Définir le service ntpd pour interdire le démarrage
[root@node3 ~]# systemctl disable ntpd
Configurer une tâche planifiée
[root@node3 ~]# crontab -e
Écrivez ce qui suit (synchronisez avec le serveur de temps Alibaba Cloud toutes les 10 minutes):
0-59/10 * * * * /usr/sbin/ntpdate ntp6.aliyun.com
Redémarrez le service de tâches planifiées
[root@node3 ~]# /bin/systemctl restart crond.service
Définir des tâches chronométrées pour démarrer
[root@node3 ~]# vim /etc/rc.local
Après avoir ajouté le contenu suivant, enregistrez et quittez
:wq
/bin/systemctl start crond.service
Les autres nœuds du cluster sont les mêmes que le nœud node3.cn.
8. Configurez l'environnement système en UTF8
Prenez node3.cn comme exemple:
[root@node3 ~]# echo "export LANG=zh_CN.UTF-8 " >> ~/.bashrc
[root@node3 ~]# source ~/.bashrc
Les autres nœuds du cluster sont les mêmes que le nœud node3.cn.
9. Modifier le nombre maximum de fichiers ouverts (environnement hors production, aucune configuration requise)
Voici un exemple de node3.cn:
[root@node3 ~]# vim /etc/security/limits.conf
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
[root@node3 ~]# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 204800
* hard nproc 204800
[root@node3 ~]# vim /etc/pam.d/login
session required pam_limits.so
La configuration des autres nœuds du cluster est la même que node3.cn
10. Désactivez SELinux (facultatif)
Prenez node3.cn comme exemple:
[root@node3 ~]# vim /etc/selinux/config
Après avoir modifié le contenu suivant, enregistrez et quittez
:wq
La configuration des autres nœuds du cluster est la même que node3.cn.
11. Désactivez les HugePages transparentes (facultatif)
Prenez node3.cn comme exemple:
Vue
[root@node3 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
效果:
[always] madvise never
[root@node3 ~]# vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
[root@node3 ~]# chmod +x /etc/rc.d/rc.local
Après le redémarrage du système, il prendra effet de manière permanente.
Vérifiez après le redémarrage du système:
[root@node3 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
效果:
always madvise [never]
La configuration des autres nœuds du cluster est la même que node3.cn.
12. Configurez la mémoire /etc/sysctl.conf
[root@node3 ~]# vim /etc/sysctl.conf
写入(根据自身硬件条件而定,其它节点于此相同)
vm.max_map_count=262144
Troisièmement, déploiement et configuration du cluster Elasticsearch
1. Créez un dossier / opt / elasticsearch / pour chaque nœud
[root@node3 ~]# mkdir /opt/elasticsearch/
2. Téléchargez le fichier rz
Téléchargez le package compressé (elasticsearch-7.4.0-linux-x86_64.tar.gz) sur le site officiel sur le site local, puis utilisez rz ou d'autres outils ftp tiers pour télécharger le package d'installation dans le répertoire désigné du nœud 3 (le réseau autorise les conditions Télécharger, vous pouvez également utiliser wget pour télécharger directement)
[root@node3 elasticsearch]# rz
Après le téléchargement, décompressez le package compressé
[root@node3 elasticsearch]# tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
Afficher le dossier décompressé
3. Modifiez le fichier de configuration elasticsearch.yml
[root@node3 ~]# vim /opt/elasticsearch/elasticsearch-7.0.0/config/elasticsearch.yml
Le contenu du fichier est le suivant (voir la fin de l'article pour la description des paramètres spécifiques):
# ---------------------------------- Cluster ---
cluster.name: es-cluster
# ------------------------------------ Node ---
# 注意:每个节点的名字(node.name)不要相同
node.name: node3.cn
node.master: true
node.data: true
# ----------------------------------- Paths ---
path.data: /opt/elasticsearch/elasticsearch-7.4.0/data
path.logs: /opt/elasticsearch/elasticsearch-7.4.0/logs
# ---------------------------------- Network ---
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery ---
cluster.initial_master_nodes: ["node3.cn", "node4.cn","node5.cn"]
discovery.zen.ping.unicast.hosts: ["192.168.11.133", "192.168.11.134","192.168.11.135"]
discovery.zen.minimum_master_nodes: 2
Modifier le fichier de configuration elasticsearch-env
[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"
4. Distribuez les fichiers
Envoyez tous les fichiers es qui ont été configurés sur le nœud node3 dans le même répertoire de tous les nœuds du cluster (vous serez invité à entrer le mot de passe de l'utilisateur root du nœud respectif)
[root@node3 ~]# scp -r /opt/elasticsearch/elasticsearch-7.4.0 node4.cn:/opt/elasticsearch/
[root@node3 ~]# scp -r /opt/elasticsearch/elasticsearch-7.4.0 node5.cn:/opt/elasticsearch/
Editez le fichier elasticsearch.yml sur node4 et node5 respectivement
Modifiez le node.name respectif (faites attention à distinguer le node.name pour vous assurer que le node.name est unique dans le cluster)
[root@node4 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml
[root@node5 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml
Quitter après l'enregistrement: wq
5. Créez des groupes d'utilisateurs et des informations sur les utilisateurs
[root@node3 ~]# groupadd es
[root@node3 ~]# useradd es -g es
[root@node3 ~]# chown -R es:es /opt/elasticsearch/*
Les opérations des autres nœuds du cluster sont les mêmes que pour node3.
6, démarrez le service
Changer d'utilisateur
[root@node3 ~]# su es
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch -d
Effet de démarrage réussi:
Les opérations des autres nœuds sont les mêmes que pour node3.
7. Vérifiez la situation de démarrage
[root@node3 ~]$ jps
Vous pouvez également vérifier l'état de démarrage du service sur d'autres nœuds.
8. Afficher le résultat de démarrage dans le navigateur
Tapez dans le navigateur
http://192.168.11.133:9200/
http://192.168.11.134:9200/
http://192.168.11.135:9200/
L'effet est le suivant:
À ce stade, Centos 7.4 crée manuellement une opération de cluster Elasticsearch 7 est terminée.
Il existe des outils de visualisation pour observer visuellement des informations plus détaillées dans Elasticsearch.
Nyo: elasticsearch-head, Kibana, ElasticHD, etc.
ElasticHD: étapes de construction:
Référence: https://hunter.blog.csdn.net/article/details/89326527
Étapes de construction de la tête Elasticsearch:
Référence: https://hunter.blog.csdn.net/article/details/102336223
Étapes de construction de Kibana:
Référence: https://blog.csdn.net/llwy1428/article/details/89326461
4. Problèmes et solutions possibles (mise à jour continue)
1. Après le démarrage, le service se bloque automatiquement après un certain temps, vérifiez le journal et signalez l'erreur suivante:
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Le problème est traduit: les permissions de mémoire détenues par les utilisateurs d'elasticsearch sont trop petites, au moins 262144 sont nécessaires;
Afficher la mémoire actuelle
[root@node3 ~]# sysctl -a|grep vm.max_map_count
Solution:
Editez le fichier sysctl.conf
[root@node3 ~]# vim /etc/sysctl.conf
Ajouter une ligne à la fin
vm.max_map_count=262144
Après l'enregistrement, redémarrez le système pour un effet permanent.
(Les opérations des autres nœuds du cluster sont les mêmes que celles de node3)
2. Le service n'a pas pu démarrer
[2019-04-29T22:13:53,403][ERROR][o.e.b.Bootstrap ] [node3.cn] Exception
java.lang.RuntimeException: can not run elasticsearch as root
La cause du problème: elasticsearch n'est pas autorisé à démarrer sous les privilèges root et doit être basculé vers l'utilisateur es.
Solution: reportez-vous aux étapes 4 et 5 de la partie III
3. Démarrez une erreur après avoir changé d'utilisateur es
2019-04-29 22:40:55,736 main ERROR Unable to locate appender "rolling_old" for logger config "root"
La cause du problème: dans le répertoire des journaux par défaut, il y a des fichiers avec des autorisations utilisateur non-es
Solution: sous l'utilisateur root, attribuez tous les fichiers du répertoire du journal elasticsearch à l'utilisateur es
[root@node3 ~]# chmod -R es:es /opt/elasticsearch/elasticsearch-7.4.0/logs/*
4. Une erreur est signalée au démarrage. La version jdk est trop basse et jdk11 ou supérieur est requis
Modifier le fichier elasticsearch-env
[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
开头写入(各节点都要操作)
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"
Cinq, description des paramètres
cluster.name: Elasticsearch
configure le nom de cluster de ES. La valeur par défaut est elasticsearch. ES trouvera automatiquement ES sous le même segment de réseau. S'il existe plusieurs clusters sous le même segment de réseau, vous pouvez utiliser cet attribut pour distinguer différents clusters.
node.name:
nom du nœud "node1.cn" . Par défaut, un nom dans la liste de noms est assigné aléatoirement. La liste se trouve dans le fichier name.txt dans le dossier config du package es jar. Il y a beaucoup de noms intéressants ajoutés par l'auteur.
node.master: true
spécifie si le nœud est éligible pour être élu en tant que nœud. La valeur par défaut est true. es est la première machine du cluster par défaut en tant que maître. Si cette machine raccroche, elle réélira le maître.
node.data: true
spécifie si le nœud stocke les données d'index, la valeur par défaut est true.
index.number_of_shards: 5
Définissez le nombre par défaut de fragments d'index, la valeur par défaut est 5 fragments.
index.number_of_replicas: 1
Définissez le nombre par défaut de répliques d'index, la valeur par défaut est 1 réplique.
path.conf: / path / to / conf
définit le chemin de stockage du fichier de configuration, la valeur par défaut est le dossier config sous le répertoire racine es.
path.data: / path / to / data
Définit le chemin de stockage des données d'index. La valeur par défaut est le dossier de données sous le répertoire racine es. Plusieurs chemins de stockage peuvent être définis, séparés par des virgules, par exemple:
path.data: / path / to / data1, / chemin / vers / data2
path.work: / path / to / work
définit le chemin de stockage des fichiers temporaires, la valeur par défaut est le dossier de travail sous le répertoire racine es.
path.logs: / path / to / logs
définit le chemin de stockage du fichier journal, la valeur par défaut est le dossier logs sous le répertoire racine es
path.plugins: / path / to / plugins
définit le chemin de stockage du plugin, la valeur par défaut est le dossier plugins sous le répertoire racine es
bootstrap.mlockall: true est
défini sur true pour verrouiller la mémoire. Étant donné que l'efficacité de es sera réduite lorsque jvm commencera à swap, vous pouvez donc définir les deux variables d'environnement ES_MIN_MEM et ES_MAX_MEM sur la même valeur et vous assurer que la machine dispose de suffisamment de mémoire allouée à es. Dans le même temps, le processus elasticsearch doit être autorisé à verrouiller la mémoire.Vous pouvez utiliser la commande ulimit -l unlimited sous Linux.
network.bind_host: 192.168.0.1
définit l'adresse IP liée, qui peut être ipv4 ou ipv6, et la valeur par défaut est 0.0.0.0.
network.publish_host: 192.168.0.1
définit l'adresse IP des autres nœuds pour interagir avec le nœud. Si elle n'est pas définie, il la déterminera automatiquement. La valeur doit être une véritable adresse IP.
network.host: 192.168.0.1
Ce paramètre est utilisé pour définir les deux paramètres ci-dessus bind_host et publish_host en même temps.
transport.tcp.port: 9300
définit le port tcp pour l'interaction entre les nœuds, la valeur par défaut est 9300.
transport.tcp.compress: true
définit s'il faut compresser les données lors de la transmission tcp, la valeur par défaut est false, pas de compression.
http.port: 9200
définit le port http pour les services externes, la valeur par défaut est 9200.
http.max_content_length: 100 Mo
définit la capacité maximale du contenu, la valeur par défaut est 100 Mo
http.enabled: false Indique s'il
faut utiliser le protocole http pour fournir des services externes, la valeur par défaut est true et elle est activée.
gateway.type:
type de passerelle locale . La valeur par défaut est locale, c'est-à-dire le système de fichiers local. Il peut être défini sur le système de fichiers local, le système de fichiers distribué, le HDFS d'Hadoop et le serveur s3 d'Amazon. La méthode de configuration des autres systèmes de fichiers sera détaillée la prochaine fois Dire.
gateway.recover_after_nodes: 1
Définissez la récupération des données lorsque N nœuds du cluster démarrent, la valeur par défaut est 1.
gateway.recover_after_time: 5m
définit le délai d'expiration du processus de récupération des données d'initialisation, la valeur par défaut est de 5 minutes.
gateway.expected_nodes: 2
Définissez le nombre de nœuds dans ce cluster. La valeur par défaut est 2. Une fois ces N nœuds démarrés, les données seront restaurées immédiatement.
cluster.routing.allocation.node_initial_primaries_recoveries: 4 Lors de l'
initialisation de la récupération de données, le nombre de threads de récupération simultanés, la valeur par défaut est 4.
cluster.routing.allocation.node_concurrent_recoveries: 2
Ajoutez le nombre de threads de récupération simultanés lors de la suppression de nœuds ou de l'équilibrage de charge, la valeur par défaut est 4.
indices.recovery.max_size_per_sec: 0
Définissez la limite de bande passante pendant la récupération de données, par exemple 100 Mo, la valeur par défaut est 0, c'est-à-dire illimitée.
indices.recovery.concurrent_streams: 5
Définissez ce paramètre pour limiter le nombre maximal de flux simultanés ouverts simultanément lors de la récupération de données à partir d'autres fragments. La valeur par défaut est 5.
discovery.zen.minimum_master_nodes: 1
Définissez ce paramètre pour vous assurer que les nœuds du cluster peuvent connaître d'autres N nœuds qualifiés de maîtres. La valeur par défaut est 1, pour les grands clusters, vous pouvez définir une valeur plus grande (2-4)
discovery.zen.ping.timeout: 3s
définit le délai d'expiration de la connexion ping lorsque d'autres nœuds sont automatiquement découverts dans le cluster. La valeur par défaut est de 3 secondes. Pour les environnements réseau pauvres, une valeur plus élevée peut être utilisée pour éviter les erreurs lors de la découverte automatique.
discovery.zen.ping.multicast.enabled: false
Définissez s'il faut ouvrir le nœud de découverte de multidiffusion, la valeur par défaut est true.
discovery.zen.ping.unicast.hosts: ["host1", "host2: port", "host3 [portX-portY]"]
définit la liste initiale des nœuds maîtres dans le cluster, et ces nœuds peuvent être utilisés pour découvrir automatiquement les clusters nouvellement ajoutés nœud.
Voici quelques réglages de paramètres de journal lent pour la
requête index.search.slowlog.level: TRACE
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog .threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug: 500ms
index.search.slowlog.threshold.fetch.trace : 200 ms
Six, extension --- installation du plug-in
1. Analyse du plugin de segmentation de mots internationalisé-icu
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install analysis-icu
2. Afficher les plug-ins installés dans le navigateur
http://192.168.11.133:9200/_cat/plugins
3. Afficher les autres plug-ins pouvant être installés directement
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install -h
Adresse de référence:
https://blog.csdn.net/u012637358/article/details/80994945
Fonctionnement de base ES