Elasticsearch: ไม่สามารถเชื่อมต่อกับพอร์ต localhost 9200 - การเชื่อมต่อถูกปฏิเสธ


110

เมื่อฉันพยายามเชื่อมต่อกับ Elasticsearch โดยใช้ curl http://localhost:9200มันใช้งานได้ดี

แต่เมื่อฉันเรียกใช้curl http://IpAddress:9200มันก็เกิดข้อผิดพลาดขึ้นว่า

ไม่สามารถเชื่อมต่อกับพอร์ต localhost 9200: การเชื่อมต่อถูกปฏิเสธ

จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?


หากคุณตั้งค่าnetwork.host: localhostในไฟล์ elasticsearch.yml แล้วคุณสามารถลองเพิ่มโปรโตคอล http ในคำขอ:curl -X GET "http://localhost:9200"
Xxx Xxx

อย่างน้อยการใช้ Elasticsearch 7.8.0 บน Windows 10 เพียงแค่ยกเลิกการใส่ข้อคิดเห็น network.host ในไฟล์ elasticsearch.yml ก็ใช้ได้สำหรับฉัน
DLyons

คำตอบ:


82

โดยค่าเริ่มต้นควรเชื่อมโยงกับที่อยู่ในเครื่องทั้งหมด ดังนั้นสมมติว่าคุณไม่มีปัญหาเลเยอร์เครือข่ายกับไฟร์วอลล์การตั้งค่า ES เดียวที่ฉันคิดว่าจะตรวจสอบได้คือnetwork.bind_hostและตรวจสอบให้แน่ใจว่าไม่ได้ตั้งค่าหรือตั้งค่าเป็น0.0.0.0หรือ::0หรือที่อยู่ IP ที่ถูกต้องสำหรับเครือข่ายของคุณ

อัปเดต: ตามความคิดเห็นใน ES 2.3 คุณควรตั้งค่าnetwork.hostแทน


11
ฉันต้องตั้งค่าอย่างชัดเจนnetwork.bind_hostโดยปล่อยให้ไม่ตั้งค่าเป็นปัญหาของฉัน
joe

จะตั้งค่า network.bind_host อย่างชัดเจนใน windows ได้อย่างไร?
Rizwan Patel

แน่ใจหรือว่าปลอดภัย ฉันคิดว่าสิทธิ์คือการเข้าถึงจากเซิร์ฟเวอร์ภายในเท่านั้น
Liko

ในกรณีส่วนใหญ่จะปลอดภัย แต่ใช่นั่นเป็นเหตุผลว่าทำไมประโยค "ที่อยู่ IP ที่ถูกต้องสำหรับเครือข่ายของคุณ" จึงอยู่ที่นั่น
Andrew White

3
ตามที่ระบุไว้ด้านล่าง "network.bind_host" ตอนนี้เป็น "network.host" สำหรับ elasticsearch 2.3
bkunzi01

79

แก้ไข/etc/elasticsearch/elasticsearch.ymlและเพิ่มบรรทัดต่อไปนี้:

network.host: 0.0.0.0

การดำเนินการนี้จะ "ยกเลิกการตั้งค่า" พารามิเตอร์นี้และจะอนุญาตการเชื่อมต่อจาก IP อื่น ๆ


1
สิ่งนี้ได้ผลสำหรับฉันขอบคุณ! แต่ฉัน Mac, ไฟล์ config ตั้งอยู่ที่/Applications/elasticsearch-2.1.1/config/elasticsearch.ymlและพารามิเตอร์ที่ผมต้องแก้ไขก็ไม่ได้network.host network.bind_host
bjornte

8
ใน elasticsearch 2.2 พารามิเตอร์นี้เรียกว่า network.host
ออร์

ไฟล์ /etc/elasticsearch/elasticsearch.yml นี้ควรอยู่ใน Docker container?
Ashish Karpe

2
สิ่งนี้ช่วยแก้ปัญหาสำหรับฉันฉันใช้ elasticsearch-6.0.0 ที่ทำงานภายในคอนเทนเนอร์นักเทียบท่า curl http://172.17.0.2:9200หลังจากการเปลี่ยนแปลงการตั้งค่าตอนนี้ผมสามารถเข้าถึงได้โดย คุณจะรู้ว่านั่นคือที่อยู่ ip ของนักเทียบท่าที่ใช้กันทั่วไป
truthadjustr

1
network.host: 0.0.0.0 - ไม่ช่วย แต่ข้อยกเว้นนี้ฉันได้รับจาก cerebro
Mindaugas K.

29

พยายามทุกอย่างในหน้านี้และมีเพียงคำแนะนำจากที่นี่เท่านั้นที่ช่วยได้

