全部產品
Search
文件中心

Elasticsearch:通過OSS將自建Elasticsearch資料移轉至阿里雲

更新時間:Jun 30, 2024

當您需要將自建Elasticsearch資料移轉至Elasticsearch時,可以使用OSS快照的方式進行遷移。即使用Elasticsearch的snapshot API,建立自建Elasticsearch資料的快照並儲存到OSS中,然後從OSS將快照資料恢複到Elasticsearch中。本文介紹具體的實現方法。

背景資訊

通過OSS將自建Elasticsearch資料移轉至Elasticsearch,適用於自建Elasticsearch資料量比較大的情境。

操作流程

  1. 步驟一:環境準備

    部署自建Elasticsearch叢集、建立OSS Bucket、建立Elasticsearch叢集。

  2. 步驟二:安裝elasticsearch-repository-oss外掛程式

    在自建Elasticsearch叢集各節點中安裝elasticsearch-repository-oss外掛程式,外掛程式安裝後才可在自建Elasticsearch中建立OSS倉庫。

  3. 步驟三:在自建Elasticsearch叢集中建立倉庫

    使用snapshot API在自建Elasticsearch叢集中建立快照備份倉庫。

  4. 步驟四:為指定索引建立快照

    為需要遷移的索引建立快照,並將快照備份到已建立的倉庫中。

  5. 步驟五:在Elasticsearch上建立相同倉庫

    在Elasticsearch的Kibana控制台中,使用snapshot API建立一個與自建Elasticsearch叢集相同的快照備份倉庫。

  6. 步驟六:在Elasticsearch上恢複快照

    將倉庫中已備份的自建Elasticsearch叢集的快照恢複到Elasticsearch叢集中,完成資料移轉。

  7. 步驟七:查看快照恢複結果

    快照恢複後,查看恢複的索引和索引資料。

步驟一:環境準備

  1. 準備自建Elasticsearch叢集。

    如果您還沒有自建Elasticsearch叢集,建議您使用阿里雲ECS進行搭建,具體操作步驟請參見安裝並運行Elasticsearch

    說明

    建議您使用同VPC下的阿里雲ECS搭建自建Elasticsearch叢集,通過自建伺服器搭建叢集可能存在網路不通的問題。

    本文以單節點叢集為例進行示範,版本為6.7.0。實際生產中您可以購買多個相同Virtual Private Cloud(Virtual Private Cloud)的ECS執行個體搭建多節點Elasticsearch叢集,購買ECS的具體步驟請參見自訂購買執行個體

  2. 開通OSS服務,並建立與部署自建Elasticsearch叢集的ECS執行個體相同地區的Bucket。

    具體操作步驟請參見開通OSS服務建立儲存空間

    重要

    請建立標準儲存類型的OSS Bucket,不支援Archive Storage類型。

  3. 建立目標Elasticsearch執行個體,所選地區與您建立的Bucket相同。

    具體操作步驟請參見建立Elasticsearch執行個體

步驟二:安裝elasticsearch-repository-oss外掛程式

  1. 串連自建Elasticsearch叢集所在的ECS。

    具體操作請參見通過密碼或密鑰認證登入Linux執行個體

    說明

    本文檔以普通使用者權限為例。

  2. 下載elasticsearch-repository-oss外掛程式。

    本文使用6.7.0版本的外掛程式,要求JDK為11.0及以上版本。

    wget https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v6.7.0/elasticsearch-repository-oss-6.7.0.zip
    說明

    如需擷取其他版本的elasticsearch-repository-oss外掛程式,可參見常見問題

  3. 將安裝包解壓到自建Elasticsearch各節點安裝路徑的plugins目錄下。

    sudo unzip -d /usr/local/elasticsearch-6.7.0/plugins/elasticsearch-repository-oss elasticsearch-repository-oss-6.7.0.zip

    您也可以使用命令方式安裝外掛程式。

    sudo ./bin/elasticsearch-plugin install file:///usr/local/elasticsearch-repository-oss-6.7.0.zip
  4. 啟動自建Elasticsearch叢集各節點。

    cd /usr/local/elasticsearch-6.7.0
    ./bin/elasticsearch -d

步驟三:在自建Elasticsearch叢集中建立倉庫

串連自建Elasticsearch叢集所在的ECS,執行如下命令建立倉庫。

sudo curl -H "Content-Type: application/json" -XPUT localhost:9200/_snapshot/<yourBackupName> -d' {"type": "oss", "settings": { "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",  "access_key_id": "<yourAccesskeyId>",  "secret_access_key":"<yourAccesskeySecret>", "bucket": "<yourBucketName>", "compress": true }}'

參數

說明

<yourBackupName>

倉庫名稱,可自訂。

type

