升級前重新索引
Elasticsearch可以讀取上一個主要版本中創建的索引,舊的索引必須重新索引或刪除。Elasticsearch 6.x可以使用Elasticsearch 5.x中創建的索引,但不能使用Elasticsearch 2.x或之前創建的索引,Elasticsearch 5.x可以使用Elasticsearch 2.x中創建的索引,但不能使用1.x或之前創建的索引。
如果存在不兼容的索引,Elasticsearch節點將無法啓動。
要升級包含在2.x中創建的索引的Elasticsearch 5.x集羣,必須在升級到6.x之前重新索引或刪除它們。
要升級一個運行2.x的Elasticsearch集羣,有兩個選項:
- 執行完整的集羣重啓升級到5.6,重新索引2.x索引,然後執行滾動升級到6.x,如果你的Elasticsearch 2.x集羣包含在2.x之前創建的索引,那麼你必須在升級到5.6之前刪除或重新索引它們,有關從2.x升級到5.6的更多信息,請參閱Elasticsearch 5.6參考資料中的升級Elasticsearch。
- 創建一個新的6.x集羣,從遠程重新索引,直接從2.x集羣導入索引。
要升級Elasticsearch 1.x集羣,有兩個選項:
- 執行完整的集羣重啓升級到Elasticsearch 2.4.x,並重新索引或刪除1.x索引,然後,執行完整的集羣重啓升級到5.6,重新索引或刪除2.x索引,最後,執行滾動升級到6.x。有關從1.x升級到2.4的更多信息,請參見Elasticsearch 2.4參考資料中的升級Elasticsearch,有關從2.4升級到5.6的更多信息,請參閱Elasticsearch 5.6參考資料中的升級Elasticsearch。
- 創建一個新的6.x集羣,從遠程重新索引,直接從1.x集羣導入索引。
升級基於時間的索引
如果你使用基於時間的索引,你可能不需要將前5.x索引向前推進到6.x,基於時間的索引中的數據通常會隨着時間的推移而變得不那麼有用,並且隨着它們的時間期限超過你的保留期而被刪除。
除非你的保留期非常長,否則你可以等待升級到6.x,直到你所有的前5.x索引都被刪除。
就地重新索引
用reindex API手動重新索引你的舊索引:
- 創建一個新索引並從舊索引複製映射和設置。
- 將
refresh_interval
設置爲-1
,並且number_of_replicas
設置爲0
,以實現高效的重新索引。 - 使用Reindex API將舊索引中的所有文檔重新索引到新索引。
- 將
refresh_interval
和number_of_replicas
重置爲舊索引中使用的值。 - 等待索引狀態變爲
green
。 -
在單個更新別名請求中:
- 刪除舊索引。
- 向新索引添加具有舊索引名稱的別名。
- 將舊索引上存在的任何別名添加到新索引中。
遷移援助和升級工具
X-Pack 5.6提供了遷移援助和升級工具,簡化了重新索引和升級到6.x,這些工具在X-Pack試用版和基本許可中是免費的,你可以使用它們來升級,無論X-Pack是不是你的Elastic Stack的一個常規部分,有關更多信息,請參閱http://www.elastic.co/guide/en/elastic-stack/6.4/upgrading-elastic-stack.html。
從遠程集羣重新索引
你可以使用reindex從遠程將索引從舊集羣遷移到新的6.x集羣,這使你可以在不中斷服務的情況下從前-5.6集羣遷移到6.x。
Elasticsearch提供向後兼容支持,可以將以前的主要版本的索引升級到當前的主要版本,跳過主要版本意味着你必須自己解決所有向後兼容性問題。
要遷移你的索引:
-
在舊集羣旁邊設置一個新的6.x集羣,通過將舊集羣添加到
elasticsearch.yml
中的reindex.remote.whitelist
,使其能夠訪問舊集羣:reindex.remote.whitelist: oldhost:9200
新的集羣不必完全擴展,當你遷移索引並將負載轉移到新集羣時,你可以向新集羣添加節點,並從舊集羣中刪除節點。
-
對於需要遷移到6.x集羣的每個索引:
- 用適當的映射和設置在6.x中創建一個新的索引,將
refresh_interval
設置爲-1
,並將number_of_replicas
設置爲0
,以便更快地重新索引。 -
從遠程重新索引以將文檔從舊索引拉到新的6.x索引。
POST _reindex { "source": { "remote": { "host": "http://oldhost:9200", "username": "user", "password": "pass" }, "index": "source", "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }
- 如果通過將
wait_for_completion
設置爲false
在後臺運行重新索引作業,那麼重新索引請求將返回一個task_id
,你可以使用task API用來監控重新索引作業的進度:GET _tasks/TASK_ID
。 - 當重新索引作業完成時,將
refresh_interval
和number_of_replicas
設置爲所需的值(默認設置是30s
和1
)。 - 一旦複製完成,新索引的狀態爲
green
,你就可以刪除舊索引。
- 用適當的映射和設置在6.x中創建一個新的索引,將