全部產品
Search
文件中心

Elasticsearch:阿里雲ES間跨叢集reindex

更新時間:Jun 30, 2024

如果您需要將一個Elasticsearch(簡稱ES)叢集中的資料移轉到另一個ES叢集中時,可以通過reindex API重建索引來實現。本文介紹兩個均處於舊網路架構的叢集通過reindex方式進行叢集間資料移轉。

情境說明

以下為阿里雲ES間跨叢集reindex的應用情境說明,請結合業務資料情況及所處網路架構進行選擇。

  • ES叢集間遷移資料。

  • 索引分區分配不合理,例如資料量太大分區數太少,可通過reindex重建索引。

  • 索引中存在大量資料的情況下,需要修改索引mapping,可通過reindex複製索引資料。

2020年10月阿里雲ES進行了網路架構調整,新網路架構下的叢集跨叢集reindex需依賴Privatelink打通阿里雲ES叢集私網。您可以參見下表,依據您的業務情境選擇解決方案進行處理。

說明

2020年10月之前建立的ES叢集屬於舊網路架構,2020年10月及之後建立的ES叢集屬於新網路架構。

使用情境

ES叢集所處網路架構

解決方案

阿里雲ES叢集間的資料移轉

兩個ES叢集均建立於舊網路架構下。

reindex方式:阿里雲ES間跨叢集reindex

其中一個ES叢集建立於新網路架構下。

說明

另一個ES叢集可以建立於新網路架構,也可以建立於舊網路架構。

將ECS上自建的ES叢集中的資料移轉至阿里雲ES叢集中

阿里雲ES叢集建立於舊網路架構下。

reindex方式:通過reindex將自建ES資料移轉至阿里雲

阿里雲ES叢集建立於新網路架構下。

reindex方式:通過執行個體私網打通將自建Elasticsearch資料移轉至阿里雲

前提條件

  • 準備兩個處於舊網路架構的阿里雲ES叢集,兩個叢集需要在同一專用網路和虛擬交換器下。本文使用6.7.0版本的執行個體作為本地叢集,6.3.2版本的執行個體作為遠程叢集。

  • 準備測試資料。

    • 本地叢集

      在本地叢集中建立目標索引。

      PUT dest
      {
        "settings": {
          "number_of_shards": 5,
          "number_of_replicas": 1
        }
      }
    • 遠程叢集

      在遠程叢集中準備待遷移的資料。本文使用快速入門章節中的資料測試,詳細資料請參見快速入門本地叢集測試資料

      重要

      如果您使用的是7.0及以上版本的叢集,需要將索引類型修改為_doc

