Elasticsearch一般可使用Rolling升級進行升級,所以升級不會中斷服務。 哪些版本支持滾動升級:html
Elasticsearch能夠讀取在前一個主要版本中建立的索引。若是在5中建立了索引。在升級到7.1.1以前,您必須從新索引或刪除它們。若是存在不兼容的索引,則Elasticsearch節點將沒法啓動。即便它們是由6.x集羣建立的,5.x或更早索引的快照也沒法還原到7.x羣集。 有關升級舊索引的信息,請參閱從新索引升級。node
升級到新版本的Elasticsearch時,須要升級Elastic Stack中的每一個產品。 有關更多信息,請參閱「Elastic Stack安裝和升級指南」。shell
從6.7或者更早的版本直接升級到7.1.1,你必須關閉集羣,安裝7.1.1,而且重啓。有關更多信息,請參閱徹底羣集從新啓動升級。json
升級Elasticsearch以前:api
滾動升級容許Elasticsearch集羣一次升級一個節點,所以升級不會中斷服務。 不支持在升級期間在同一羣集中運行多個版本的Elasticsearch,由於沒法將分片已升級的節點複製到運行舊版本的節點。安全
滾動升級支持:網絡
從6.7或更早版本直接升級到7.1.1須要從新啓動完整羣集。app
要執行從6.8到7.1.1的滾動升級:curl
禁用分片分配機器學習
當你關閉一個節點,在開始將該節點上的分片複製到集羣中的其餘節點以前,分配進程會等待index.unassigned.node_left.delayed_timeout
(默認狀況下爲1分鐘),這可能涉及大量I / O。因爲節點很快將從新啓動,所以無需執行此I/O操做,您能夠經過在關閉節點以前禁用副本分配:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
複製代碼
中止不必的索引而且執行同步刷新。 (可選的)
在升級過程當中能夠繼續索引,若是中止不必的索引而且執行同步刷新,那麼分片會恢復的快的多。
curl -X POST "localhost:9200/_flush/synced"
複製代碼
當你執行同步刷新,檢查響應確保結果是成功的。因爲掛起索引操做而失敗的同步刷新操做被列在響應主體中,儘管請求自己仍然返回200 OK狀態。若是出現故障,從新發出請求。
暫時中止與活動機器學習做業和datafeeds相關的任務。(可選)
若是你在6.x以前建立了機器學習索引,你必須從新索引。
若是你在6.x中版本中建立了機器學習索引,你能夠:
讓您的機器學習任務在升級期間運行。當您關閉一個機器學習節點時,它的做業將自動轉移到另外一個節點並恢復模型狀態。此選項容許任務在升級期間繼續運行,但會增長集羣的負載。
暫時中止與計算機學習做業和datafeeds相關的任務,並使用設置的升級模式API禁止打開新任務:
curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=true"
複製代碼
當你禁用了升級模式,使用自動保存的最後一個模型狀態恢復做業。此選項避免了在升級期間管理活動做業的開銷,而且比顯式地中止datafeed和關閉做業要快。
中止全部的做業和datafeeds。此選項在關閉時保存模型狀態。 在升級後從新打開做業時,它們使用徹底相同的模型。 可是,保存最新模型狀態比使用升級模式須要更長時間,尤爲是當您有大量工做或具備大型模型狀態的做業時。
關閉一個節點
若是你使用systemd
運行Elasticsearch能夠這樣來關閉:
sudo systemctl stop elasticsearch.service
複製代碼
若是你使用SysV init
運行Elasticsearch能夠這樣來關閉:
sudo -i service elasticsearch stop
複製代碼
若是你使用守護進程運行Elasticsearch能夠這樣來關閉:
kill $(cat pid)
複製代碼
升級已關閉的節點
使用Depain或者RPM包升級:
rpm
或者dbpg
安裝一個新的包,全部文件都安裝在操做系統的適當位置,而且不會覆蓋Elasticsearch配置文件。使用zip文件或者tar文件升級:
解壓到一個目錄,若是您不使用外部配置和數據目錄,這是很是關鍵的。
設置ES_PATH_CONF
環境變量以指定外部config
目錄和jvm.options
文件的位置。若是不使用外部config
目錄,請將舊配置複製到新安裝目錄。
在config/elasticsearch.yml
中設置path.data
。指向外部data
目錄。若是不使用外部data
目錄,請將舊data
目錄複製到新安裝。
若是使用監視特性,則在升級Elasticsearch時重用數據目錄。monitor使用存儲在
data
目錄中的持久UUID標識唯一的Elasticsearch節點。
設置config/elasticsearch.yml
中的path.logs
。指向要存儲logs
的位置。若是不指定此設置,日誌將存儲在解壓存檔到的目錄中。
當您解壓縮zip或tar包時,
elasticsearch-n.n.n
目錄包含Elasticsearchconfg,logs,data
和plugin
目錄。咱們建議將這些目錄移出Elasticsearch目錄,以便在升級Elasticsearch時不會刪除它們。 要指定新位置,請使用
ES_PATH_CONF
環境變量以及path.data
和path.logs
設置。 有關更多信息,請參閱重要的Elasticsearch配置。Debian和RPM軟件包將這些目錄放在每一個操做系統的適當位置。 在生產中,咱們建議使用deb或rpm軟件包進行安裝。
升級插件
使用elasticsearch-plugin腳本安裝每一個已安裝插件的升級版本。 升級節點時,必須升級全部插件。
若是使用Elasticsearch安全功能來定義域,請驗證您的域設置是不是最新的。 域設置的格式在7.0版中已更改,特別是域類型的位置已更改。 請參閱域設置。
開始升級你的節點
啓動新升級的節點,經過檢查日誌文件或提交_cat / nodes
請求來確認它是否加入羣集:
curl -X GET "localhost:9200/_cat/nodes"
複製代碼
啓用分片分配
節點加入羣集後,刪除cluster.routing.allocation.enable
設置以啓用分片分配並開始使用節點:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
'
複製代碼
等待節點恢復
請等待集羣分片分配完成,再升級下一個節點,你能夠經過_cat/health
請求來檢查進度:
curl -X GET "localhost:9200/_cat/health?v"
複製代碼
等待status
從黃色切換爲綠色。 綠色標識已經分配完成。
在滾動升級期間,新版本的主分片不能分配給舊版本節點。新版本的數據格式和舊版本的數據格式可能不兼容。
若是沒法將複製碎片分配給另外一個節點(集羣中只有一個升級的節點),則複製碎片將保持未分配,狀態保持黃色。
在這種狀況下,您能夠在沒有初始化或重定位分片時繼續(檢查init和relo列)。
一旦升級了另外一個節點,就能夠分配副本而且狀態將變爲綠色。
未同步刷新的碎片可能須要更長時間才能恢復。 您能夠經過提交_cat / recovery請求來監視各個分片的恢復狀態:
curl -X GET "localhost:9200/_cat/recovery"
複製代碼
若是您中止索引,能夠在恢復完成後當即恢復索引。
當節點已恢復且羣集穩定後,請對須要更新的每一個節點重複這些步驟。
若是您暫時中止與計算機學習做業關聯的任務,請使用set upgrade mode API將它們恢復爲活動狀態:
curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=false"
複製代碼
若是您在升級以前關閉了全部機器學習做業,那麼打開這些做業並從Kibana或使用打開的做業啓動datafeeds並啓動datafeeds api。
在滾動升級期間,羣集繼續正常運行。 可是,任何新功能都將被禁用或以向後兼容模式運行,直到羣集中的全部節點都升級爲止。 升級完成且全部節點都運行新版本後,新功能便可運行。 一旦發生這種狀況,就沒法返回以向後兼容模式運行。 運行先前主要版本的節點將不被容許加入徹底更新的羣集。
若是在升級過程當中網絡出現故障,將全部剩餘的舊節點與羣集隔離,則必須使舊節點脫機並升級它們以使其可以加入羣集。
在升級期間,若是一半或者一半以上的主資格節點不可用,則羣集將變爲不可用,這意味着升級再也不是滾動升級。若是發生這種狀況,您應升級並從新啓動全部已中止符合主節點資格的節點,再次造成羣集,就像執行徹底羣集從新啓動升級同樣。可能還須要升級全部剩餘的舊節點,在從新造成後加入羣集。
一樣,若是運行僅包含一個主節點的測試/開發環境,則應最後升級主節點。從新啓動單個主節點會強制重組羣集。新羣集最初只有升級後的主節點,重組後,舊節點加入集羣時會被拒絕。已升級的節點將成功從新加入集羣。
要從版本6.0-6.7直接升級到Elasticsearch 7.1.1,必須關閉羣集中的全部節點,將每一個節點升級到7.1.1,而後從新啓動羣集。
若是運行的是6.0以前的版本,則將其升級到6.8並從新索引舊索引,或者從遠程調出一個新的7.1.1集羣並從新索引。
要執行完整集羣升級到7.1.1,參考下面的步驟:
禁用分片分配
當你關閉一個節點,在開始將該節點上的分片複製到集羣中的其餘節點以前,分配進程會等待index.unassigned.node_left.delayed_timeout
(默認狀況下爲1分鐘),這可能涉及大量I / O。因爲節點很快將從新啓動,所以無需執行此I/O操做,您能夠經過在關閉節點以前禁用副本分配:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
複製代碼
中止不必的索引而且執行同步刷新。
在升級過程當中能夠繼續索引,若是中止不必的索引而且執行同步刷新,那麼分片會恢復的快的多。
curl -X POST "localhost:9200/_flush/synced"
複製代碼
當你執行同步刷新,檢查響應確保結果是成功的。因爲掛起索引操做而失敗的同步刷新操做被列在響應主體中,儘管請求自己仍然返回200 OK狀態。若是出現故障,從新發出請求。
暫時中止與活動機器學習做業和datafeeds相關的任務。
若是你在6.x以前建立了機器學習索引,你必須從新索引。
若是你在6.x中版本中建立了機器學習索引,你能夠:
讓您的機器學習任務在升級期間運行。當您關閉一個機器學習節點時,它的做業將自動轉移到另外一個節點並恢復模型狀態。此選項容許任務在升級期間繼續運行,但會增長集羣的負載。
暫時中止與計算機學習做業和datafeeds相關的任務,並使用設置的升級模式API禁止打開新任務:
curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=true"
複製代碼
當你禁用了升級模式,使用自動保存的最後一個模型狀態恢復做業。此選項避免了在升級期間管理活動做業的開銷,而且比顯式地中止datafeed和關閉做業要快。
中止全部的做業和datafeeds。此選項在關閉時保存模型狀態。 在升級後從新打開做業時,它們使用徹底相同的模型。 可是,保存最新模型狀態比使用升級模式須要更長時間,尤爲是當您有大量工做或具備大型模型狀態的做業時。
關閉全部節點
若是你使用systemd
運行Elasticsearch能夠這樣來關閉:
sudo systemctl stop elasticsearch.service
複製代碼
若是你使用SysV init
運行Elasticsearch能夠這樣來關閉:
sudo -i service elasticsearch stop
複製代碼
若是你使用守護進程運行Elasticsearch能夠這樣來關閉:
kill $(cat pid)
複製代碼
若是你的版本是6.2或以前版本,而且安裝了X-pack插件(6.2以前的是X-pack是以插件形式存在),請在升級以前運行
bin / elasticsearch-plugin remove x-pack
以刪除X-Pack插件。 X-Pack功能如今包含在默認發行版中,再也不單獨安裝。 若是(6.2或以前)升級以前沒卸載X-Pack插件,則升級後節點將沒法啓動。 您須要降級,刪除插件,而後從新應用升級。
使用Depain或者RPM包升級:
使用rpm
或者dbpg
安裝一個新的包,全部文件都安裝在操做系統的適當位置,而且不會覆蓋Elasticsearch配置文件。
使用zip文件或者tar文件升級:
解壓到一個目錄,若是您不使用外部配置和數據目錄,這是很是關鍵的。
設置ES_PATH_CONF
環境變量以指定外部config
目錄和jvm.options
文件的位置。若是不使用外部config
目錄,請將舊配置複製到新安裝目錄。
在config/elasticsearch.yml
中設置path.data
。指向外部data
目錄。若是不使用外部data
目錄,請將舊data
目錄複製到新安裝。
若是使用監視特性,則在升級Elasticsearch時重用數據目錄。monitor使用存儲在
data
目錄中的持久UUID標識唯一的Elasticsearch節點。
設置config/elasticsearch.yml
中的path.logs
。指向要存儲logs
的位置。若是不指定此設置,日誌將存儲在解壓存檔到的目錄中。
當您解壓縮zip或tar包時,
elasticsearch-n.n.n
目錄包含Elasticsearchconfg,logs,data
和plugin
目錄。咱們建議將這些目錄移出Elasticsearch目錄,以便在升級Elasticsearch時不會刪除它們。 要指定新位置,請使用
ES_PATH_CONF
環境變量以及path.data
和path.logs
設置。 有關更多信息,請參閱重要的Elasticsearch配置。Debian和RPM軟件包將這些目錄放在每一個操做系統的適當位置。 在生產中,咱們建議使用deb或rpm軟件包進行安裝。
使用elasticsearch-plugin腳本安裝每一個已安裝插件的升級版本。 升級節點時,必須升級全部插件。
若是使用Elasticsearch安全功能來定義域,請驗證您的域設置是不是最新的。 域設置的格式在7.0版中已更改,特別是域類型的位置已更改。 請參閱域設置。
啓動每一個升級完成的節點
若是您有專用的主節點,請先啓動它們,等待它們造成集羣並選擇一個主節點,而後再處理數據節點。您能夠經過查看日誌來檢查進度。
若是從6.x羣集升級,則必須經過設置cluster.initial_master_nodes
設置來配置羣集引導。
只要有足夠的符合主節點的節點相互發現,它們就會造成一個集羣並選出一個主節點。 此時,您可使用_cat / health
和_cat / nodes
來監視加入集羣的節點:
curl -X GET "localhost:9200/_cat/health"
curl -X GET "localhost:9200/_cat/nodes"
複製代碼
等待全部節點加入集羣並報告狀態爲黃色
當節點加入集羣時,它開始恢復本地存儲的全部主分片。_cat/health
最初報告狀態爲紅色,表示沒有分配全部主分片。
一旦一個節點恢復了它的本地分片,集羣狀態就切換到黃色,這代表全部主分片都已恢復,但並無分配全部複製分片。這是預期的,由於您尚未從新啓用分配。全部節點狀態都變爲黃色時,再開始副本的分配,主節點的副本容許被分配到已經具備副本的節點中。
啓用分配
當全部節點都已加入羣集並恢復其主分片時,請經過將cluster.routing.allocation.enable
恢復爲其默認值來從新啓用分配:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
'
複製代碼
一旦從新啓用分配,集羣就開始向數據節點分配副本分片。此時,恢復索引和搜索是安全的,可是若是您可以等到成功分配了全部主分片和副本分片,而且全部節點的狀態都是綠色的,那麼您的集羣將恢復得更快。
你能夠經過_cat/health
和_cat/recovery
API來檢查進度:
curl -X GET "localhost:9200/_cat/health"
curl -X GET "localhost:9200/_cat/recovery"
複製代碼
重啓機器學習工做
若是您暫時中止與計算機學習做業關聯的任務,請使用set upgrade mode API將它們恢復爲活動狀態:
curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=false"
複製代碼
若是您在升級以前關閉了全部機器學習做業,那麼打開這些做業並從Kibana或使用打開的做業啓動datafeeds並啓動datafeeds api。
Elasticsearch能夠讀取在前一個主要版本中建立的索引。若是在5中建立了索引。在升級到7.1.1以前,您必須從新索引或刪除它們。若是存在不相容的索引,則Elasticsearch節點將沒法啓動。 即便它們是由6.x羣集建立的,5.x或更早索引的快照也沒法還原到7.x羣集。
這個限制也適用於Kibana和X-Pack特性使用的內部索引。所以,在使用7.1.1中的Kibana和X-Pack特性以前,必須確保內部索引具備兼容的索引結構。
有兩種方法能夠重建舊索引:
您可使用Kibana 6.7中的升級助手自動把5.x的索引轉發到7.1.1。
手動重建索引:
建立具備7.x兼容映射的索引。
將refresh_interval
設置爲-1,將number_of_replicas
設置爲0以進行有效的重建索引。
使用reindex
API將5.x索引中的文檔複製到新索引中。 在從新索引期間,可使用腳本對文檔數據和元數據執行任何須要的修改。
將refresh_interval
和number_of_replicas
重置爲舊索引中使用的值。
等待索引狀態改變爲綠色。
在單個更新別名請求中:
若是使用機器學習功能而且機器學習索引是在6.x以前建立的,則必須暫時中止與機器學習做業和datafeed相關的任務,防止在從新索引期間打開新做業。 使用
set upgrade mode
API或中止全部datafeed並關閉全部計算機學習做業。若是您使用Elasticsearch安全功能,則在從新索引
.security *
內部索引以前,最好在文件域中建立臨時超級用戶賬戶。
- 在單個節點上,將臨時超級用戶賬戶添加到文件域。 例如,運行
elasticsearch-users useradd
命令:bin/elasticsearch-users useradd <user_name> \ -p <password> -r superuser 複製代碼
- 從新索引.security *索引時使用這些憑據。 也就是說,使用它們登陸Kibana並運行升級助手或調用reindex API。 您可使用常規管理憑據從新索引其餘內部索引。
- 從文件域中刪除臨時超級用戶賬戶。 例如,運行
elasticsearch-users userdel
命令:bin/elasticsearch-users userdel <user_name> 複製代碼
有關更多信息,請參閱配置文件域。
您可使用來自遠程的reindex將索引從舊集羣遷移到7.1.1集羣。 這使您能夠從6.7以前的集羣遷移到7.1.1而不會中斷服務。
Elasticsearch提供向後兼容性支持,支持將先前主要版本的索引升級到當前主要版本。 跳過主要版本意味着您必須本身解決任何向後兼容性問題。
若是使用機器學習特性,而且要從6.5或更早的集羣遷移索引,則做業和數據流配置信息不會存儲在索引中。您必須在新的集羣中從新建立機器學習做業。若是要從6.6或更高版本的集羣遷移,最好暫時中止與機器學習做業和數據存儲相關的任務,以防止微小時差從新索引的不一樣機器學習索引之間的不一致性。使用
set upgrade mode
API或中止全部數據存儲並關閉全部機器學習做業。
遷移索引:
設置新的7.1.1集羣,並將現有集羣添加到elasticsearch.yml
中的reindex.remote.whitelist
。
reindex.remote.whitelist: oldhost:9200
複製代碼
新的集羣沒必要開始徹底擴展。當您遷移索引並將負載轉移到新集羣時,您能夠向新集羣添加節點,並從舊集羣刪除節點。
對於須要遷移到新集羣的索引:
建立索引適當的映射和設置。 將refresh_interval
設置爲-1並將number_of_replicas
設置爲0以便更快地重建索引。
使用reindex
API將遠程索引中的文檔提取到新的7.1.1索引中:
curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{
"source": {
"remote": {
"host": "http://oldhost:9200",
"username": "user",
"password": "pass"
},
"index": "source",
"query": {
"match": {
"test": "data"
}
}
},
"dest": {
"index": "dest"
}
}
'
複製代碼
若是經過將wait_for_completion
設置爲false
在後臺運行重建索引做業,則reindex
請求將返回一個task_id(任務id,用來查看任務完成進度),您可使用該task
API監視reindex做業的進度:GET _tasks / TASK_ID
reindex做業完成後,將refresh_interval
和number_of_replicas
設置爲所需的值(默認設置爲30s和1)。
一旦重建索引完成而且新索引的狀態是綠色,舊能夠刪掉舊索引了。