Elasticsearch: Gagal terhubung ke port localhost 9200 - Sambungan ditolak

110

Ketika saya mencoba menghubungkan ke Elasticsearch menggunakan curl http://localhost:9200itu berfungsi dengan baik.

Tapi ketika saya menjalankannya, curl http://IpAddress:9200muncul kesalahan yang mengatakan

Gagal terhubung ke port localhost 9200: Sambungan ditolak

Bagaimana cara mengatasi kesalahan ini?

chinna2580
sumber
Jika Anda sudah mengatur network.host: localhost di file elasticsearch.yml maka Anda dapat mencoba menambahkan protokol http dalam permintaan:curl -X GET "http://localhost:9200"
Xxx Xxx
Setidaknya menggunakan Elasticsearch 7.8.0 di Windows 10, cukup hapus komentar network.host di file elasticsearch.yml berfungsi untuk saya.
DLyons

Jawaban:

81

Secara default, ini harus mengikat ke semua alamat lokal. Jadi, dengan asumsi Anda tidak memiliki masalah lapisan jaringan dengan firewall, satu-satunya pengaturan ES yang menurut saya perlu diperiksa adalah network.bind_hostdan memastikannya tidak disetel atau disetel ke 0.0.0.0atau ::0atau ke alamat IP yang benar untuk jaringan Anda.

Pembaruan: per komentar di ES 2.3 Anda harus mengatur network.hostsebagai gantinya.

Andrew White
sumber
11
Saya harus secara eksplisit mengatur network.bind_hostnilainya, membiarkannya tidak disetel adalah masalah saya.
joe
bagaimana cara mengatur network.bind_host secara eksplisit di windows?
Rizwan Patel
Apakah Anda yakin ini aman? Menurut saya yang benar adalah akses hanya dari server lokal.
Liko
Nah, dalam banyak kasus ini aman. Tapi ya, itulah mengapa klausul untuk "alamat IP yang benar untuk jaringan Anda" ada.
Andrew White
3
Seperti yang dinyatakan di bawah ini, "network.bind_host" sekarang menjadi "network.host" untuk
elasticsearch
78

Edit /etc/elasticsearch/elasticsearch.ymldan tambahkan baris berikut:

network.host: 0.0.0.0

Ini akan "menghapus" parameter ini dan akan mengizinkan koneksi dari IP lain.

Ramon
sumber
1
Ini berhasil untuk saya, terima kasih! Namun di Mac saya, file konfigurasi terletak di /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, dan parameter yang harus saya edit adalah network.host, bukan network.bind_host.
bjornte
8
di elasticsearch 2.2 parameter disebut network.host
Orr
file /etc/elasticsearch/elasticsearch.yml ini harus ada dalam container Docker?
Ashish Karpe
2
Ini memecahkan untuk saya, saya menggunakan elasticsearch-6.0.0 yang berjalan di dalam container docker. Setelah konfigurasi diubah, sekarang saya dapat mengakses dengan curl http://172.17.0.2:9200. Anda akan mengenali bahwa alamat ip buruh pelabuhan yang umum digunakan.
truthadjustr
1
network.host: 0.0.0.0 - tidak membantu, tetapi pengecualian ini saya dapatkan dari cerebro
Mindaugas K.
29

Mencoba semuanya di halaman ini, dan hanya instruksi dari sini yang membantu.

di /etc/default/elasticsearch, pastikan ini tidak dikomentari:

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

pastikan /var/lib/elasticsearchdimiliki oleh pengguna elasticsearch:

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
dikirill
sumber
1
Punya masalah yang sama dan solusinya adil chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/dan tidak dikomentariSTART_DAEMON=true
Estevex
1
bagi saya, solusi ini + sudo systemctl restart elasticsearchseperti yang dijawab oleh @kalanit, memecahkan masalah
Sabre
1
Ini adalah satu-satunya solusi yang membantu saya di Ubuntu 16.04.
Snehal
21

Dalam kasus saya, pencarian elastik dimulai. Tapi masih punya

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

Perintah berikut tidak berhasil

sudo service elasticsearch restart

Untuk membuatnya berhasil, saya harus lari

sudo systemctl restart elasticsearch

Kemudian semuanya baik-baik saja.

Kalanit
sumber
1
Masalah yang saya dapatkan persis sama dengan masalah Anda, dan solusi Anda berhasil untuk saya. Terima kasih banyak!
shaosh
6
Saya juga harus melakukannya sudo systemctl enable elasticsearch.
pemohon maksimal
Saya mendapat masalah yang sama, tetapi tidak mengerti mengapa systemctlbekerja dan layanan tidak?
Luv33preet
@ Luv33preet systemctl didukung oleh systemd dan merupakan program yang sama sekali berbeda
haff
Memulai kembali layanan berhasil bagi saya di Ubuntu 16.04 dan pencarian elastis 1.74
racl101
19

Mengapa Anda tidak memulai dengan baris perintah ini:

$ sudo service elasticsearch status

Saya melakukannya dan mendapatkan:

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

Kemudian saya mengedit /etc/elasticsearch/jvm.optionsfile:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Ini bekerja seperti pesona.

Dao Minh Duc
sumber
Tampaknya ini memberikan informasi yang sama dengan jawaban 22 Maret bu @ Jefferson.macedo. Jawaban baru seharusnya tidak hanya menulis ulang detail yang ada, tetapi juga memberikan informasi baru dan berguna.
AdrianHHH
17

Tidak ada solusi yang diusulkan di sini yang berhasil untuk saya, tetapi yang akhirnya berhasil adalah menambahkan yang berikut ini ke elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Setelah itu, saya memulai ulang layanan dan sekarang saya dapat curlmelakukannya dari dalam VM dan dari luar. Untuk beberapa alasan aneh, saya harus mencoba beberapa varian curlpanggilan yang berbeda di dalam VM sebelum berhasil:

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

Catatan: Saya menggunakan Elasticsearch 5.5 di Ubuntu 14.04

Pengembang Tidak Dikenal
sumber
1
Anda adalah penyelamat. Ini adalah satu-satunya hal yang berhasil bagi saya setelah membaca berbagai posting berbeda.
Yu Chen
1
ya, sangat membantu ini adalah satu-satunya hal yang berhasil untuk saya juga!
osehgol
Terima kasih, saya mencoba solusi Anda dan berhasil. Yang menurut saya aneh, karena saya hanya perlu menghapus komentar nomor port. Saya berpikir bahwa baris yang dikomentari seperti nilai default yang telah ditentukan
zwep
13
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

pastikan server dimulai. Saya telah melihat masalah ini ketika mesin virtual saya memiliki RAM yang terlalu kecil dan es tidak dapat dimulai.

sudo systemctl status elasticsearch

di atas akan menunjukkan kepada Anda jika es memang sedang berjalan.

Jes Chergui
sumber
4
Lihat stackoverflow.com/questions/29447434/… untuk bantuan dalam menyelesaikan masalah ini.
Ryan Miller
8

Untuk masalah ini, saya harus menggunakan: sudo /usr/share/elasticsearch/bin/elasticsearch start

untuk bisa mendapatkan sesuatu di port 9200/9300 (sudo netstat -ntlp) dan respons ke:

curl -XGET http://localhost:9200

DependencyHell
sumber
1
Terima kasih. Ini untuk ElasticSearch 1. ~ versi.
MontrealDevOne
memeriksa status, pesan kesalahan tidak membantu. hanya ketika menjalankan file bin secara manual itu memberikan pesan kesalahan yang benar.
sulaiman sudirman
6

Edit elasticsearch.ymldan tambahkan baris berikut

http.host: 0.0.0.0

network.host: 0.0.0.0 tidak berhasil

Mike
sumber
3

Buka Dockerfile bawah elasticsearch folder dan memperbarui "network.host = 0.0.0.0" dengan "network.host = 127.0.0.1" . Kemudian mulai ulang penampung. Periksa koneksi Anda dengan 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"
}
javasenior.dll
sumber
3

Saya memiliki masalah yang sama menolak koneksi pada port 9200. Periksa status layanan elasticsearch dengan perintah sudo service elasticsearch status. Jika itu menampilkan kesalahan dan Anda membaca apa pun yang berhubungan dengan Java, mungkin masalahnya adalah memori jvm Anda. Anda dapat mengeditnya di /etc/elasticsearch/jvm.options. Untuk mesin memori RAM 1GB di lingkungan Amazon, saya tetap menggunakan konfigurasi saya:

-Xms128m
-Xmx128m

Setelah mengatur itu dan memulai ulang layanan elasticsearch, itu berfungsi seperti pesona. Pemeriksaan Nmap dan UFW (jika Anda menggunakan firewall lokal) juga berguna.

jefferson.macedo
sumber
1
Inilah yang melakukannya untuk saya. Konfigurasi saya memiliki 1g untuk keduanya, dan instance AWS (t2.micro) tidak dapat mengalokasikan banyak memori untuk itu. Perintah start dan restart gagal secara diam-diam, tetapi perintah status merinci kesalahannya.
Greg Charles
2

Saya mengalami masalah serupa.

Inilah cara saya menyelesaikannya

Jalankan perintah layanan di bawah ini untuk memulai ElasticSearch

sudo service elasticsearch start

ATAU

sudo systemctl start elasticsearch

Jika Anda masih mendapatkan kesalahan

curl: (7) Gagal terhubung ke port localhost 9200: Koneksi ditolak

Jalankan perintah layanan di bawah ini untuk memeriksa status ElasticSearch

sudo service elasticsearch status

ATAU

sudo systemctl status elasticsearch

Jika Anda mendapatkan respon ( Aktif: aktif (berjalan) ) seperti di bawah ini maka Anda ElasticSearch aktif dan berjalan

● elasticsearch.service - Elasticsearch Dimuat: dimuat (/usr/lib/systemd/system/elasticsearch.service; dinonaktifkan; preset vendor: aktif) Aktif: aktif (berjalan) sejak Sabtu 2019-09-21 11:22:21 WAT; 3 detik lalu

Anda kemudian dapat menguji apakah node Elasticsearch Anda berjalan dengan mengirimkan permintaan HTTP ke port 9200 di localhost menggunakan perintah di bawah ini:

curl http://localhost:9200

Jika tidak, jika Anda mendapatkan respons dengan respons yang berbeda, Anda mungkin harus melakukan debug lebih lanjut untuk memperbaikinya, tetapi menjalankan perintah di bawah ini, akan membantu Anda mendeteksi peringatan apa yang menahan layanan ElasticSearch dari awal.

sudo service elasticsearch status

ATAU

sudo systemctl status elasticsearch

Jika Anda ingin menghentikan layanan ElasticSearch , cukup jalankan perintah layanan di bawah ini;

sudo service elasticsearch stop

ATAU

sudo systemctl stop elasticsearch

N / B: Anda mungkin harus menjalankan perintah sudo service elasticsearch status ATAU sudo systemctl status elasticsearch setiap kali menemukan kesalahan, untuk memberi tahu status layanan ElasticSearch .

Ini juga berlaku untuk Kibana , jalankan perintah sudo service kibana status ATAU sudo systemctl status kibana setiap kali Anda menemukan kesalahan, untuk memberi tahu status layanan Kibana .

Itu saja.

Saya harap ini membantu.

Janji Preston
sumber
1

Dalam hal ini, pertama-tama Anda perlu memeriksa versi java menggunakan perintah di bawah ini:

java -version

setelah menjalankan perintah ini Anda mendapatkan sesuatu seperti ini:

versi java "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, mode campuran)

lalu gunakan perintah ini:

update-alternatives --config java

dan pilih versi di bawah ini

* + 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/ Jawa

Enter untuk menyimpan pilihan saat ini [+], atau ketik nomor pilihan: 2

curl -XGET http://127.0.0.1:9200
saurabh cse
sumber
1

2 sen saya,

Saya baru saja mengikuti prosedur instal di Digital Ocean, ternyata paket yang tersedia di repo tidak up-to-date, saya menghapus semuanya dan mengikuti prosedur penginstalan langsung dari Elastic Search dan semuanya berfungsi sekarang, pada dasarnya perilaku di luar kotak aktif a localhost menunjuk ke 9200. Hal / masalah yang sama ditemukan dengan Kibana, solusi bagi saya juga, untuk menghapus semuanya dan hanya mengikuti prosedur mereka, Semoga ini menghemat dua jam (waktu yang saya habiskan untuk mencari tahu cara mengatur ELK!)

en

ximbal
sumber
1

Perbarui jdk Anda ke versi minimum terbaru untuk elasticsearch Anda.

Zhu Xiaohu
sumber
1

Ubah network.bind menjadi 0.0.0.0 dan http: port menjadi 9200. Alamat bind 0.0.0.0 berarti semua alamat IPv4 pada mesin lokal. Jika sebuah host memiliki dua alamat IP, 192.168.1.1 dan 10.1.2.1, dan server yang berjalan pada host mendengarkan 0.0.0.0, itu akan dapat dijangkau di kedua IP tersebut.

Siddu
sumber
1

Jika Anda mengalami kesalahan Sambungan ditolak , cukup jalankan perintah di bawah ini untuk memeriksa status layanan ElasticSearch

sudo service elasticsearch status

Ini akan membantu Anda menguraikan status layanan ElasticSearch dan apa yang harus dilakukan.

Jessica Fav
sumber
1

Tidak berguna untuk 7.5.0 dan yang lebih baru.

VishalJ
sumber
0

Setelah menggunakan beberapa jawaban di atas, jangan lupa bahwa setelah penginstalan apt, reboot total mungkin dilakukan.

Altus
sumber
0

Hanya untuk menambahkan ini, saya telah menemukan banyak dokumen melalui google yang mengatakan untuk mengatur network.host ke localhost.

Melakukan hal itu memberi saya koneksi terkenal yang ditolak. Anda harus menggunakan alamat IP (127.0.0.1), bukan FQDN.

Jeff

JFGratton
sumber
0

Pastikan bahwa port 9200terbuka untuk kasus saya, itu adalah contoh amazon jadi ketika saya membukanya di grup keamanan saya, perintah curl berfungsi.

Buhiire Keneth
sumber
0

Menonaktifkan SELinux berhasil untuk saya, meskipun saya tidak menyarankannya - saya melakukannya hanya untuk PoC

Adhitya Ganesan
sumber
0

Masalah saya adalah saya tidak dapat bekerja dengan localhostsaya perlu mengaturnya ke alamat IP localhost

network.bind_host: 127.0.0.1

Mahdi Younesi
sumber
0

Dalam kasus saya, masalahnya ada pada versi java, yang saya instal open-jdk 11sebelumnya. Itu menciptakan masalah saat memulai layanan. Saya mengubahnya open-jdk 8dan itu mulai bekerja

Satyaaditya
sumber