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?
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:
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: SIGTERM
sẽ 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'
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>
Điều này phù hợp với tôi trên OSX.
pkill -f elasticsearch
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.1
cá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.
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.
sử dụng lệnh sau để biết pid của nút đã chạy.
curl -XGET ' http: // localhost: 9200 / _nodes / process '
Tôi đã mất một giờ để tìm ra cách giết nút và cuối cùng có thể thực hiện sau khi sử dụng lệnh này trong cửa sổ đầu cuối.
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
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
Xem xét bạn có 3 nút.
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"
# 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
# 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:
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.