ใน/etc/default/elasticsearchตรวจสอบให้แน่ใจว่าไม่มีการแสดงความคิดเห็น:

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

ตรวจสอบให้แน่ใจว่า/var/lib/elasticsearchเป็นของผู้ใช้ elasticsearch:

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

1
มีปัญหาเดียวกันและวิธีแก้ปัญหาก็เป็นchown -R elasticsearch:elasticsearch /var/lib/elasticsearch/ธรรมและยกเลิกการแสดงความคิดเห็นSTART_DAEMON=true
Estevex

1
สำหรับฉันวิธีแก้ปัญหานี้ + sudo systemctl restart elasticsearchตามคำตอบของ @kalanit แก้ไขปัญหา
Saber

1
นี่เป็นทางออกเดียวที่ช่วยฉันใน Ubuntu 16.04
Snehal

21

ในกรณีของฉันเริ่มต้นการค้นหายางยืด แต่ก็ยังมี

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

คำสั่งต่อไปนี้ไม่สำเร็จ

sudo service elasticsearch restart

เพื่อให้มันใช้งานได้ฉันต้องวิ่งแทน

sudo systemctl restart elasticsearch

จากนั้นก็ไปได้ดี


1
ปัญหาที่ฉันพบนั้นเหมือนกับของคุณทุกประการและวิธีแก้ปัญหาของคุณใช้ได้กับฉัน ขอบคุณมาก!
shaosh

6
sudo systemctl enable elasticsearchฉันยังมีการทำ
สูงสุด

ฉันพบปัญหาเดียวกัน แต่ไม่เข้าใจว่าเหตุใดจึงsystemctlทำงานและบริการไม่ได้?
Luv33preet

@ Luv33preet systemctl ขับเคลื่อนโดย systemd และเป็นโปรแกรมที่แตกต่างอย่างสิ้นเชิง
haff

การเริ่มบริการใหม่สำหรับฉันบน Ubuntu 16.04 และการค้นหาแบบยืดหยุ่น 1.74
racl101

19

ทำไมคุณไม่เริ่มต้นด้วยบรรทัดคำสั่งนี้:

$ sudo service elasticsearch status

ฉันทำและได้รับ:

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

จากนั้นฉันแก้ไข/etc/elasticsearch/jvm.optionsไฟล์:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

สิ่งนี้ได้ผลเหมือนมีเสน่ห์


สิ่งนี้ดูเหมือนจะให้ข้อมูลเช่นเดียวกับคำตอบวันที่ 22 มีนาคม bu @ Jefferson.macedo คำตอบใหม่ไม่ควรเพียงแค่เขียนรายละเอียดที่มีอยู่ซ้ำ แต่ควรให้ข้อมูลใหม่และเป็นประโยชน์
AdrianHHH

17

ไม่มีวิธีแก้ปัญหาที่เสนอที่นี่ที่ใช้ได้ผลสำหรับฉัน แต่ในที่สุดสิ่งที่ทำให้มันใช้งานได้คือการเพิ่มสิ่งต่อไปนี้ elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

หลังจากนั้นฉันก็เริ่มบริการใหม่และตอนนี้ฉันสามารถทำได้curlจากทั้งใน VM และภายนอก ด้วยเหตุผลแปลก ๆ ฉันต้องลองใช้การcurlโทรที่แตกต่างกันสองสามแบบภายใน VM ก่อนที่จะทำงาน:

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

หมายเหตุ: ฉันใช้ Elasticsearch 5.5 บน Ubuntu 14.04


1
คุณเป็นผู้ช่วยชีวิต นี่เป็นสิ่งเดียวที่ได้ผลสำหรับฉันหลังจากอ่านโพสต์ต่างๆมากมาย
Yu Chen

1
ใช่มีประโยชน์มากนี่เป็นสิ่งเดียวที่ได้ผลสำหรับฉันด้วย!
osehgol

ขอบคุณฉันลองใช้วิธีแก้ปัญหาของคุณแล้วและได้ผล ซึ่งฉันพบว่าแปลกเพราะฉันต้องยกเลิกการใส่หมายเลขพอร์ต ฉันคิดว่าบรรทัดที่แสดงความคิดเห็นเป็นเหมือนค่าเริ่มต้นที่กำหนดไว้ล่วงหน้า
zwep

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

ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์เริ่มทำงาน ฉันพบปัญหานี้เมื่อเครื่องเสมือนของฉันมี RAM สว่างเกินไปและไม่สามารถเริ่มทำงานได้

sudo systemctl status elasticsearch

ข้างต้นจะแสดงให้คุณเห็นว่า es กำลังทำงานอยู่หรือไม่


4
ตรวจสอบstackoverflow.com/questions/29447434/…สำหรับความช่วยเหลือในการจัดเรียงปัญหานี้
Ryan Miller

