Elasticsearch: Không kết nối được với cổng máy chủ cục bộ 9200 - Kết nối bị từ chối


110

Khi tôi cố gắng kết nối với Elasticsearch bằng cách sử dụng curl http://localhost:9200nó hoạt động tốt.

Nhưng khi tôi chạy curl http://IpAddress:9200nó sẽ báo lỗi

Không kết nối được với cổng máy chủ cục bộ 9200: Kết nối bị từ chối

Làm thế nào để giải quyết lỗi này?


Nếu bạn đã thiết lập network.host: localhost trong file elasticsearch.yml sau đó bạn có thể cố gắng thêm các giao thức http trong yêu cầu:curl -X GET "http://localhost:9200"
Xxx Xxx

Ít nhất là sử dụng Elasticsearch 7.8.0 trên Windows 10, chỉ cần bỏ ghi chú network.host trong tệp đàn hồi là phù hợp với tôi.
DLyons

Câu trả lời:


81

Theo mặc định, nó sẽ liên kết với tất cả các địa chỉ cục bộ. Vì vậy, giả sử bạn không gặp sự cố lớp mạng với tường lửa, cài đặt ES duy nhất mà tôi có thể nghĩ để kiểm tra network.bind_hostvà đảm bảo rằng nó chưa được đặt hoặc được đặt thành 0.0.0.0hoặc ::0hoặc thành địa chỉ IP chính xác cho mạng của bạn.

Cập nhật: mỗi nhận xét trong ES 2.3, bạn nên đặt network.hostthay thế.


11
Tôi phải đặt network.bind_hostgiá trị một cách rõ ràng , việc không đặt nó là vấn đề của tôi.
joe

làm cách nào để đặt network.bind_host một cách rõ ràng trong windows?
Rizwan Patel

Bạn có chắc điều này là an toàn? Tôi nghĩ rằng quyền chỉ được truy cập từ máy chủ cục bộ.
Liko

Trong hầu hết các trường hợp, điều này là an toàn. Nhưng đúng vậy, đó là lý do tại sao có mệnh đề "địa chỉ IP chính xác cho mạng của bạn".
Andrew White,

3
Như đã trình bày bên dưới "network.bind_host" bây giờ là "network.host" cho elasticsearch 2.3
bkunzi01

78

Chỉnh sửa /etc/elasticsearch/elasticsearch.ymlvà thêm dòng sau:

network.host: 0.0.0.0

Thao tác này sẽ "bỏ đặt" tham số này và sẽ cho phép các kết nối từ các IP khác.


1
Điều này làm việc cho tôi, cảm ơn! Tuy nhiên, trên máy Mac của tôi, tệp cấu hình được đặt tại /Applications/elasticsearch-2.1.1/config/elasticsearch.yml, và thông số tôi phải chỉnh sửa network.hostthì không network.bind_host.
bjornte

8
trongasticsearch 2.2, tham số được gọi là network.host
Hoặc

tệp /etc/elasticsearch/elasticsearch.yml này phải nằm trong vùng chứa Docker?
Ashish Karpe

2
Điều này giải quyết cho tôi, tôi đang sử dụngasticsearch-6.0.0 chạy bên trong bộ chứa docker. Sau khi thay đổi cấu hình, bây giờ tôi có thể truy cập bằng curl http://172.17.0.2:9200. Bạn sẽ nhận ra đó là địa chỉ ip của docker thường được sử dụng.
truthadjustr

1
network.host: 0.0.0.0 - không giúp được gì, nhưng ngoại lệ này tôi nhận được từ cerebro
Mindaugas K.

29

Đã thử mọi thứ trên trang này và chỉ có hướng dẫn từ đây mới có ích .

trong /etc/default/elasticsearch, hãy đảm bảo những điều này là chưa được nhận xét:

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

đảm bảo /var/lib/elasticsearchthuộc sở hữu của người dùngasticsearch:

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

1
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/START_DAEMON=true
Gặp

1
đối với tôi, giải pháp này + sudo systemctl restart elasticsearchnhư được trả lời bởi @kalanit, đã giải quyết được vấn đề
Sabre

