Lembre-se do Centos7.4 para construir manualmente um cluster Elasticsearch 7.4.0

Grupo de troca QQ: 64655993 Espero que possa ajudá-lo! ! !

Website oficial: 

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

1. Descrição básica do ambiente

1. Descrição do sistema

Sistema: CentOS-7-x86_64-Minimal-1708

Link para Download: 

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

2. Instale a máquina virtual

Instale 3 máquinas virtuais (o número de nós no ambiente de produção depende dos requisitos de negócios específicos)

Cada configuração de máquina virtual: memória 3G, CPU de 2 núcleos

Consulte o processo de instalação:

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

3. Endereço de download do Elasticsearch

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

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

2. Configuração básica do ambiente

1. Modifique o nome do host

Edite o nome do host de cada nó no cluster (os nomes do host dos três nós neste cluster são node3.cn node4.cn node5.cn)

Tome node3.cn como exemplo:

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

node4.cn e node5.cn são omitidos.

2. Configure a rede da máquina virtual, cada máquina virtual é conectada à Internet (e defina um IP estático)

A configuração da placa de rede pode se referir a:

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

Definir IP estático

Aqui, tome o nó node3.cn como exemplo (consulte este nó para a configuração de outros nós no cluster e observe que o ip é único):

[[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: a caixa vermelha é a parte modificada e adicionada

Salvar e sair após modificação  

 :wq

Reinicie o serviço de rede

[root@node3 ~]# service network restart

Pode referir-se a:

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

A configuração de outros nós no cluster refere-se a este nó.

3. Instale as ferramentas básicas (todos os nós devem ser instalados)

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

4. (Opcional) Instale e configure o JDK para cada nó no cluster (es7.x requer jdk11 ou superior, e openjdk está incluído no pacote de instalação)

O JDK deve ser instalado em cada nó do cluster

Referência de etapas específicas:

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

5. Configure o firewall

Desligue o firewall e configure a inicialização para proibir a inicialização

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

6. Configure o arquivo host

Aqui está o nó node3.cn como exemplo, os outros nós no cluster são iguais a node3.cn:

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

7. Configure a sincronização de tempo entre os nós

Este artigo é baseado no servidor de horário Aliyun, endereço do servidor de horário Aliyun: ntp6.aliyun.com

Nota: Se houver um servidor de horário dedicado, altere o nome do host ou endereço IP do servidor de horário. O nome do host precisa ser mapeado no arquivo etc / hosts.

Tome node3.cn como exemplo:

Defina o fuso horário do sistema para Dongba District (Shanghai Time Zone)

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

Desligue o serviço ntpd (esta etapa deve ser realizada, caso contrário, o tempo de sincronização automática será inválido)

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

Defina o serviço ntpd para proibir a inicialização

[root@node3 ~]# systemctl disable ntpd

Configure uma tarefa agendada

[root@node3 ~]# crontab -e

Escreva o seguinte (sincronize com o servidor de horário Alibaba Cloud a cada 10 minutos):

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

Reinicie o serviço de tarefa agendada

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

Defina tarefas cronometradas para iniciar

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

Depois de adicionar o seguinte conteúdo, salve e saia   

 :wq
/bin/systemctl start crond.service

Os outros nós no cluster são iguais ao nó node3.cn.

8. Configure o ambiente do sistema como UTF8

Tome node3.cn como exemplo:

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

Os outros nós no cluster são iguais ao nó node3.cn.

9. Modifique o número máximo de arquivos abertos (ambiente de não produção, nenhuma configuração necessária)

Aqui está um exemplo 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

A configuração de outros nós no cluster é a mesma que node3.cn

10. Desative o SELinux (opcional)

Tome node3.cn como exemplo:

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

Depois de modificar o seguinte conteúdo, salve e saia    

:wq

A configuração de outros nós no cluster é a mesma que node3.cn.

11. Desative Transparent HugePages (opcional)

Tome node3.cn como exemplo:

Visão

[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

Depois de reiniciar o sistema, ele entrará em vigor permanentemente.

Verifique depois de reiniciar o sistema:

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

A configuração de outros nós no cluster é a mesma que node3.cn.

12. Configure a memória /etc/sysctl.conf

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

Três, implantação e configuração do cluster Elasticsearch

1. Crie uma pasta / opt / elasticsearch / para cada nó  

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

2. Carregar arquivo rz

Baixe o pacote compactado (elasticsearch-7.4.0-linux-x86_64.tar.gz) no site oficial para o local e, em seguida, use rz ou outras ferramentas de ftp de terceiros para carregar o pacote de instalação para o diretório especificado do nó 3 (condições permitidas pela rede) Baixe, você também pode usar o wget para baixar diretamente)

[root@node3 elasticsearch]# rz

Após fazer o upload, descompacte o pacote compactado

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

Ver a pasta descompactada

3. Modifique o arquivo de configuração elasticsearch.yml

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

O conteúdo do arquivo é o seguinte (consulte o final do artigo para obter a descrição do parâmetro específico):

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

Modifique o arquivo de configuração 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 arquivos

Envie todos os arquivos es que foram configurados no nó node3 para o mesmo diretório de todos os nós no cluster (você será solicitado a inserir a senha do usuário root do respectivo nó)

[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 o arquivo elasticsearch.yml em node4 e node5 respectivamente

Modifique o respectivo node.name (preste atenção para distinguir node.name para garantir que node.name seja único no 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

Sair após salvar: wq

5. Crie grupos de usuários e informações de usuários

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

As operações de outros nós no cluster são as mesmas do node3.

6, inicie o serviço

Mudar de utilizador

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

Efeito de inicialização bem-sucedido:

As operações de outros nós são iguais às do node3.

7. Verifique a situação de inicialização

[root@node3 ~]$ jps

Você também pode verificar o status de inicialização do serviço em outros nós.

8. Veja o resultado da inicialização no navegador

Digite no navegador  

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

O efeito é o seguinte:

 

Neste ponto, o Centos 7.4 constrói manualmente uma operação de cluster Elasticsearch 7 concluída.

 

Existem algumas ferramentas de visualização para observar visualmente informações mais detalhadas no Elasticsearch.

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

ElasticHD: etapas de construção:

Referência: https://hunter.blog.csdn.net/article/details/89326527

Etapas de construção da cabeça de pesquisa elástica:

Referência: https://hunter.blog.csdn.net/article/details/102336223

Etapas de construção do Kibana:

Referência: https://blog.csdn.net/llwy1428/article/details/89326461

4. Possíveis problemas e soluções (atualização contínua)

1. Depois de iniciar, o serviço trava automaticamente após um período de tempo, verifique o log e relate o seguinte erro:

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

O problema está traduzido: as permissões de memória pertencentes aos usuários do elasticsearch são muito pequenas, pelo menos 262144 são necessárias;

Ver a memória atual

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

 

solução:

Edite o arquivo sysctl.conf

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

Adicione uma linha no final

vm.max_map_count=262144

Depois de salvar, reinicie o sistema para efeito permanente.

(As operações de outros nós no cluster são as mesmas do node3)

2. O serviço falhou ao iniciar

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

A causa do problema: elasticsearch não pode ser iniciado com privilégios de root e precisa ser alternado para o usuário es.

Solução: Consulte as etapas 4 e 5 na Parte III

3. Inicie um erro após trocar o usuário es

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

A causa do problema: no diretório de log padrão, há arquivos com permissões de usuário que não são do ES

Solução: no usuário root, atribua todos os arquivos no diretório de log do elasticsearch ao usuário es

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

4. Um erro é relatado durante a inicialização. A versão do jdk é muito baixa e o jdk11 ou superior é necessário

Modifique o arquivo elasticsearch-env

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

Cinco, descrição do parâmetro

cluster.name: Elasticsearch 
configura o nome do cluster de ES. O padrão é elasticsearch. ES irá encontrar automaticamente ES no mesmo segmento de rede. Se houver vários clusters no mesmo segmento de rede, você pode usar este atributo para distinguir diferentes clusters.

node.name: "node1.cn"
nome do nó. Por padrão, um nome na lista de nomes é atribuído aleatoriamente. A lista está no arquivo name.txt  na pasta de configuração do pacote es jar. Existem muitos nomes interessantes adicionados pelo autor.

node.master: true 
especifica se o nó é elegível para ser eleito como um nó. O padrão é true. es é a primeira máquina no cluster por padrão como master. Se esta máquina desligar, ela reelegerá o master.

node.data: true 
especifica se o nó armazena dados de índice, o padrão é true.

index.number_of_shards: 5 
Defina o número padrão de fragmentos de índice, o padrão é 5 fragmentos.

index.number_of_replicas: 1 
Defina o número padrão de réplicas de índice, o padrão é 1 réplica.

path.conf: / path / to / conf 
define o caminho de armazenamento do arquivo de configuração, o padrão é a pasta config no diretório raiz es.

path.data: / path / to / data 
Defina o caminho de armazenamento de dados de índice. O padrão é a pasta de dados no diretório raiz es. Vários caminhos de armazenamento podem ser definidos, separados por vírgulas, por exemplo: 
path.data: / path / to / data1, / path / to / data2

path.work: / path / to / work 
define o caminho de armazenamento de arquivos temporários, o padrão é a pasta de trabalho no diretório raiz es.

path.logs: / path / to / logs 
define o caminho de armazenamento do arquivo de log, o padrão é a pasta de logs no diretório raiz es

path.plugins: / path / to / plugins 
define o caminho de armazenamento do plugin, o padrão é a pasta de plugins no diretório raiz es

bootstrap.mlockall: true é 
definido como true para bloquear a memória. Como a eficiência do es será reduzida quando o jvm iniciar a troca, para garantir que não seja uma troca, você pode definir as duas variáveis ​​de ambiente ES_MIN_MEM e ES_MAX_MEM com o mesmo valor e garantir que a máquina tenha memória suficiente alocada para es. Ao mesmo tempo, o processo de elasticsearch deve ter permissão para bloquear a memória.Você pode usar o comando ulimit -l unlimited no Linux.

network.bind_host: 192.168.0.1 
define o endereço IP vinculado, que pode ser ipv4 ou ipv6, e o padrão é 0.0.0.0.

network.publish_host: 192.168.0.1 
define o endereço IP para outros nós interagirem com o nó. Se não for definido, ele o determinará automaticamente. O valor deve ser um endereço IP real.

network.host: 192.168.0.1 
Este parâmetro é usado para definir os dois parâmetros acima de bind_host e publish_host ao mesmo tempo.

transport.tcp.port: 9300 
define a porta tcp para interação entre os nós, o padrão é 9300.

transport.tcp.compress: true 
define se os dados devem ser compactados durante a transmissão tcp, o padrão é false, sem compactação.

http.port: 9200 
define a porta http para serviços externos, o padrão é 9200.

http.max_content_length: 100mb 
defina a capacidade máxima do conteúdo, o padrão é 100mb

http.enabled: false 
Se deve usar o protocolo http para fornecer serviços externos, o padrão é verdadeiro e está ativado.

gateway.type:
O tipo de gateway local  . O padrão é local, que é o sistema de arquivos local. Ele pode ser definido como sistema de arquivos local, sistema de arquivos distribuído, HDFS do hadoop e servidor s3 da amazon. O método de configuração de outros sistemas de arquivos será detalhado na próxima vez Dizer.

gateway.recover_after_nodes: 1 
Defina a recuperação de dados quando N nós no cluster forem iniciados, o padrão é 1.

gateway.recover_after_time: 5m 
define o tempo limite do processo de recuperação de dados de inicialização, o padrão é 5 minutos.

gateway.expected_nodes: 2 
Defina o número de nós neste cluster.O padrão é 2. Assim que esses N nós forem iniciados, os dados serão restaurados imediatamente.

cluster.routing.allocation.node_initial_primaries_recoveries: 4 
O número de threads de recuperação simultâneos ao inicializar a recuperação de dados. O padrão é 4.

cluster.routing.allocation.node_concurrent_recoveries: 2 
Adicione o número de threads de recuperação simultâneos ao excluir nós ou balanceamento de carga, o padrão é 4.

indices.recovery.max_size_per_sec: 0 
Defina o limite de largura de banda durante a recuperação de dados, como 100 MB, o padrão é 0, o que significa sem limite.

indices.recovery.concurrent_streams: 5 
Defina este parâmetro para limitar o número máximo de streams simultâneos abertos ao recuperar dados de outros shards. O padrão é 5.

discovery.zen.minimum_master_nodes: 1 
Defina este parâmetro para garantir que os nós no cluster possam conhecer outros N nós qualificados como mestres. O padrão é 1, para grandes clusters, você pode definir um valor maior (2-4)

discovery.zen.ping.timeout: 3s 
define o tempo limite de conexão do ping quando outros nós são descobertos automaticamente no cluster. O padrão é 3 segundos. Para ambientes de rede ruins, um valor mais alto pode ser usado para evitar erros durante a descoberta automática.

discovery.zen.ping.multicast.enabled: false 
Defina se deseja abrir o nó de descoberta multicast, o padrão é verdadeiro.

discovery.zen.ping.unicast.hosts: ["host1", "host2: port", "host3 [portX-portY]"] 
define a lista inicial de nós mestres no cluster, e esses nós podem ser usados ​​para descobrir automaticamente clusters recém-adicionados nó.

A seguir estão algumas configurações de parâmetro de log lento para 
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 : 200ms
 

Seis, extensão --- instalação de plug-in

1. Análise do plugin de segmentação de palavras internacionalizada

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

2. Visualize os plug-ins instalados no navegador

http://192.168.11.133:9200/_cat/plugins

3. Veja outros plug-ins que podem ser instalados diretamente

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

 

 

 

Endereço de referência:

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

Operação básica ES

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

Acho que você gosta

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