8

สำหรับปัญหานี้ฉันต้องใช้: sudo /usr/share/elasticsearch/bin/elasticsearch start

เพื่อให้สามารถรับบางสิ่งบนพอร์ต 9200/9300 (sudo netstat -ntlp) และการตอบสนองต่อ:

curl -XGET http://localhost:9200


1
ขอบคุณ. สำหรับ ElasticSearch 1. ~ เวอร์ชัน
MontrealDevOne

ตรวจสอบสถานะข้อความแสดงข้อผิดพลาดไม่ได้ช่วย เฉพาะเมื่อเรียกใช้ไฟล์ bin ด้วยตนเองมันจะให้ข้อความแสดงข้อผิดพลาดที่ถูกต้อง
sulaiman sudirman


3

เปิดของคุณDockerfileภายใต้ElasticSearchโฟลเดอร์และอัปเดต"network.host = 0.0.0.0"กับ"network.host = 127.0.0.1" จากนั้นรีสตาร์ทคอนเทนเนอร์ ตรวจสอบการเชื่อมต่อของคุณด้วย 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

ฉันมีปัญหาเดียวกันกับการปฏิเสธการเชื่อมต่อบนพอร์ต 9200 ตรวจสอบสถานะการบริการ ElasticSearch sudo service elasticsearch statusกับคำสั่ง หากมีข้อผิดพลาดและคุณอ่านสิ่งที่เกี่ยวข้องกับ Java ปัญหาอาจเกิดจากหน่วยความจำ jvm ของคุณ คุณสามารถแก้ไขได้ในรูปแบบ/etc/elasticsearch/jvm.options. สำหรับเครื่องหน่วยความจำ RAM 1GB ในสภาพแวดล้อมของ Amazon ฉันยังคงกำหนดค่าไว้ที่:

-Xms128m
-Xmx128m

หลังจากตั้งค่านั้นและเริ่มบริการ elasticsearch ใหม่มันใช้งานได้ดี การตรวจสอบ Nmap และ UFW (หากคุณใช้ไฟร์วอลล์ในเครื่อง) ก็น่าจะมีประโยชน์เช่นกัน


1
นี่คือสิ่งที่ทำเพื่อฉัน การกำหนดค่าของฉันมี 1g สำหรับทั้งสองอย่างและอินสแตนซ์ AWS (t2.micro) ไม่สามารถจัดสรรหน่วยความจำให้กับมันได้ คำสั่งเริ่มต้นและรีสตาร์ทล้มเหลวโดยไม่มีการโต้ตอบ แต่คำสั่งสถานะให้รายละเอียดข้อผิดพลาด
Greg Charles

2

ฉันประสบปัญหาที่คล้ายกัน

นี่คือวิธีที่ฉันแก้ไข

เรียกใช้คำสั่งบริการด้านล่างเพื่อเริ่มElasticSearch

sudo service elasticsearch start

หรือ

sudo systemctl start elasticsearch

หากคุณยังคงได้รับข้อผิดพลาด

curl: (7) ล้มเหลวในการเชื่อมต่อกับพอร์ต localhost 9200: การเชื่อมต่อถูกปฏิเสธ

เรียกใช้คำสั่งบริการด้านล่างเพื่อตรวจสอบสถานะของElasticSearch

sudo service elasticsearch status

หรือ

sudo systemctl status elasticsearch

หากคุณได้รับการตอบกลับ ( Active: active (running) ) เช่นด้านล่างแสดงว่าElasticSearchทำงานอยู่

● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enable) Active: active (running)ตั้งแต่วันเสาร์ที่ 2019-09-21 11:22:21 WAT; 3 วินาทีที่แล้ว

จากนั้นคุณสามารถทดสอบว่าโหนดElasticsearchของคุณกำลังทำงานอยู่โดยส่งคำขอ HTTP ไปยังพอร์ต 9200 บน localhost โดยใช้คำสั่งด้านล่าง:

curl http://localhost:9200

มิฉะนั้นหากคุณได้รับการตอบกลับการตอบสนองที่แตกต่างกันคุณอาจต้องดีบักเพิ่มเติมเพื่อแก้ไข แต่การเรียกใช้คำสั่งด้านล่างนี้จะช่วยให้คุณตรวจพบข้อแม้ที่ถือบริการElasticSearchตั้งแต่เริ่มต้น

sudo service elasticsearch status

หรือ

sudo systemctl status elasticsearch

หากคุณต้องการหยุดบริการElasticSearchเพียงเรียกใช้คำสั่งบริการด้านล่าง

sudo service elasticsearch stop

หรือ

sudo systemctl stop elasticsearch

N / B:คุณอาจต้องเรียกใช้คำสั่งsudo service elasticsearch status หรือ sudo systemctl status elasticsearchทุกครั้งที่คุณพบข้อผิดพลาดเพื่อบอกสถานะของบริการElasticSearch

นอกจากนี้ยังใช้กับKibanaให้รันคำสั่งsudo service kibana status หรือ sudo systemctl status kibanaทุกครั้งที่คุณพบข้อผิดพลาดเพื่อบอกสถานะของบริการKibana

นั่นคือทั้งหมด

ฉันหวังว่านี่จะช่วยได้.


1

ในกรณีนี้ก่อนอื่นคุณต้องตรวจสอบเวอร์ชัน java โดยใช้คำสั่งด้านล่าง:

java -version

หลังจากรันคำสั่งนี้คุณจะได้รับสิ่งนี้:

เวอร์ชัน 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, mixed mode)

จากนั้นใช้คำสั่งนี้:

update-alternatives --config java

และเลือกเวอร์ชันด้านล่าง

* + 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 เพื่อคงการเลือกปัจจุบันไว้ [+] หรือพิมพ์หมายเลขตัวเลือก: 2

curl -XGET http://127.0.0.1:9200

1

2 เซ็นต์ของฉัน

ฉันเพิ่งทำตามขั้นตอนการติดตั้งบน Digital Ocean เห็นได้ชัดว่าแพคเกจที่มีอยู่ใน repos นั้นไม่ทันสมัยฉันลบทุกอย่างและทำตามขั้นตอนการติดตั้งโดยตรงจาก Elastic Search และทุกอย่างทำงานได้ในขณะนี้โดยพื้นฐานแล้วพฤติกรรมนอกกรอบเปิดอยู่ localhost ชี้ไปที่ 9200 สิ่งเดียวกัน / ปัญหาที่พบใน Kibana วิธีแก้ปัญหาสำหรับฉันก็เช่นกันที่จะลบทุกอย่างและทำตามขั้นตอนหวังว่าจะช่วยคนได้สองชั่วโมง (เวลาที่ฉันใช้ในการหาวิธีตั้งค่า ELK!)

en


1

อัปเดต jdk ของคุณเป็นเวอร์ชันต่ำสุดล่าสุดสำหรับการค้นหายางยืดของคุณ


1

เปลี่ยน network.bind เป็น 0.0.0.0 และ http: port เป็น 9200 ที่อยู่การโยง 0.0.0.0 หมายถึงที่อยู่ IPv4 ทั้งหมดบนเครื่องโลคัล หากโฮสต์มีที่อยู่ IP สองรายการคือ 192.168.1.1 และ 10.1.2.1 และเซิร์ฟเวอร์ที่ทำงานบนโฮสต์รับฟังข้อมูลใน 0.0.0.0 จะสามารถเข้าถึงได้จาก IP ทั้งสองนั้น


1

หากคุณพบข้อผิดพลาดปฏิเสธการเชื่อมต่อเพียงเรียกใช้คำสั่งด้านล่างเพื่อตรวจสอบสถานะของบริการ ElasticSearch

sudo service elasticsearch status

วิธีนี้จะช่วยให้คุณสามารถถอดรหัสสถานะของบริการ ElasticSearch และสิ่งที่ต้องทำ



0

หลังจากใช้คำตอบข้างต้นแล้วอย่าลืมว่าหลังจากติดตั้ง apt แล้วการรีบูตทั้งหมดอาจเป็นไปตามลำดับ


0

เพื่อเพิ่มสิ่งนี้ฉันเจอเอกสารมากมายผ่าน Google ที่บอกว่าให้ตั้งค่า network.host เป็น localhost

การทำเช่นนั้นทำให้ฉันปฏิเสธการเชื่อมต่อที่น่าอับอาย คุณต้องใช้ที่อยู่ IP (127.0.0.1) ไม่ใช่ FQDN

เจฟฟ์


0

ตรวจสอบให้แน่ใจว่าพอร์ต9200เปิดอยู่สำหรับกรณีของฉันมันเป็นอินสแตนซ์ของ amazon ดังนั้นเมื่อฉันเปิดในกลุ่มความปลอดภัยคำสั่ง curl ก็ทำงาน


0

การปิดใช้งาน SELinux ได้ผลสำหรับฉันแม้ว่าฉันจะไม่แนะนำก็ตาม - ฉันทำเช่นนั้นเพื่อ PoC



0

ในกรณีของฉันปัญหาเกิดจากเวอร์ชัน java ฉันติดตั้งไว้open-jdk 11ก่อนหน้านี้ นั่นคือการสร้างปัญหาในขณะที่เริ่มบริการ ฉันเปลี่ยนมันopen-jdk 8และมันก็เริ่มทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.