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