Làm thế nào để dừng / tắt một nút tìm kiếm đàn hồi?


85

Tôi muốn khởi động lại nút tìm kiếm đàn hồi với cấu hình mới. Cách tốt nhất để tắt một nút một cách duyên dáng là gì?

Việc giết quá trình có phải là cách tốt nhất để tắt máy chủ hay có một URL ma thuật nào đó mà tôi có thể sử dụng để tắt nút?

Câu trả lời:


126

Cập nhật câu trả lời.

_shutdown API đã bị xóa trongasticsearch 2.x.

Một số tùy chọn:

  • Trong thiết bị đầu cuối của bạn (về cơ bản là chế độ nhà phát triển), chỉ cần gõ "Ctrl-C"

  • Nếu bạn khởi động nó dưới dạng daemon ( -d), hãy tìm PID và kết thúc quá trình: SIGTERMsẽ tắt Elasticsearch sạch sẽ ( kill -15 PID)

  • Nếu chạy như một dịch vụ, hãy chạy một cái gì đó như service elasticsearch stop:

Câu trả lời trước. Nó hiện không được chấp nhận từ 1.6.

Vâng. Xem tài liệu tắt các nút cụm quản trị viên

Về cơ bản:

# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'

2
Vì vậy, có vẻ như API tắt máy không được chấp nhận kể từ phiên bản đàn hồi 1.6 (theo liên kết được cung cấp). Cách mới được đề xuất để tắt máy là gì?
Mike

2
Tôi nghĩ rằng nó không được dùng nữa vì bây giờ bạn có thể cài đặt nó như một dịch vụ và chạy dịch vụ dừng đàn hồi. Nếu bạn chạy nó chỉ để kiểm tra, hãy nhấn CTRL + C và bạn đã hoàn tất.
dadoonet

"Gracefull" => bạn có thể di chuyển phân đoạn của mình trước đó với API định tuyến lạiastic.co/guide/en/elasticsearch/reference/2.4/
Thomas Decaux

23

Nếu bạn chỉ muốn áp dụng cấu hình mới, bạn không cần phải tắt nó.

$ sudo service elasticsearch restart

Nhưng nếu bạn muốn tắt nó bằng cách nào:

$ sudo service elasticsearch stop

HOẶC LÀ

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

Docker:

docker restart <elasticsearch-container-name or id>


1
câu hỏi là về việc dừng dịch vụ, không khởi động lại nó.
Jean-François Fabre

1
doenst cần phải tắt máy chủ để áp dụng cấu hình mới. nó không phải là một câu trả lời, một giải pháp của mình cho vấn đề của mình :)
Ijaz Ahmad Khan


7

Dừng dịch vụ và giết daemon thực sự là những cách chính xác để tắt một nút. Tuy nhiên, bạn không nên làm như vậy trực tiếp nếu bạn muốn gỡ bỏ một nút để bảo trì. Trên thực tế, nếu bạn không có bản sao, bạn sẽ mất dữ liệu.

Khi bạn trực tiếp tắt một nút, Elasticsearch sẽ đợi 1 phút (thời gian mặc định) để nó trực tuyến trở lại. Nếu không, thì nó sẽ bắt đầu phân bổ các phân đoạn từ nút đó cho các nút khác, lãng phí rất nhiều IO.

Một cách tiếp cận điển hình là tạm thời vô hiệu hóa phân bổ phân đoạn bằng cách phát hành:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

Bây giờ, khi bạn gỡ xuống một nút, ES sẽ không cố gắng phân bổ phân đoạn từ nút đó cho các nút khác và bạn có thể thực hiện hoạt động bảo trì của mình và sau đó khi nút hoạt động, bạn có thể bật lại phân bổ phân đoạn:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}

Nguồn: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html

Nếu bạn không có bản sao cho tất cả các chỉ mục của mình, thì việc thực hiện loại hoạt động này sẽ có thời gian chết trên một số chỉ mục. Một cách rõ ràng hơn trong trường hợp này là di chuyển tất cả các phân đoạn sang các nút khác trước khi gỡ nút xuống:

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

Điều này sẽ di chuyển tất cả các phân đoạn từ 10.0.0.1các nút khác (sẽ mất thời gian tùy thuộc vào dữ liệu). Khi mọi thứ đã hoàn tất, bạn có thể giết nút, thực hiện bảo trì và đưa nó trở lại trực tuyến. Đây là một hoạt động chậm hơn và không bắt buộc nếu bạn có bản sao.

(Thay vì _ip, _id, _name bằng các ký tự đại diện sẽ hoạt động tốt.)

Thông tin thêm: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html

Các câu trả lời khác đã giải thích cách giết một quá trình.


4

Plugin Head cho Elasticsearch cung cấp giao diện người dùng dựa trên web tuyệt vời để quản trị Elasticsearch, bao gồm cả việc tắt các nút. Nó cũng có thể chạy bất kỳ lệnh Elasticsearch nào.



2

Nếu bạn không thể tìm thấy tiến trình nào đang chạy trên máy tính Windows, bạn có thể thử chạy trong bảng điều khiển:

netstat -a -n -o

Tìm kiếm cổng đàn hồi đang chạy, mặc định là 9200. Cột cuối cùng là PID cho quy trình đang sử dụng cổng đó. Bạn có thể tắt nó bằng lệnh đơn giản trong bảng điều khiển

taskkill /PID here_goes_PID /F

1

Chỉ trong trường hợp bạn muốn tìm PID của phiên bản và kết thúc quá trình, giả sử rằng nút đang nghe cổng 9300 (cổng mặc định), bạn có thể chạy lệnh sau:

kill -9  $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)

Bạn có thể phải chơi với các số trong mã đề cập ở trên, chẳng hạn như 58 và 1


Cổng mặc định là 9200.
slhck

0

Câu trả lời cho Elasticsearch bên trong Docker:

Chỉ cần dừng bộ chứa docker. Nó dường như dừng lại một cách duyên dáng vì nó ghi lại:

[INFO ][o.e.n.Node               ] [elastic] stopping ...

0

Xem xét bạn có 3 nút.

Chuẩn bị cụm của bạn

export ES_HOST=localhost:9200

# Disable shard allocation
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
'

# Stop non-essential indexing and perform a synced flush
curl -X POST "$ES_HOST/_flush/synced"

Dừng dịch vụ tìm kiếm đàn hồi trong mỗi nút

# check nodes
export ES_HOST=localhost:9200
curl -X GET "$ES_HOST/_cat/nodes"

# node 1
systemctl stop elasticsearch.service

# node 2
systemctl stop elasticsearch.service

# node 3
systemctl stop elasticsearch.service

Khởi động lại cụm một lần nữa

# start
systemctl start elasticsearch.service

# Reenable shard allocation once the node has joined the cluster
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'

Đã thử nghiệm trên Elasticseach 6.5

Nguồn:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html

0

Nếu bạn đang chạy một nút trên localhost, hãy thử sử dụng brew service stop elasticsearch

Tôi chạyasticsearch trên iOS localhost.

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.