Elasticsearch 參考指南(升級前重新索引)

升級前重新索引

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手動重新索引你的舊索引:

  1. 創建一個新索引並從舊索引複製映射和設置。
  2. refresh_interval設置爲-1,並且number_of_replicas設置爲0,以實現高效的重新索引。
  3. 使用Reindex API將舊索引中的所有文檔重新索引到新索引。
  4. refresh_intervalnumber_of_replicas重置爲舊索引中使用的值。
  5. 等待索引狀態變爲green
  6. 在單個更新別名請求中:

    • 刪除舊索引。
    • 向新索引添加具有舊索引名稱的別名。
    • 將舊索引上存在的任何別名添加到新索引中。

遷移援助和升級工具

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提供向後兼容支持,可以將以前的主要版本的索引升級到當前的主要版本,跳過主要版本意味着你必須自己解決所有向後兼容性問題。

要遷移你的索引:

  1. 在舊集羣旁邊設置一個新的6.x集羣,通過將舊集羣添加到elasticsearch.yml中的reindex.remote.whitelist,使其能夠訪問舊集羣:

    reindex.remote.whitelist: oldhost:9200
    新的集羣不必完全擴展,當你遷移索引並將負載轉移到新集羣時,你可以向新集羣添加節點,並從舊集羣中刪除節點。
  2. 對於需要遷移到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_intervalnumber_of_replicas設置爲所需的值(默認設置是30s1)。
    • 一旦複製完成,新索引的狀態爲green,你就可以刪除舊索引。

下一篇:多索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章