倉庫類型,需要設定為oss

endpoint

OSS Bucket的訪問地址,可參見訪問網域名稱和資料中心擷取。

說明

如果自建Elasticsearch所在ECS與您的OSS在同一地區,請使用私網地址,否則請使用外網地址。

access_key_id

建立OSS Bucket的帳號的AccessKey ID,擷取方式請參見如何擷取AccessKey

secret_access_key

建立OSS Bucket的帳號的AccessKey Secret,擷取方式請參見如何擷取AccessKey

bucket

您建立的OSS Bucket名稱。

compress

是否壓縮:

  • true:壓縮

  • false:不壓縮

建立成功後,預期返回"acknowledge":true

步驟四:為指定索引建立快照

在自建Elasticsearch中建立一個快照,用來備份您需要遷移的索引資料。建立快照時,預設會備份所有開啟的索引。如果您不想備份系統索引,例如以.kibana.security.monitoring等開頭的索引,可在建立快照時指定需要備份的索引。

重要

建議您不要備份系統索引,因為系統索引會佔用較大空間。

curl -H "Content-Type: application/json" -XPUT localhost:9200/_snapshot/<yourBackupName>/snapshot_1?pretty -d'
{
"indices": "index1,index2"
}'

<yourBackupName>為您在步驟三:在自建Elasticsearch叢集中建立倉庫中建立的倉庫名稱;index1index2為您需要備份的索引名稱。快照建立成功後,預期返回"accepted" : true

快照建立過程中,您可以通過GET /_snapshot/<yourBackupName>/<yourSnapshotName>/_status命令查看指定快照的詳細資料。當返回結果中的stateSUCCESS時,表示快照已完成。

步驟五:在Elasticsearch上建立相同倉庫

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 在左側導覽列,單擊Dev Tools
  3. Console中執行以下命令,建立與自建Elasticsearch相同的倉庫。

    PUT _snapshot/<yourBackupName>
    {
        "type": "oss",
        "settings": {
            "endpoint": "oss-cn-hangzhou-internal.aliyuncs.com",
            "access_key_id": "<yourAccesskeyId>",
            "secret_access_key": "<yourAccesskeySecret>",
            "bucket": "<yourBucketName>",
            "compress": true
        }
    }

    <yourBackupName><yourBucketName>需要與步驟三:在自建Elasticsearch叢集中建立倉庫中保持一致。

步驟六:在Elasticsearch上恢複快照

參見步驟五:在Elasticsearch上建立相同倉庫,在Kibana控制台上執行以下命令,恢複快照中的所有索引(除過.開頭的系統索引)。

POST _snapshot/es_backup/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security_audit*","ignore_unavailable":"true"}

命令執行成功,預期返回"accepted" : true

以上命令會恢複快照中的所有索引,您也可以選擇需要恢複的索引。同時如果Elasticsearch叢集中有同名索引,而您想在不替換現有資料的前提下恢複舊資料來驗證內容,或者處理其他任務,可在恢複過程中重新命名索引。

POST _snapshot/es_backup/snapshot_1/_restore
{
  "indices":"index1",
  "rename_pattern": "index(.+)",
  "rename_replacement": "restored_index_$1"
}
說明

更多快照和恢複命令請參見手動備份與恢複

步驟七:查看快照恢複結果

參見步驟五:在Elasticsearch上建立相同倉庫,在Kibana控制台上執行以下命令,查看恢複結果:

  • 查看恢複的索引

    GET /_cat/indices?v

    查看恢複成功的索引

  • 查看恢複的索引資料

    GET /index1/_search

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

    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "index1",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "productName" : "testpro",
              "annual_rate" : "3.22%",
              "describe" : "testpro"
            }
          }
        ]
      }
    }

常見問題

Q:如何擷取其他版本的elasticsearch-repository-oss外掛程式?

A:可在Github上下載。如果Github上沒有對應版本的外掛程式包,建議您下載對應大版本的相近小版本的外掛程式包,然後修改plugin-descriptor.properties檔案中的參數值,重新打包再安裝。

  • version=所需外掛程式的版本

  • elasticsearch.version=自建Elasticsearch的版本

    說明

    外掛程式版本與自建Elasticsearch版本要保證一致。

  • java.version=1.8

    說明
    • 不同的Elasticsearch版本依賴的JDK版本不一樣,以官方外掛程式要求為準。

    • 由於開源Elasticsearch叢集的版本較多,各版本編譯存在差異,因此在使用elasticsearch-repository-oss外掛程式時,需要您結合對應Elasticsearch的版本進行編譯調試。例如自建Elasticsearch 7.6.2叢集,要求JDK版本大於1.8及以上,編譯調試後對應的外掛程式為elasticsearch-repository-oss-7.6.2