如何正確的關閉Elasticsearch集群


如何正確的關閉Elasticsearch集群

背景

接觸Elasticsearch(5.x)也快半年時間了,一直也沒弄明白如何的關閉ES集群。經常在測試和生產環境遇到這樣的問題“重啟ES后數據怎么沒了?”,“啟動ES后,怎么一直有大量的數據在遷移?”

問題原因

其本質原因有兩點:

  • ES中的數據不是實時寫入磁盤的。數據進入ES后先進入data buffer和log buffer,然后進入操作系統文件系統緩存的數據段,最后再特定時機下才刷入磁盤。即在內存中有很多數據是沒寫入磁盤的。
  • ES的分片自動分配遷移機制。當集群發現經過一分鍾后(index.unassigned.node_left.delayed_timeout參數設置)還連接不上某個節點,就會把集群內的數據重新進行分布,即使后來節點重新連接上,原來的數據因為重新分布也無效了。

ES內存數據模型

如何正確的關閉ES集群

  • 第一步,禁止分片自動分布
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
  • 第二步,執行同步刷新
POST _flush/synced
  • 第三步,各節點逐個關閉
# 通過服務關閉
# sudo systemctl stop elasticsearch.service
# 發送TERM信號關閉進程
kill $(cat pid.txt)

如何啟動ES集群

  • 第一步,執行完操作后逐個啟動節點,先master節點再其他節點
cd $ES_HOME/bin
./elasticsearch -d -p $ES_HOME/pid.txt
  • 第二步,等待所有節點加入集群
    查看集群狀態是否為"yellow"或者"green"
GET _cat/health

GET _cat/nodes
  • 第三步,啟用分片自動分布("yellow"或者"green"后)
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
  • 第四步,等待集群可用
    通過集群的狀態和恢復進程監控集群是否可用
GET _cat/health

GET _cat/recovery


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM