ฉันต้องการรีสตาร์ทโหนด elasticsearch ด้วยการกำหนดค่าใหม่ วิธีที่ดีที่สุดในการปิดโหนดอย่างสง่างามคืออะไร?
การฆ่ากระบวนการนี้เป็นวิธีที่ดีที่สุดในการปิดเซิร์ฟเวอร์หรือมี URL วิเศษที่ฉันสามารถใช้เพื่อปิดโหนดได้หรือไม่
ฉันต้องการรีสตาร์ทโหนด elasticsearch ด้วยการกำหนดค่าใหม่ วิธีที่ดีที่สุดในการปิดโหนดอย่างสง่างามคืออะไร?
การฆ่ากระบวนการนี้เป็นวิธีที่ดีที่สุดในการปิดเซิร์ฟเวอร์หรือมี URL วิเศษที่ฉันสามารถใช้เพื่อปิดโหนดได้หรือไม่
คำตอบ:
คำตอบที่อัปเดต
_shutdown
API ถูกลบออกใน elasticsearch 2.x
บางตัวเลือก:
ในเทอร์มินัลของคุณ (โดยทั่วไปโหมด dev) เพียงพิมพ์ "Ctrl-C"
หากคุณเริ่มต้นเป็น daemon ( -d
) ให้ค้นหา PID และฆ่ากระบวนการ: SIGTERM
จะปิด Elasticsearch ลงอย่างหมดจด ( kill -15 PID
)
หากทำงานเป็นบริการให้เรียกใช้สิ่งต่อไปนี้service elasticsearch stop
:
คำตอบก่อนหน้า ตอนนี้เลิกใช้งานจาก 1.6 แล้ว
ใช่. ดูเอกสารการปิดโหนดคลัสเตอร์ของผู้ดูแลระบบ
โดยทั่วไป:
# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'
หากคุณต้องการใช้การกำหนดค่าใหม่คุณไม่จำเป็นต้องปิดตัวลง
$ sudo service elasticsearch restart
แต่ถ้าคุณต้องการปิดมันต่อไป:
$ sudo service elasticsearch stop
หรือ
$ sudo systemctl stop elasticsearch.service
$ sudo systemctl restart elasticsearch.service
นักเทียบท่า:
docker restart <elasticsearch-container-name or id>
สิ่งนี้ใช้ได้กับฉันบน OSX
pkill -f elasticsearch
การหยุดบริการและการฆ่า daemon เป็นวิธีที่ถูกต้องในการปิดโหนด อย่างไรก็ตามไม่แนะนำให้ทำโดยตรงหากคุณต้องการลบโหนดเพื่อการบำรุงรักษา ในความเป็นจริงหากคุณไม่มีแบบจำลองคุณจะสูญเสียข้อมูล
เมื่อคุณปิดโหนดโดยตรง Elasticsearch จะรอ 1m (เวลาเริ่มต้น) เพื่อให้กลับมาออนไลน์ หากไม่เป็นเช่นนั้นระบบจะเริ่มจัดสรรเศษจากโหนดนั้นไปยังโหนดอื่นโดยเสีย IO จำนวนมาก
วิธีการทั่วไปคือปิดการจัดสรรชาร์ดชั่วคราวโดยการออก:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
ตอนนี้เมื่อคุณลบโหนด ES จะไม่พยายามจัดสรรชาร์ดจากโหนดนั้นไปยังโหนดอื่นและคุณสามารถดำเนินกิจกรรมการบำรุงรักษาได้จากนั้นเมื่อโหนดขึ้นคุณสามารถเปิดใช้งานการจัดสรรชาร์ดได้อีกครั้ง:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
ที่มา: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html
หากคุณไม่มีแบบจำลองสำหรับดัชนีทั้งหมดของคุณการดำเนินกิจกรรมประเภทนี้จะทำให้ดัชนีบางตัวหยุดทำงาน วิธีที่สะอาดกว่าในกรณีนี้คือการย้ายเศษทั้งหมดไปยังโหนดอื่นก่อนที่จะลบโหนด:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
การดำเนินการนี้จะย้ายเศษทั้งหมดจาก10.0.0.1
ไปยังโหนดอื่น (จะใช้เวลาขึ้นอยู่กับข้อมูล) เมื่อทุกอย่างเสร็จสิ้นคุณสามารถฆ่าโหนดทำการบำรุงรักษาและนำกลับมาออนไลน์ได้ นี่เป็นการดำเนินการที่ช้าลงและไม่จำเป็นหากคุณมีแบบจำลอง
(แทนที่จะเป็น _ip, _id, _name ที่มีสัญลักษณ์แทนจะใช้ได้ดี)
ข้อมูลเพิ่มเติม: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html
คำตอบอื่น ๆ ได้อธิบายวิธีการฆ่ากระบวนการ
ปลั๊กอิน Head สำหรับ Elasticsearch มีฟรอนต์เอนด์บนเว็บที่ยอดเยี่ยมสำหรับการดูแลระบบ Elasticsearch รวมถึงการปิดโหนด สามารถรันคำสั่ง Elasticsearch ได้เช่นกัน
ใช้คำสั่งต่อไปนี้เพื่อทราบ pid ของโหนดที่รันอยู่แล้ว
curl -XGET ' http: // localhost: 9200 / _nodes / กระบวนการ '
ฉันใช้เวลาหนึ่งชั่วโมงในการหาวิธีฆ่าโหนดและในที่สุดก็สามารถทำได้หลังจากใช้คำสั่งนี้ในหน้าต่างเทอร์มินัล
หากคุณไม่พบว่ากระบวนการใดกำลังเรียกใช้ elasticsearch บนเครื่อง windows คุณสามารถลองรันในคอนโซล:
netstat -a -n -o
มองหาพอร์ต ElasticSearch 9200
กำลังทำงานเริ่มต้นคือ คอลัมน์สุดท้ายคือ PID สำหรับกระบวนการที่ใช้พอร์ตนั้น คุณสามารถปิดเครื่องได้ด้วยคำสั่งง่ายๆในคอนโซล
taskkill /PID here_goes_PID /F
ในกรณีที่คุณต้องการค้นหา PID ของอินสแตนซ์และฆ่ากระบวนการโดยสมมติว่าโหนดกำลังฟังพอร์ต 9300 (พอร์ตเริ่มต้น) คุณสามารถรันคำสั่งต่อไปนี้:
kill -9 $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)
คุณอาจต้องเล่นกับตัวเลขในรหัสดังกล่าวข้างต้นเช่น 58 และ 1
หากคุณกำลังใช้งานโหนดบน localhost ให้ลองใช้ brew service stop elasticsearch
ฉันเรียกใช้ elasticsearch บน iOS localhost
คำตอบสำหรับ Elasticsearch ภายใน Docker:
เพียงแค่หยุดคอนเทนเนอร์นักเทียบท่า ดูเหมือนว่าจะหยุดลงอย่างสง่างามเพราะบันทึก:
[INFO ][o.e.n.Node ] [elastic] stopping ...
ถือว่าคุณมี 3 โหนด
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
}
}
'
ทดสอบกับ Elasticseach 6.5
ที่มา: