輪撥

2019年12月11日 星期三

滾動式升級Rolling Upgrades Elasticsearch



使用了 Elasticsearch 一段時間,因為跑的順順的也就一直沒有理它或更新它,不過最近發現新版本的 SIEM 功能還滿非常吸引我的,於是上官網看了一下更新的方法,而官方網站上說滾動式升級 Elasticsearch 僅支援:
  • 次要版本之間
  • 從 5.6 升到 6.8 
  • 從 6.8 升到 7.5.0

目前我的 Elasticsearch Cluster 主機分別為:
  • master-01
  • master-02 
  • node-01 

版本均為 6.2.1


也就是說不能直接升級到 7.5.0 版,不過 Chris 很有實驗精神(其實想偷懶),於是就直接從 Elasticsearch 6.2.1 直接升到 7.5.0,最後的結果當然是以失敗收場,還好 Chris 在升級前都有做備份的習慣,所以失敗了之後在還原之前的狀態就好,之後只好乖乖照著官方文件做,一定要從 6.2.1 升到 6.8.0,再從 6.8.0 升到 7.5.0 就沒問題了,所以建議大家在升級前一定要做好備份喔。另外因為我的主要 master-01 效能比較好,為了在升級後也可以讓他繼續當主要的 master 我的升級順序為 node-1->master-01->master-02。

Cluster OS 版本為 CentOS,升級方式使用 rpm 步驟如下:

1.下載更新檔


下載 Elasticsearch 6.8.0

將檔案下載到 /tmp/ 資料夾中

# cd /tmp/

# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.rpm



下載 Elasticsearch 7.5.0

# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.0-x86_64.rpm


2.停用 shard 分配

# curl -X PUT -H "Content-Type: application/json" -d '{"persistent": {"cluster.routing.allocation.enable": "primaries"}}' "http://localhost:9200/_cluster/settings"


3.停止不必要的索引並執行同步刷新(選用)

# curl -X POST -H "Content-Type: application/json" -d '{}' "http://localhost:9200/_flush/synced"

4.停止機器學習作業和資料傳送相關的任務(選用)

# curl -X POST -H "Content-Type: application/json" -d '{}' "http://localhost:9200/_ml/set_upgrade_mode?enabled=true"

5.停止 Elasticsearch 服務

# sudo systemctl stop elasticsearch.service

這時候從 head 中應該可以看到 node-01 不見了變成 Unassigned

6.更新 Elasticsearch

# rpm -Uvh elasticsearch-6.8.0.rpm

確認是否為更新版本

# rpm -qa | grep elasticsearch


7.執行systemctl daemon-reload

# systemctl daemon-reload


如果沒有執行上面那行就直接啟用 Elasticsearch 服務會出現錯誤下面的錯誤


Warning: elasticsearch.service changed on disk. Run 'systemctl daemon-reload' to reload units.


8.啟用 Elasticsearch 服務

# sudo systemctl start elasticsearch.service

9.重新啟用 shard 分配

# curl -X PUT -H "Content-Type: application/json" -d '{"persistent": {"cluster.routing.allocation.enable": null}}' "http://localhost:9200/_cluster/settings"



這時候從 head 中應該可以看到 node-01 回來了

10.重新啟動機器學習作業(選用)

# curl -X POST -H "Content-Type: application/json" -d '{}' "http://localhost:9200/_ml/set_upgrade_mode?enabled=false"


之後每個節點在重複 2~10 步就大功告成了



最後因為跳了一個大版本,一定要檢查每個節點跟運作是否正常喔。

沒有留言:

張貼留言

網頁