操作步驟

  1. 登入Elasticsearch控制台
  2. 在左側導覽列,單擊Elasticsearch執行個體
  3. 進入目標執行個體。
    1. 在頂部功能表列處,選擇資源群組和地區。
    2. Elasticsearch執行個體中單擊目標執行個體ID。
  4. 在本地叢集中,配置reindex白名單。

    1. 在左側導覽列,選擇配置與管理 > ES叢集配置

    2. YML檔案配置右側,單擊修改配置

    3. 其他Configure配置文字框中,輸入reindex白名單。

      reindex白名單的配置格式與執行個體的可用性區域數量有關,具體如下:

      • 單可用性區域執行個體:白名單的格式為<Elasticsearch執行個體的網域名稱>:9200單可用性區域配置樣本例如:

        reindex.remote.whitelist: ["es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200"]
      • 多可用性區域執行個體:白名單需要配置為執行個體中所有資料節點的IP地址與連接埠的組合。多可用性區域遠程白名單配置例如:

        reindex.remote.whitelist: ["10.0.xx.xx:9200","10.0.xx.xx:9200","10.0.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200"]
        說明

        您可以在執行個體基本資料頁面的節點可視化頁簽中,擷取執行個體中所有資料節點的IP地址。詳細資料,請參見查看節點的基本資料

      更多關於reindex白名單的配置說明,請參見配置reindex白名單

    4. 選中該操作會重啟執行個體,請確認後操作,單擊確定

      確定後,Elasticsearch執行個體會重啟。重啟過程中,可在工作清單查看進度。重啟成功後,即可完成配置。

  5. 在本地叢集中,調用reindex API重建索引。

    1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。

      登入Kibana控制台的具體操作,請參見登入Kibana控制台
      說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
    2. 在左側導覽列,單擊Dev Tools

    3. Console中,執行如下命令,重建索引。

      POST _reindex
      {
        "source": {
          "remote": {
            "host": "http://es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200",
            "username": "elastic",
            "password": "your_password"
          },
          "index": "product_info",
          "query": {
            "match": {
              "productName": "理財"
            }
          }
        },
        "dest": {
          "index": "dest"
        }
      }

      類別

      參數

      說明

      source

      host

      遠程叢集的訪問地址,必須包含支援協議、網域名稱和連接埠資訊,例如https://otherhost:9200host配置格式與執行個體的可用性區域數量有關,具體如下:

      • 單可用性區域執行個體:http://<執行個體的網域名稱>:9200

        說明

        執行個體的網域名稱可在基本資料頁面擷取。詳細資料,請參見查看執行個體的基本資料

      • 多可用性區域執行個體:http://<執行個體中任意資料節點的IP地址>:9200

      username

      選擇性參數,如果您所請求的遠程Elasticsearch服務需要使用Basic Authentication,請在請求中一併提供此參數資訊。Elasticsearch執行個體的預設使用者名為elastic。

      重要
      • 為確保安全性,通過Basic Authentication鑒權時建議使用HTTPS協議,否則密碼資訊將以文本形式進行傳輸。

      • 對於Elasticsearch執行個體,需要開啟HTTPS協議後,才可在host中使用HTTPS協議。開啟HTTPS協議的具體操作請參見使用HTTPS協議

      password

      使用者對應的密碼。Elasticsearch執行個體的elastic使用者的密碼在建立執行個體時設定,如果忘記可進行重設。重設密碼的注意事項及具體操作,請參見重設執行個體訪問密碼

      index

      遠程叢集中的源索引。

      query

      通過查詢文法,指定待遷移的資料。詳細資料,請參見Reindex API

      dest

      index

      本地叢集中的目標索引。

      說明

      從遠程叢集重建索引資料,不支援手動切片或自動切片。詳細資料,請參見手動切片自動切片

      執行成功後,預期結果如下。

      {
        "took" : 51,
        "timed_out" : false,
        "total" : 2,
        "updated" : 2,
        "created" : 0,
        "deleted" : 0,
        "batches" : 1,
        "version_conflicts" : 0,
        "noops" : 0,
        "retries" : {
          "bulk" : 0,
          "search" : 0
        },
        "throttled_millis" : 0,
        "requests_per_second" : -1.0,
        "throttled_until_millis" : 0,
        "failures" : [ ]
      }
  6. 查看遷移成功的資料。

    GET dest/_search

    預期結果如下:

    • 單可用性區域執行個體查看遷移成功的資料

    • 多可用性區域執行個體查看遷移成功的資料

總結

通過reindex API遷移資料時,單可用性區域的Elasticsearch執行個體和多可用性區域執行個體的配置方法大致相同,不同之處在於以下兩點。

可用性區域類型

reindex白名單配置

host參數配置

單可用性區域

Elasticsearch的網域名稱和連接埠

https://Elasticsearch執行個體的網域名稱:9200

多可用性區域

執行個體中所有資料節點的IP地址和連接埠

https://Elasticsearch執行個體中任意資料節點的IP地址:9200

更多資訊

在調用reindex API重建索引時,您還可以進行大量設定和逾時時間設定:

  • 大量設定

    遠程Elasticsearch叢集使用堆緩衝索引資料,預設最大值為100 MB。如果遠程索引中包含大文檔,請將批量數值設定為較小值。

    以下樣本中,通過size設定批量數值為10

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200"
        },
        "index": "source",
        "size": 10,
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }
  • 逾時時間設定

    您可以使用socket_timeout設定socket讀取逾時時間,預設為30s;使用connect_timeout設定連線逾時時間,預設為1s

    以下樣本中,設定socket讀取逾時時間為1分鐘,連線逾時時間為10秒。

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200",
          "socket_timeout": "1m",
          "connect_timeout": "10s"
        },
        "index": "source",
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }