Elasticsearch: Falha ao conectar à porta 9200 do host local - Conexão recusada


110

Quando tentei me conectar ao Elasticsearch usando o, curl http://localhost:9200ele estava funcionando bem.

Mas quando eu executo o curl http://IpAddress:9200ele está gerando um erro dizendo

Falha ao conectar à porta 9200 do host local: conexão recusada

Como resolver esse erro?


Se você já configurou network.host: localhost no arquivo elasticsearch.yml, você pode tentar adicionar o protocolo http na solicitação:curl -X GET "http://localhost:9200"
Xxx Xxx

Pelo menos usando Elasticsearch 7.8.0 no Windows 10, apenas descomentar network.host no arquivo elasticsearch.yml funciona para mim.
DLyons

Respostas:


81

Por padrão, ele deve se vincular a todos os endereços locais. Portanto, supondo que você não tenha um problema de camada de rede com firewalls, a única configuração ES que posso pensar em verificar é network.bind_hoste certificar-me de que não está definido ou está definido como 0.0.0.0ou ::0ou com o endereço IP correto para sua rede.

Atualização: por comentários em ES 2.3 você deve definir em seu network.hostlugar.


11
Tive que definir o network.bind_hostvalor explicitamente , deixando- o sem definir era o meu problema.
joe

como definir explicitamente o network.bind_host no windows?
Rizwan Patel

Tem certeza de que é seguro? Acho que o certo é acessar apenas do servidor local.
Liko de

Bem, na maioria dos casos, isso é seguro. Mas sim, é por isso que a cláusula para "endereço IP correto para sua rede" está lá.
Andrew White

3
Conforme declarado abaixo, "network.bind_host" agora é "network.host" para
elasticsearch

78

Edite /etc/elasticsearch/elasticsearch.ymle adicione a seguinte linha:

network.host: 0.0.0.0

Isso irá "desabilitar" este parâmetro e permitirá conexões de outros IPs.


1
Isso funcionou para mim, obrigado! No entanto, no meu Mac, o arquivo de configuração está localizado em /Applications/elasticsearch-2.1.1/config/elasticsearch.ymle o parâmetro que tive de editar network.hostnão está network.bind_host.
bjornte

8
no elasticsearch 2.2, o parâmetro é denominado network.host
Orr

este arquivo /etc/elasticsearch/elasticsearch.yml deve estar no contêiner do Docker?
Ashish Karpe

2
Isso resolve para mim, estou usando elasticsearch-6.0.0 executado dentro do contêiner do docker. Após a alteração da configuração, agora posso acessar por curl http://172.17.0.2:9200. Você reconhecerá que é o endereçamento IP do docker comumente usado.
truthadjustr

1
network.host: 0.0.0.0 - não ajuda, mas esta exceção estou recebendo de cerebro
Mindaugas K.

29

Tentei tudo nesta página, e apenas as instruções daqui ajudaram.

em /etc/default/elasticsearch, certifique-se de que não foram comentados:

START_DAEMON=true
ES_USER=elasticsearch
ES_GROUP=elasticsearch
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
RESTART_ON_UPGRADE=true

certifique-se de que /var/lib/elasticsearché propriedade do usuário elasticsearch:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

1
Tive o mesmo problema e a solução foi justa chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/e não comentou oSTART_DAEMON=true
Estevex

1
para mim, esta solução + sudo systemctl restart elasticsearchrespondida por @kalanit, resolveu o problema
Saber

1
Esta é a única solução que me ajudou no Ubuntu 16.04.
Snehal

21

No meu caso, elasticsearch foi iniciado. Mas ainda tinha

curl: (7) Failed to connect to localhost port 9200: Connection refused

O seguinte comando não foi bem sucedido

sudo service elasticsearch restart

Para fazer funcionar, tive que correr em vez

sudo systemctl restart elasticsearch

Então correu tudo bem.


1
O problema que recebi é exatamente o mesmo com o seu, e sua solução funciona para mim. Muito obrigado!
shaosh

6
Eu também tive que fazer sudo systemctl enable elasticsearch.
pleaner máximo de

Eu tenho o mesmo problema, mas não conseguia entender por que systemctlfunciona e o serviço não?
Luv33preet

@ Luv33preet systemctl é movido por systemd e é um programa totalmente diferente
dia

Reiniciar o serviço funcionou para mim no Ubuntu 16.04 e no elastic search 1.74
racl101

19

Por que você não começa com esta linha de comando:

$ sudo service elasticsearch status

Eu fiz e consegui:

"There is insufficient memory for the Java Runtime..."

Então editei o /etc/elasticsearch/jvm.optionsarquivo:

...

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

################################################################

...

Isso funcionou como um encanto.


Isso parece fornecer as mesmas informações da resposta de 22 de março bu @ Jefferson.macedo. Uma nova resposta não deve apenas reescrever os detalhes existentes, mas também fornecer informações novas e úteis.
AdrianHHH

17

Nenhuma das soluções propostas aqui funcionou para mim, mas o que finalmente funcionou foi adicionar o seguinte a elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Depois disso, reiniciei o serviço e agora posso curlfazê-lo tanto dentro da VM quanto externamente. Por algum motivo estranho, tive que tentar algumas variantes diferentes de uma curlchamada dentro da VM antes que funcionasse:

curl localhost:9200
curl http://localhost:9200
curl 127.0.0.1:9200

Observação: estou usando Elasticsearch 5.5 no Ubuntu 14.04


1
Você é um salva-vidas. Esta é a única coisa que funcionou para mim depois de ler uma variedade de postagens diferentes.
Yu Chen

1
Sim, muito útil, esta é a única coisa que funcionou para mim também!
osehgol

Obrigado, tentei sua solução e funcionou. O que achei estranho, porque só tive que descomentar o número da porta. Eu pensei que as linhas comentadas eram como valores padrão predefinidos
zwep

13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

certifique-se de que o servidor seja iniciado. Já vi esse problema quando minha máquina virtual tinha pouca RAM e não conseguia iniciar.

sudo systemctl status elasticsearch

o exemplo acima irá mostrar se o ES está realmente em execução.


4
Verifique stackoverflow.com/questions/29447434/… para obter ajuda para resolver este problema.
Ryan Miller

8

Para este problema, tive que usar: sudo /usr/share/elasticsearch/bin/elasticsearch start

para conseguir algo nas portas 9200/9300 (sudo netstat -ntlp) e uma resposta para:

curl -XGET http://localhost:9200


1
Obrigado. Isso é para versões do ElasticSearch 1. ~.
MontrealDevOne

verificando o status, a mensagem de erro não ajuda. somente ao executar o arquivo bin manualmente está dando a mensagem de erro correta.
sulaiman sudirman

6

Edite elasticsearch.ymle adicione a seguinte linha

http.host: 0.0.0.0

network.host: 0.0.0.0 não funcionou para


3

Abra seu Dockerfile sob ElasticSearch pasta e atualização "network.host = 0.0.0.0" com "network.host = 127.0.0.1" . Em seguida, reinicie o contêiner. Verifique sua conexão com o curl.

$ curl http://docker-machine-ip:9200
{
  "name" : "vI6Zq_D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhyB_Wa4QwSX6zZd1F894Q",
  "version" : {
    "number" : "5.2.0",
    "build_hash" : "24e05b9",
    "build_date" : "2017-01-24T19:52:35.800Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.0"
  },
  "tagline" : "You Know, for Search"
}

3

Eu tive o mesmo problema ao recusar conexões na porta 9200. Verifique o status do serviço elasticsearch com o comando sudo service elasticsearch status. Se estiver apresentando um erro e você ler algo relacionado a Java, provavelmente o problema é sua memória jvm. Você pode editá-lo em /etc/elasticsearch/jvm.options. Para uma máquina de 1 GB de memória RAM no ambiente Amazon, mantive minha configuração em:

-Xms128m
-Xmx128m

Depois de definir isso e reiniciar o serviço elasticsearch, funcionou perfeitamente. A verificação de Nmap e UFW (se você usa firewall local) também deve ser útil.


1
Isso é o que fez isso por mim. Minha configuração tinha 1g para ambos, e a instância AWS (t2.micro) não conseguiu alocar tanta memória para ela. Os comandos start e restart falharam silenciosamente, mas o comando status detalhou o erro.
Greg Charles

2

Eu tive um problema semelhante.

Veja como eu resolvi

Execute o comando de serviço abaixo para iniciar ElasticSearch

sudo service elasticsearch start

OU

sudo systemctl start elasticsearch

Se você ainda receber o erro

curl: (7) Falha ao conectar à porta localhost 9200: Conexão recusada

Execute o comando de serviço abaixo para verificar o status do ElasticSearch

sudo service elasticsearch status

OU

sudo systemctl status elasticsearch

Se você obtiver uma resposta ( ativa: ativa (em execução) ) como a seguinte, então seu ElasticSearch está ativo e em execução

● elasticsearch.service - Elasticsearch Carregado: carregado (/usr/lib/systemd/system/elasticsearch.service; desativado; predefinição do fornecedor: ativado) Ativo: ativo (em execução) desde Sáb 2019-09-21 11:22:21 WAT; 3s atrás

Você pode então testar se o nó Elasticsearch está em execução, enviando uma solicitação HTTP para a porta 9200 no localhost usando o comando abaixo:

curl http://localhost:9200

Caso contrário, se você obtiver uma resposta diferente, pode ser necessário depurar mais para corrigi-lo, mas a execução do comando a seguir o ajudará a detectar quais advertências estão impedindo o serviço ElasticSearch de iniciar.

sudo service elasticsearch status

OU

sudo systemctl status elasticsearch

Se você deseja interromper o serviço ElasticSearch , basta executar o comando de serviço abaixo;

sudo service elasticsearch stop

OU

sudo systemctl stop elasticsearch

N / B: Você pode ter que executar o comando sudo service elasticsearch status OU sudo systemctl status elasticsearch cada vez que encontrar o erro, a fim de informar o estado do serviço ElasticSearch .

Isso também se aplica ao Kibana , execute o comando sudo service kibana status OR sudo systemctl status kibana cada vez que encontrar o erro, para informar o estado do serviço Kibana .

Isso é tudo.

Eu espero que isso ajude.


1

Neste caso, primeiro você precisa verificar a versão java usando o comando abaixo:

java -version

depois de executar este comando, você obtém algo assim:

Java versão "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (build 24.51-b03, modo misto)

então use este comando:

update-alternatives --config java

e selecione a versão abaixo

* + 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java 2 /usr/java/jdk1.8.0_73/jre/bin/ Java

Enter para manter a seleção atual [+] ou digite o número da seleção: 2

curl -XGET http://127.0.0.1:9200

1

Meus 2 centavos,

Acabei de seguir o procedimento de instalação no Digital Ocean, aparentemente o pacote disponível nos repos não está atualizado, apaguei tudo e segui o procedimento de instalação direto do Elastic Search e tudo está funcionando agora, basicamente o comportamento pronto para uso está ativado um localhost apontando para 9200. Mesma coisa / problema encontrado com Kibana, a solução para mim também foi remover tudo e apenas seguir o procedimento, espero que isso economize duas horas para alguém (o tempo que eu gastei tentando descobrir como configurar o ELK!)

en


1

Atualize seu jdk para a versão mínima mais recente para sua busca elástica.


1

Altere network.bind para 0.0.0.0 e http: port para 9200. O endereço de bind 0.0.0.0 significa todos os endereços IPv4 na máquina local. Se um host tiver dois endereços IP, 192.168.1.1 e 10.1.2.1, e um servidor em execução no host ouvir 0.0.0.0, ele poderá ser acessado em ambos os IPs.


1

Se você encontrar o erro de conexão recusada , basta executar o comando abaixo para verificar o status do serviço ElasticSearch

sudo service elasticsearch status

Isso o ajudará a decifrar o estado do serviço ElasticSearch e o que fazer a respeito.



0

Depois de utilizar algumas das respostas acima, não se esqueça de que, após a instalação do apt, uma reinicialização total pode ser necessária.


0

Só para acrescentar, eu encontrei muitos documentos através do google que diziam para definir network.host como localhost.

Fazer isso me deu a conexão infame recusada. Você deve usar um endereço IP (127.0.0.1), não um FQDN.

Jeff


0

Certifique-se de que a porta 9200está aberta para o meu caso, era uma instância do Amazon, então quando eu abri no meu grupo de segurança o comando curl funcionou.


0

Desativar o SELinux funcionou para mim, embora eu não sugira isso - fiz isso apenas para um PoC


0

Meu problema era que eu não conseguia trabalhar com o qual localhostprecisava configurá-lo para o endereço IP do host local

network.bind_host: 127.0.0.1


0

No meu caso, o problema é com a versão java, instalei open-jdk 11anteriormente. Isso está criando o problema ao iniciar o serviço. Eu mudei open-jdk 8e começou a funcionar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.