type
status
date
slug
summary
tags
category
icon
password
Elasticsearch
Cluster 重啟升級
當升級前後的版本不兼容時,必須停止整個 cluster 才能進行升級
- 準備升級
- 檢查更新內容,尤其是 Deprecation logging(棄用日誌) 和 Migration guide(重大修改) ,並將代碼和配置進行相應的更改。
- 確保使用中的插件有相容 Elasticsearch 新版本的版本
- 備份
- 禁用 shard 分配
由於關閉節點會將該節點的 shard 複製到 cluster 中的其他節點,可能涉及大量的 IO,因為稍後就要重啟的不需要此 IO,透過關閉 shard 分配節省時間。
- 停止 indexing 並且 synced flush
執行 synced-flush 可以加快 shard 恢復速度
- [可選] 暫時停止機器學習和數據源關聯任務
關閉機器學習節點時,其作業會移動到另一個節點並還原模型,雖然可以在升級期間繼續使用,但會增加 cluster 負擔,可以透過以下方式暫時停止。
- 關閉所有節點
- 升級節點,安裝新的 rpm
- 升級插件
使用
elasticsearch-plugin
腳本為每個已安裝的插件進行升級。- 啟動所有節點
- 等待 cluster 狀態為 yellow
當 cluster 狀態為 yellow 表示所有 primary shard 都已恢復,但未分配 replica shard。
不過這是正常的,因為我們已經禁用了 shard 分配。
- 重新啟用 shard 分配,並等待 cluster 狀態變為
green
- 重新啟動機器學習
滾動升級
Elasticsearch 支援滾動升級,對 Cluster 可以逐一升級每個節點,因此可以在升級期間不停服務
- 準備升級
- 檢查更新內容,尤其是 Deprecation logging(棄用日誌) 和 Migration guide(重大修改) ,並將代碼和配置進行相應的更改。
- 確保使用中的插件有相容 Elasticsearch 新版本的版本
- 備份
- 禁用 shard 分配
由於關閉節點會將該節點的 shard 複製到 cluster 中的其他節點,可能涉及大量的 IO,因為稍後就要重啟的不需要此 IO,透過關閉 shard 分配節省時間。
- [可選] 停止非必要的 indexing 並且 synced flush
雖然滾動升級期間允許 indexing,但減少 indexing 可以加速 shard recovery。
- [可選] 暫時停止機器學習和數據源關聯任務
關閉機器學習節點時,其作業會移動到另一個節點並還原模型,雖然可以在升級期間繼續使用,但會增加 cluster 負擔,可以透過以下方式暫時停止。
- 關閉單個節點
- 升級節點,安裝新的 rpm
- 升級插件
使用
elasticsearch-plugin
腳本為每個已安裝的插件進行升級。- 啟動升級後的節點並加入 cluster
- 加入集群後重新啟用 shard 分配
- 在升級下一個節點之前,先等待 cluster 完成 shard 分配
透過以下指令確認進度,直到 status 中的值為
green
則表示已分配完成在滾動升級期間,分配給新版本節點的 primary shard 不能將其 repica shard 分配給就版本節點,因此若集群中只有一個以升級的節點,則 shard 無法分配狀態會是 yellow,在此況下可以繼續升級下一個節點。
- 重複步驟 1~9
可以使用以下指令檢查哪些節點已升級
- 重新啟動機器學習任務
Kibana
Kibana 不支援滾動升級,而且如果針對 Elasticsearch index 運行不同的版本的 Kibana 可能導致數據損壞與丟失,因此升級之前應該停止所有的 Kibana 實例。
- 停止所有的 Kibana 實例
- 更新 rpm 檔案,並且避免覆蓋設定檔
- 確認移除或更新設定檔中設置是否依照新版本 Kibana 更新
- 透過 kibana-plugin 腳本重新安裝 plugin
- 開啟 Kibana
Kibana 版本升級後,啟動 Kibana 之後會遷移保存在 Elasticsearch 內的資料,確保資料和新版本兼容
- .kibana_{kibana_version}_001
Logstash
- 關閉 Logstash
- 更新 rpm 檔案
- 測試設定檔,根據結果調整設定檔
- 開啟 Logstash