1
Đây là giải pháp duy nhất đã giúp tôi trên Ubuntu 16.04.
Snehal

21

Trong trường hợp của tôi, tìm kiếm đàn hồi đã được bắt đầu. Nhưng vẫn có

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

Lệnh sau không thành công

sudo service elasticsearch restart

Để làm cho nó hoạt động, tôi đã phải chạy

sudo systemctl restart elasticsearch

Sau đó, mọi chuyện đã ổn.


1
Vấn đề tôi gặp phải hoàn toàn giống với vấn đề của bạn và giải pháp của bạn phù hợp với tôi. Cảm ơn rất nhiều!
shaosh,

6
Tôi cũng phải làm sudo systemctl enable elasticsearch.
max pleaner

Tôi gặp vấn đề tương tự, nhưng không thể hiểu tại sao systemctlhoạt động và dịch vụ không?
Luv33preet

@ Luv33preet systemctl được cung cấp bởi systemd và là một chương trình hoàn toàn khác nhau
Haff

Khởi động lại dịch vụ đã hoạt động đối với tôi trên Ubuntu 16.04 và tìm kiếm đàn hồi 1.74
racl101

19

Tại sao bạn không bắt đầu với dòng lệnh này:

$ sudo service elasticsearch status

Tôi đã làm điều đó và nhận được:

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

Sau đó, tôi đã chỉnh sửa /etc/elasticsearch/jvm.optionstệp:

...

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

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

#-Xms2g
#-Xms2g

-Xms512m
-Xmx512m

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

...

Điều này làm việc như một sự quyến rũ.


Điều này dường như cung cấp thông tin tương tự như câu trả lời ngày 22 tháng 3 bu @ Jefferson.macedo. Một câu trả lời mới không nên chỉ viết lại các chi tiết hiện có, nó phải cung cấp thông tin mới và sử dụng.
AdrianHHH

17

Không có giải pháp nào được đề xuất ở đây phù hợp với tôi, nhưng điều cuối cùng khiến nó hoạt động là thêm phần sau vào elasticsearch.yml

network:
  host: 0.0.0.0
http:
  port: 9200

Sau đó, tôi khởi động lại dịch vụ và bây giờ tôi có thể thực hiện curlnó từ cả bên trong máy ảo và bên ngoài. Vì một số lý do kỳ lạ, tôi phải thử một vài biến thể khác nhau của curllệnh gọi bên trong máy ảo trước khi nó hoạt động:

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

Lưu ý: Tôi đang sử dụng Elasticsearch 5.5 trên Ubuntu 14.04


1
Bạn là một cứu cánh. Đây là điều duy nhất hiệu quả với tôi sau khi đọc qua nhiều bài viết khác nhau.
Yu Chen

1
vâng, rất hữu ích, đây là điều duy nhất hiệu quả với tôi!
osehgol

Cảm ơn, tôi đã thử giải pháp của bạn và nó đã hoạt động. Điều mà tôi thấy lạ, bởi vì tôi vừa phải bỏ ghi chú số cổng. Tôi nghĩ rằng các dòng chú giống như giá trị mặc định được xác định trước
zwep

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

đảm bảo rằng máy chủ được khởi động. Tôi đã gặp sự cố này khi máy ảo của tôi có quá ít RAM và không thể khởi động.

sudo systemctl status elasticsearch

ở trên sẽ cho bạn thấy nếu es thực sự đang chạy.


4
Hãy xem stackoverflow.com/questions/29447434/… để được trợ giúp phân loại vấn đề này.
Ryan Miller

8

Đối với vấn đề này, tôi đã phải sử dụng: sudo /usr/share/elasticsearch/bin/elasticsearch start

để có thể nhận được thứ gì đó trên các cổng 9200/9300 (sudo netstat -ntlp) và phản hồi cho:

curl -XGET http://localhost:9200


1
Cảm ơn. Đây là phiên bản ElasticSearch 1. ~.
MontrealDevOne

kiểm tra trạng thái, thông báo lỗi không giúp được gì. chỉ khi chạy tệp bin theo cách thủ công, nó mới đưa ra thông báo lỗi chính xác.
sulaiman sudirman

6

Chỉnh sửa elasticsearch.ymlvà thêm dòng sau

http.host: 0.0.0.0

network.host: 0.0.0.0 không làm việc cho


3

Mở của bạn Dockerfile dưới elasticsearch thư mục và cập nhật "network.host = 0.0.0.0" với "network.host = 127.0.0.1" . Sau đó khởi động lại vùng chứa. Kiểm tra kết nối của bạn với 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

Tôi đã gặp vấn đề tương tự khi từ chối kết nối trên cổng 9200. Kiểm tra trạng thái dịch vụ tìm kiếm bằng lệnh sudo service elasticsearch status. Nếu nó xuất hiện lỗi và bạn đọc bất kỳ thứ gì liên quan đến Java, có thể vấn đề là bộ nhớ jvm của bạn. Bạn có thể chỉnh sửa nó trong /etc/elasticsearch/jvm.options. Đối với máy có bộ nhớ RAM 1GB trên môi trường Amazon, tôi đã giữ nguyên cấu hình của mình:

-Xms128m
-Xmx128m

Sau khi thiết lập điều đó và khởi động lại dịch vụ tìm kiếm đàn hồi, nó hoạt động như một sự quyến rũ. Kiểm tra Nmap và UFW (nếu bạn sử dụng tường lửa cục bộ) cũng sẽ hữu ích.


1
Đây là những gì đã làm nó cho tôi. Cấu hình của tôi có 1g cho cả hai và phiên bản AWS (t2.micro) không thể cấp phát nhiều bộ nhớ như vậy cho nó. Các lệnh bắt đầu và khởi động lại âm thầm không thành công, nhưng lệnh trạng thái đã nêu chi tiết lỗi.
Greg Charles

2

Tôi đã gặp một vấn đề tương tự.

Đây là cách tôi đã giải quyết nó

Chạy lệnh dịch vụ bên dưới để bắt đầu ElasticSearch

sudo service elasticsearch start

HOẶC LÀ

sudo systemctl start elasticsearch

Nếu bạn vẫn gặp lỗi

curl: (7) Không kết nối được với cổng máy chủ cục bộ 9200: Kết nối bị từ chối

Chạy lệnh dịch vụ bên dưới để kiểm tra trạng thái của ElasticSearch

sudo service elasticsearch status

HOẶC LÀ

sudo systemctl status elasticsearch

Nếu bạn nhận được phản hồi ( Active: hoạt động (đang chạy) ) như phản hồi bên dưới thì bạn ElasticSearch đang hoạt động và đang chạy

●asticsearch.service - Elasticsearch đã tải: đã tải (/usr/lib/systemd/system/elasticsearch.service; bị vô hiệu hóa; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: hoạt động (đang chạy) kể từ Thứ Bảy 2019-09-21 11:22:21 WAT; 3 giây trước

Sau đó, bạn có thể kiểm tra xem nút Elasticsearch của mình có đang chạy hay không bằng cách gửi một yêu cầu HTTP đến cổng 9200 trên localhost bằng lệnh bên dưới:

curl http://localhost:9200

Ngoài ra, nếu bạn nhận được một phản hồi là một phản hồi khác, bạn có thể phải gỡ lỗi thêm để sửa nó, nhưng chạy lệnh bên dưới, sẽ giúp bạn phát hiện những cảnh báo nào đang giữ dịch vụ ElasticSearch từ khi bắt đầu.

sudo service elasticsearch status

HOẶC LÀ

sudo systemctl status elasticsearch

Nếu bạn muốn dừng dịch vụ ElasticSearch , chỉ cần chạy lệnh dịch vụ bên dưới;

sudo service elasticsearch stop

HOẶC LÀ

sudo systemctl stop elasticsearch

N / B: Bạn có thể phải chạy lệnh sudo service elasticsearch status OR sudo systemctl status elasticsearch mỗi khi gặp lỗi, để cho biết trạng thái của dịch vụ ElasticSearch .

Điều này cũng áp dụng cho Kibana , chạy lệnh sudo service kibana status HOẶC sudo systemctl status kibana mỗi khi bạn gặp lỗi, để cho biết trạng thái của dịch vụ Kibana .

Đó là tất cả.

Tôi hi vọng cái này giúp được.


1

Trong trường hợp này, trước hết bạn cần kiểm tra phiên bản java bằng lệnh dưới đây:

java -version

sau khi chạy lệnh này, bạn nhận được một cái gì đó như thế này:

phiên bản java "1.7.0_51" Môi trường thời gian chạy OpenJDK (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (bản dựng 24.51-b03, chế độ hỗn hợp)

sau đó sử dụng lệnh này:

update-alternatives --config java

và chọn phiên bản bên dưới

* + 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 để giữ lựa chọn hiện tại [+] hoặc nhập số lựa chọn: 2

curl -XGET http://127.0.0.1:9200

1

2 xu của tôi,

Tôi vừa làm theo quy trình cài đặt trên Digital Ocean, có vẻ như gói có sẵn trong kho lưu trữ không được cập nhật, tôi đã xóa mọi thứ và làm theo quy trình cài đặt trực tiếp từ Elastic Search và mọi thứ hiện đang hoạt động, về cơ bản hành vi out of the box được bật một localhost trỏ đến 9200. Cùng một điều / vấn đề được tìm thấy với Kibana, giải pháp cho tôi cũng vậy, xóa mọi thứ và chỉ làm theo quy trình của họ, Hy vọng điều này sẽ tiết kiệm cho ai đó hai giờ (thời gian tôi đã dành để tìm ra cách thiết lập ELK!)

en


1

Cập nhật jdk của bạn lên phiên bản tối thiểu mới nhất cho tìm kiếm đàn hồi của bạn.


1

Thay đổi network.bind thành 0.0.0.0 và http: port thành 9200. Địa chỉ liên kết 0.0.0.0 có nghĩa là tất cả các địa chỉ IPv4 trên máy cục bộ. Nếu máy chủ lưu trữ có hai địa chỉ IP, 192.168.1.1 và 10.1.2.1 và một máy chủ chạy trên máy chủ lưu trữ lắng nghe trên 0.0.0.0, nó sẽ có thể truy cập được ở cả hai IP đó.


1

Nếu bạn gặp lỗi Kết nối bị từ chối , chỉ cần chạy lệnh bên dưới để kiểm tra trạng thái của dịch vụ ElasticSearch

sudo service elasticsearch status

Điều này sẽ giúp bạn giải mã trạng thái của dịch vụ ElasticSearch và những việc cần làm với nó.



0

Sau khi sử dụng một số câu trả lời ở trên, đừng quên rằng sau khi cài đặt apt, có thể phải khởi động lại toàn bộ.


0

Chỉ để thêm về điều này, tôi đã xem qua nhiều tài liệu thông qua google cho biết đặt network.host thành localhost.

Làm như vậy cho tôi kết nối khét tiếng từ chối. Bạn phải sử dụng địa chỉ IP (127.0.0.1), không phải FQDN.

Jeff


0

Đảm bảo rằng cổng đó 9200được mở cho trường hợp của tôi, đó là một phiên bản amazon để khi tôi mở nó trong nhóm bảo mật của mình, lệnh curl đã hoạt động.


0

Việc vô hiệu hóa SELinux có hiệu quả với tôi, mặc dù tôi không đề xuất - tôi đã làm điều đó chỉ cho một PoC


0

Vấn đề của tôi là tôi không thể làm việc với localhosttôi, tôi cần đặt nó thành địa chỉ IP của localhost

network.bind_host: 127.0.0.1


0

Trong trường hợp của tôi, vấn đề là với phiên bản java, tôi đã cài đặt open-jdk 11trước đó. Đó là tạo ra sự cố trong khi bắt đầu dịch vụ. Tôi đã thay đổi nó open-jdk 8và nó bắt đầu hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.