簡體   English   中英

如何將正在運行的 Elasticsearch 舊實例升級到新版本?

[英]How to upgrade a running Elasticsearch older instance to a newer version?

基本上,我找不到解釋將正在運行的 Elasticsearch 實例升級到當前版本的過程的文檔或資源。

請在以下幾種情況下幫助我:

  1. 如果我在單台服務器上運行 Elasticsearch 實例,如何升級實例而不丟失數據?

  2. 如果我在多個服務器中運行多個 Elasticsearch 實例,我如何在升級 Elasticsearch 實例的同時保持操作運行而不會丟失數據?

如果對此有適當的程序或解釋,將對我的理解和工作有很大幫助。 謝謝!

  1. 所有節點數據都存儲在elasticsearch數據目錄中。 在 elasticsearch 主頁中默認為 data/cluster_name/nodes。 所以,一般來說,只要保留數據目錄,並且新版本中的配置文件與舊版本兼容,新實例應該與舊實例具有相同的數據。 請注意,某些版本具有發行說明中概述的特殊附加要求。 例如,從 0.18 升級到 0.19 需要發出集群中所有索引的完全刷新。

  2. 真的沒有什么好方法可以做到這一點。 節點使用不向后兼容的二進制協議進行通信。 因此,如果新版本中的協議發生變化,新舊節點將無法相互理解。 有時可以在同一集群中混合具有不同次要版本的節點並進行滾動升級。 但是,據我所知,即使在次要版本中也沒有明確保證節點之間的兼容性,而主要版本總是需要完全重啟集群。 如果在整個集群重新啟動期間停機不是一種選擇, DrTech 的一項不錯的技術可能是一種解決方案。

如今,關於 ElasticSearch 升級的信息比過去多得多。

以下是我升級 ElasticSearch 時的常用步驟:

  1. 備份數據:快照和還原

  2. 升級指南: 升級 ElasticSearch

主要思想是您一次關閉 ES 集群的一個實例,升級該實例節點上的 ES 版本,然后再次啟動它,以便它可以重新加入集群。

簡而言之,以下是重要步驟:

  1. 禁用分片重新分配

    curl -XPUT localhost:9200/_cluster/settings -d '{“transient”:{“cluster.routing.allocation.enable”:“none”}}'

  2. 關閉實例:

    curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

  3. 在主機上安裝新的 ElasticSearch 版本並啟動它。

  4. 啟用分片重新分配:

    curl -XPUT localhost:9200/_cluster/settings -d '{“transient”:{“cluster.routing.allocation.enable”:“all”}}'

  5. 觀察集群從yellow狀態變為green

curl -X GET http://localhost:9200/_cat/health?v // 監控集群整體狀態

curl -X GET http://localhost:9200/_cat/nodes?v // 驗證新節點加入集群

curl -X GET http://localhost:9200/_cat/shards?v // 查看分片正在啟動、初始化和重新定位

  1. 對下一個節點重復。

在排序方面,首先更新主節點,然后是數據節點,然后是負載均衡/客戶端節點。

值得一提的是,現在有關於進行此升級的文檔,但它在搜索結果中的排名並不高:

升級 Elasticsearch

以及一個重大變更文件:

重大變化

其他答案根據現在存在的情況有些過時,因此這些新信息將補充升級較新版本的 Elasticsearch,例如將 6.x 升級到 7.x,或將 5.x 升級到 6.x。 Elasticsearch 升級有兩個主要選項: 滾動升級完整集群重啟

滾動升級允許一次升級一個節點,因此服務不會中斷。 另一方面,完整的集群重啟需要關閉、升級每個節點,然后重新啟動。 這意味着必須考慮升級之間的停機時間。

與幾年前唯一可行的選擇是快照和恢復相比,這要容易得多。

這里有兩篇關於這個問題的文章,我非常喜歡!

基本上采取的辦法是開始一個新的群集(你想要的最新ElasticSearch版本),不斷改變你的代碼同步你的數據,使其指數在這兩個(新老)集群新/更新的實體並啟動完全重新索引上到您的新集群。

此時,您應該有兩個關於您的數據的完美同步的集群。 這允許您開始將讀取功能插入到新集群中,看看它是如何進行的,可能會修復發出 ES 請求的代碼(在您當前的 ES 版本和您想要使用的新版本之間),輕松回滾到如果需要,舊集群。

一旦一切順利,您就可以開始插入您的寫入/更新功能……並最終在幾周或幾個月后關閉舊集群。

它非常靈活,但一切都取決於您面臨的用例/時間表。 主要可能的問題是:舊集群的映射是否與新集群完全兼容?

希望能幫助到你! 我祝福你有個美好的一天 :)

如果您運行的是基於 Ubuntu 或 Debian 的 Linux,這里有一個 Ansible 腳本來進行滾動升級,只要您不在主要版本之間進行升級。

次要版本,例如 1.3 -> 1.4.3 都可以

0.8 -> 1.4.3 等主要版本將無法運行。

https://github.com/ekhoinc/ansible-examples/blob/master/elasticsearch-rolling-upgrade.yml

它可以很容易地修改為與基於 RHEL 的 linux 一起使用(只需更改 2 行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM