Recuerde Centos7.4 para construir manualmente un clúster de Elasticsearch 7.4.0

Grupo de intercambio QQ: 64655993 ¡Espero que pueda ayudarlo! ! !

Página web oficial: 

https://www.elastic.co/cn/products/elasticsearch

1. Descripción básica del entorno

1. Descripción del sistema

Sistema: CentOS-7-x86_64-Minimal-1708

enlace de descarga: 

 http://archive.kernel.org/centos-vault/7.4.1708/isos/x86_64/   

2. Instale la máquina virtual

Instale 3 máquinas virtuales (la cantidad de nodos en el entorno de producción depende de los requisitos comerciales específicos)

Cada configuración de máquina virtual: memoria 3G, CPU de 2 núcleos

Consulte el proceso de instalación:

https://blog.csdn.net/llwy1428/article/details/89328381

3. Dirección de descarga de Elasticsearch

https://www.elastic.co/cn/

https://www.elastic.co/cn/start

2. Configuración del entorno básico

1. Modifique el nombre de host

Edite el nombre de host de cada nodo del clúster (los nombres de host de los tres nodos de este clúster son node3.cn node4.cn node5.cn)

Tome node3.cn como ejemplo:

[root@localhost~]# hostnamectl set-hostname node3.cn

node4.cn y node5.cn se omiten.

2. Configure la red de la máquina virtual, cada máquina virtual está conectada a Internet (y establezca una IP estática)

La configuración de la tarjeta de red puede referirse a:

https://blog.csdn.net/llwy1428/article/details/85058028

Establecer IP estática

Aquí, tome el nodo node3.cn como ejemplo (consulte este nodo para la configuración de otros nodos en el clúster y tenga en cuenta que la ip es única):

[[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

Nota: el cuadro rojo es la parte modificada y agregada

Guardar y salir después de la modificación  

 :wq

Reiniciar el servicio de red

[root@node3 ~]# service network restart

Puede referirse a:

https://blog.csdn.net/llwy1428/article/details/85058028

La configuración de otros nodos del clúster se refiere a este nodo.

3. Instale las herramientas básicas (todos los nodos deben estar instalados)

[root@node3 ~]# yum install -y vim wget lrzsz tree zip unzip net-tools ntp
[root@node3 ~]# yum update -y (可选)

4. (Opcional) Instale y configure JDK para cada nodo del clúster (es7.x requiere jdk11 o superior y openjdk está incluido en el paquete de instalación)

JDK debe instalarse en cada nodo del clúster

Referencia de pasos específicos:

 https://blog.csdn.net/llwy1428/article/details/85232267

5. Configure el firewall

Apague el firewall y configure el inicio para prohibir el inicio

关闭防火墙  : systemctl stop firewalld
查看状态    : systemctl status firewalld
开机禁用    : systemctl disable firewalld

6. Configure el archivo de host

Aquí está el nodo node3.cn como ejemplo, los otros nodos en el clúster son los mismos que node3.cn:

[root@node3 ~]# vim /etc/hosts

7. Configurar la sincronización horaria entre nodos

Este artículo se basa en el servidor de tiempo Aliyun, la dirección del servidor de tiempo Aliyun: ntp6.aliyun.com

Nota: Si hay un servidor de hora dedicado, cambie el nombre de host o la dirección IP del servidor de hora. El nombre de host debe asignarse en el archivo etc / hosts.

Tome node3.cn como ejemplo:

Establezca la zona horaria del sistema en el distrito de Dongba (zona horaria de Shanghai)

[root@node3 ~]# timedatectl set-timezone Asia/Shanghai

Apague el servicio ntpd (este paso debe realizarse, de lo contrario, el tiempo de sincronización automática no será válido)

[root@node3 ~]# systemctl stop ntpd.service

Configurar el servicio ntpd para prohibir el inicio

[root@node3 ~]# systemctl disable ntpd

Configurar una tarea programada

[root@node3 ~]# crontab -e

Escriba lo siguiente (sincronice con el servidor de tiempo de Alibaba Cloud cada 10 minutos):

0-59/10 * * * * /usr/sbin/ntpdate ntp6.aliyun.com

Reinicie el servicio de tareas programadas

[root@node3 ~]# /bin/systemctl restart crond.service

Establecer tareas cronometradas para iniciar

[root@node3 ~]# vim /etc/rc.local

Después de agregar el siguiente contenido, guarde y salga   

 :wq
/bin/systemctl start crond.service

Los otros nodos del clúster son los mismos que el nodo node3.cn.

8. Configure el entorno del sistema como UTF8

Tome node3.cn como ejemplo:

[root@node3 ~]# echo "export LANG=zh_CN.UTF-8 " >> ~/.bashrc
[root@node3 ~]# source ~/.bashrc

Los otros nodos del clúster son los mismos que el nodo node3.cn.

9. Modifique el número máximo de archivos abiertos (entorno de no producción, no se requiere configuración)

Aquí hay un ejemplo 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 configuración de otros nodos en el clúster es la misma que node3.cn

10. Desactiva SELinux (opcional)

Tome node3.cn como ejemplo:

[root@node3 ~]# vim /etc/selinux/config

Después de modificar el siguiente contenido, guarde y salga    

:wq

La configuración de otros nodos en el clúster es la misma que la de node3.cn.

11. Desactivar páginas gigantes transparentes (opcional)

Tome node3.cn como ejemplo:

Ver

[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

Después de reiniciar el sistema, tendrá efecto de forma permanente.

Verifique después de reiniciar el sistema:

[root@node3 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
效果:   
always madvise [never]

La configuración de otros nodos en el clúster es la misma que la de node3.cn.

12. Configure la memoria /etc/sysctl.conf

[root@node3 ~]# vim /etc/sysctl.conf
写入(根据自身硬件条件而定,其它节点于此相同)
vm.max_map_count=262144

Tres, implementación y configuración del clúster de Elasticsearch

1. Cree una carpeta / opt / elasticsearch / para cada nodo  

[root@node3 ~]# mkdir /opt/elasticsearch/

2. Cargar archivo rz

Descargue el paquete comprimido (elasticsearch-7.4.0-linux-x86_64.tar.gz) en el sitio web oficial al local, y luego use rz u otras herramientas ftp de terceros para cargar el paquete de instalación en el directorio designado del nodo 3 (la red permite condiciones Descarga, también puedes usar wget para descargar directamente)

[root@node3 elasticsearch]# rz

Después de cargar, descomprima el paquete comprimido

[root@node3 elasticsearch]# tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz

Ver la carpeta descomprimida

3. Modifique el archivo de configuración elasticsearch.yml

[root@node3 ~]# vim /opt/elasticsearch/elasticsearch-7.0.0/config/elasticsearch.yml

El contenido del archivo es el siguiente (consulte el final del artículo para obtener una descripción específica del parámetro):

# ---------------------------------- 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

Modificar el archivo de configuración elasticsearch-env

[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"

4. Distribuir archivos

Envíe todos los archivos es que se han configurado en el nodo nodo3 al mismo directorio de todos los nodos del clúster (se le pedirá que ingrese la contraseña del usuario raíz del nodo respectivo)

[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/

Edite el archivo elasticsearch.yml en node4 y node5 respectivamente

Modifique el correspondiente node.name (preste atención a distinguir node.name para asegurarse de que node.name sea único en el clúster)

[root@node4 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml
[root@node5 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml

Salir después de guardar: wq

5. Cree grupos de usuarios e información de usuarios

[root@node3 ~]# groupadd es
[root@node3 ~]# useradd es -g es
[root@node3 ~]# chown -R es:es /opt/elasticsearch/*

Las operaciones de otros nodos en el clúster son las mismas que las del nodo3.

6, inicie el servicio

Cambiar de usuario

[root@node3 ~]# su es
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch -d

Efecto de inicio exitoso:

Las operaciones de otros nodos son las mismas que las del nodo3.

7. Verifique la situación de inicio

[root@node3 ~]$ jps

También puede verificar el estado de inicio del servicio en otros nodos.

8. Ver el resultado de inicio en el navegador.

Escriba en el navegador  

http://192.168.11.133:9200/
http://192.168.11.134:9200/
http://192.168.11.135:9200/

El efecto es el siguiente:

 

En este punto, Centos 7.4 construye manualmente un clúster de Elasticsearch 7, la operación está completa.

 

Existen algunas herramientas de visualización para observar visualmente información más detallada en Elasticsearch.

Nyo: elasticsearch-head, Kibana, ElasticHD, etc.

ElasticHD: pasos de compilación:

Referencia: https://hunter.blog.csdn.net/article/details/89326527

Pasos de construcción de Elasticsearch-head:

Referencia: https://hunter.blog.csdn.net/article/details/102336223

Pasos de construcción de Kibana:

Referencia: https://blog.csdn.net/llwy1428/article/details/89326461

4. Posibles problemas y soluciones (actualización continua)

1. Después de comenzar, el servicio se cuelga automáticamente después de un período de tiempo, verifique el registro e informe el siguiente error:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

El problema se traduce: los permisos de memoria que poseen los usuarios de elasticsearch son demasiado pequeños, se requiere al menos 262144;

Ver memoria actual

[root@node3 ~]# sysctl -a|grep vm.max_map_count

 

solución:

Edite el archivo sysctl.conf

[root@node3 ~]# vim /etc/sysctl.conf

Agrega una línea al final

vm.max_map_count=262144

Después de guardar, reinicie el sistema para un efecto permanente.

(Las operaciones de otros nodos en el clúster son las mismas que las del nodo3)

2. El servicio no pudo iniciarse

[2019-04-29T22:13:53,403][ERROR][o.e.b.Bootstrap          ] [node3.cn] Exception
java.lang.RuntimeException: can not run elasticsearch as root

La causa del problema: elasticsearch no puede iniciarse con privilegios de root y debe cambiarse al usuario es.

Solución: consulte los pasos 4 y 5 de la Parte III

3. Iniciar un error después de cambiar el usuario de es

2019-04-29 22:40:55,736 main ERROR Unable to locate appender "rolling_old" for logger config "root"

La causa del problema: en el directorio de registro predeterminado, hay archivos con permisos de usuario que no son es

Solución: en el usuario raíz, asigne todos los archivos del directorio de registro de elasticsearch al usuario es

[root@node3 ~]# chmod -R es:es /opt/elasticsearch/elasticsearch-7.4.0/logs/*

4. Se informa de un error durante el inicio. La versión de jdk es demasiado baja y se requiere jdk11 o superior

Modificar el archivo elasticsearch-env

[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
开头写入(各节点都要操作)
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"

Cinco, descripción del parámetro

cluster.name: Elasticsearch 
configura el nombre del clúster de ES. El valor predeterminado es elasticsearch. ES encontrará automáticamente ES en el mismo segmento de red. Si hay varios clústeres en el mismo segmento de red, puede utilizar este atributo para distinguir diferentes clústeres.

node.name: "node1.cn"
nombre de nodo. Por defecto, un nombre en la lista de nombres se asigna aleatoriamente. La lista está en el archivo name.txt  en la carpeta de configuración del paquete es jar. Hay muchos nombres interesantes agregados por el autor.

node.master: true 
especifica si el nodo es elegible para ser elegido como nodo, el valor predeterminado es verdadero, es es la primera máquina en el clúster predeterminado como maestro, si esta máquina cuelga, volverá a elegir al maestro.

node.data: true 
especifica si el nodo almacena datos de índice, el valor predeterminado es true.

index.number_of_shards: 5 
Establezca el número predeterminado de fragmentos de índice, el predeterminado es 5 fragmentos.

index.number_of_replicas: 1 
Establezca el número predeterminado de réplicas de índice, el predeterminado es 1 réplica.

path.conf: / path / to / conf 
establece la ruta de almacenamiento del archivo de configuración, el valor predeterminado es la carpeta de configuración en el directorio raíz es.

path.data: / path / to / data 
Establece la ruta de almacenamiento de los datos del índice. El valor predeterminado es la carpeta de datos en el directorio raíz es. Se pueden establecer varias rutas de almacenamiento, separadas por comas, por ejemplo: 
ruta.datos: / ruta / a / data1, / ruta / a / data2

path.work: / path / to / work 
establece la ruta de almacenamiento de los archivos temporales, el valor predeterminado es la carpeta de trabajo en el directorio raíz es.

path.logs: / path / to / logs 
establece la ruta de almacenamiento del archivo de registro, el valor predeterminado es la carpeta de registros en el directorio raíz es

path.plugins: / path / to / plugins 
establece la ruta de almacenamiento del complemento, el valor predeterminado es la carpeta de complementos en el directorio raíz es

bootstrap.mlockall: true se 
establece en true para bloquear la memoria. Debido a que la eficiencia de es se reducirá cuando jvm comience a intercambiarse, para asegurarse de que no se intercambie, puede establecer las dos variables de entorno ES_MIN_MEM y ES_MAX_MEM en el mismo valor, y asegurarse de que la máquina tenga suficiente memoria asignada a es. Al mismo tiempo, se debe permitir que el proceso de elasticsearch bloquee la memoria.Puede usar el comando ulimit -l unlimited en Linux.

network.bind_host: 192.168.0.1 
establece la dirección IP vinculada, que puede ser ipv4 o ipv6, y la predeterminada es 0.0.0.0.

network.publish_host: 192.168.0.1 
establece la dirección IP para que otros nodos interactúen con este nodo. Si no está configurada, la determinará automáticamente. El valor debe ser una dirección IP real.

network.host: 192.168.0.1 
Este parámetro se utiliza para configurar los dos parámetros anteriores bind_host y publish_host al mismo tiempo.

transport.tcp.port: 9300 
establece el puerto tcp para la interacción entre nodos, el valor predeterminado es 9300.

transport.tcp.compress: true 
establece si se comprimirán los datos durante la transmisión tcp, el valor predeterminado es falso, sin compresión.

http.port: 9200 
establece el puerto http para servicios externos, el valor predeterminado es 9200.

http.max_content_length: 100mb 
establece la capacidad máxima del contenido, el valor predeterminado es 100mb

http.enabled: false 
Si se utilizará el protocolo http para proporcionar servicios externos, el valor predeterminado es verdadero y está habilitado

gateway.type:
el tipo de puerta de enlace local  . El valor predeterminado es local, que es el sistema de archivos local. Se puede configurar en el sistema de archivos local, el sistema de archivos distribuido, HDFS de hadoop y el servidor s3 de Amazon. El método de configuración de otros sistemas de archivos se detallará la próxima vez Decir.

gateway.recover_after_nodes: 1 
Establezca la recuperación de datos cuando se inicien N nodos en el clúster, el valor predeterminado es 1.

gateway.recover_after_time: 5m 
establece el tiempo de espera del proceso de recuperación de datos de inicialización, el valor predeterminado es 5 minutos.

gateway.expected_nodes: 2 
Establezca la cantidad de nodos en este clúster. El valor predeterminado es 2. Una vez que se inician estos N nodos, los datos se restaurarán inmediatamente.

cluster.routing.allocation.node_initial_primaries_recoveries: 4 Al 
inicializar la recuperación de datos, el número de subprocesos de recuperación simultáneos, el valor predeterminado es 4.

cluster.routing.allocation.node_concurrent_recoveries: 2 
Agregue la cantidad de subprocesos de recuperación simultáneos al eliminar nodos o balancear la carga, el valor predeterminado es 4.

indices.recovery.max_size_per_sec: 0 
Establezca el límite de ancho de banda durante la recuperación de datos, como 100mb, el valor predeterminado es 0, es decir, ilimitado.

indices.recovery.concurrent_streams: 5 
Establezca este parámetro para limitar el número máximo de flujos concurrentes abiertos simultáneos al recuperar datos de otros fragmentos. El valor predeterminado es 5.

discovery.zen.minimum_master_nodes: 1 
Configure este parámetro para asegurarse de que los nodos del clúster puedan conocer otros N nodos calificados como maestros. El valor predeterminado es 1, para clústeres grandes, puede establecer un valor mayor (2-4)

discovery.zen.ping.timeout: 3s 
establece el tiempo de espera de la conexión ping cuando otros nodos se detectan automáticamente en el clúster. El valor predeterminado es 3 segundos. Para entornos de red deficientes, puede establecer un valor más alto para evitar errores durante el descubrimiento automático.

discovery.zen.ping.multicast.enabled: false 
Establezca si se abre el nodo de descubrimiento de multidifusión, el valor predeterminado es verdadero.

discovery.zen.ping.unicast.hosts: ["host1", "host2: puerto", "host3 [portX-portY]"] 
establece la lista inicial de nodos maestros en el clúster, y estos nodos se pueden usar para descubrir automáticamente clústeres recién agregados nodo.

Las siguientes son algunas configuraciones de parámetros de registro lento para la 
consulta 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
 

Seis, extensión --- instalación enchufable

1. Análisis del complemento de segmentación de palabras internacionalizado-icu

[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install analysis-icu

2. Ver complementos instalados en el navegador

http://192.168.11.133:9200/_cat/plugins

3. Ver otros complementos que se pueden instalar directamente

[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install -h

 

 

 

Dirección de referencia:

https://blog.csdn.net/u012637358/article/details/80994945

Operación básica ES

https://www.cnblogs.com/zeenzhou/p/11588629.html

Supongo que te gusta

Origin blog.csdn.net/llwy1428/article/details/89714709
Recomendado
Clasificación