全部產品
Search
文件中心

Elasticsearch:進階版:通過OSS將自建ES叢集遷移至阿里雲ES

更新時間:Apr 25, 2026

通過建立OSS快照倉庫備份ECS自建Elasticsearch(簡稱ES)資料,然後將快照恢複到阿里雲ES,實現自建ES叢集資料移轉到阿里雲ES。

使用限制

  • OSS儲存空間需同時滿足

    • 儲存空間為標準儲存類型

    • 與阿里雲ES叢集位於同一地區

  • 叢集版本:支援在同一個ES大版本之間將低版本中的資料移轉至高版本(如將8.15.1的資料移轉到8.17.1),不建議跨大版本之間遷移資料(如將7.7.1中的資料移轉到8.17.1)。

    說明

    阿里雲ES完全相容開源ES,但由於開源ES大版本間存在資料類型變更(如5.x的string類型在6.x中被拆分為text和keyword),直接跨大版本遷移會導致欄位類型識別錯誤。

前置準備

  • 建立與自建ES同版本的阿里雲ES叢集、建立OSS儲存空間。

  • RAM使用者需要具備AliyunOSSFullAccess權限原則,請參見RAM使用者授權完成授權。

背景資訊

自建ES待遷移資料以products_info索引為例:

建立索引並插入資料

建立索引:

curl -X PUT "http://localhost:9200/products_info" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "productName": { "type": "text" },
      "annual_rate": { "type": "text" },
      "describe": { "type": "text" }
    }
  }
}'

插入資料:

curl -X POST "http://localhost:9200/products_info/_bulk" -H 'Content-Type: application/json' -d'
{ "index": { "_id": "1" } }
{ "productName": "理財產品A", "annual_rate": "3.2200%", "describe": "180天定期理財,最低20000起投,收益穩定,可以自助選擇訊息推送" }
{ "index": { "_id": "2" } }
{ "productName": "理財產品B", "annual_rate": "3.1100%", "describe": "90天定投產品,最低10000起投,每天收益到賬訊息推送" }
{ "index": { "_id": "3" } }
{ "productName": "理財產品C", "annual_rate": "3.3500%", "describe": "270天定投產品,最低40000起投,每天收益立即到賬訊息推送" }
{ "index": { "_id": "4" } }
{ "productName": "理財產品D", "annual_rate": "3.1200%", "describe": "90天定投產品,最低12000起投,每天收益到賬訊息推送" }
{ "index": { "_id": "5" } }
{ "productName": "理財產品E", "annual_rate": "3.0100%", "describe": "30天定投產品推薦,最低8000起投,每天收益會訊息推送" }
{ "index": { "_id": "6" } }
{ "productName": "理財產品F", "annual_rate": "2.7500%", "describe": "熱門短期產品,3天短期,無須任何手續約用,最低500起投,通過簡訊通知擷取收益訊息" }
'

執行curl -X GET "http://localhost:9200/products_info/_search?pretty",返回資料如下表示索引資料就緒:

樣本資料

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 6,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "kRjec5gBZDsv98SA0Bmx",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品A",
          "annual_rate" : "3.2200%",
          "describe" : "180天定期理財,最低20000起投,收益穩定,可以自助選擇訊息推送"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "khjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品B",
          "annual_rate" : "3.1100%",
          "describe" : "90天定投產品,最低10000起投,每天收益到賬訊息推送"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "kxjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品C",
          "annual_rate" : "3.3500%",
          "describe" : "270天定投產品,最低40000起投,每天收益立即到賬訊息推送"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "lBjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品D",
          "annual_rate" : "3.1200%",
          "describe" : "90天定投產品,最低12000起投,每天收益到賬訊息推送"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "lRjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品E",
          "annual_rate" : "3.0100%",
          "describe" : "30天定投產品推薦,最低8000起投,每天收益會訊息推送"
        }
      },
      {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "lhjec5gBZDsv98SA0Bmy",
        "_score" : 1.0,
        "_source" : {
          "productName" : "理財產品F",
          "annual_rate" : "2.7500%",
          "describe" : "熱門短期產品,3天短期,無須任何手續約用,最低500起投,通過簡訊通知擷取收益訊息"
        }
      }
    ]
  }
}

方案概覽

image

該方案適用於資料量大( 500GB以上)、遷移效率要求高(首次全量備份後,後續僅同步增量資料,縮短遷移耗時)的情境,適合自建ES遷移上雲、跨版本升級、生產環境災備等情境。

資料移轉

1. 安裝elasticsearch-repository-oss外掛程式

  1. 串連自建ES所在的ECS伺服器,下載elasticsearch-repository-oss外掛程式,本文使用8.17版本的外掛程式。

    wget https://github.com/aliyun/elasticsearch-repository-oss/releases/download/v8.17.0/elasticsearch-repository-oss-8.17.0.zip

    其他版本的elasticsearch-repository-oss外掛程式,請參見如何擷取其他版本的elasticsearch-repository-oss外掛程式?

  2. 將外掛程式安裝至ES叢集。

    #通過將外掛程式解壓到Elasticsearch各節點安裝路徑的plugins目錄下完成安裝
    sudo unzip -d /usr/local/elasticsearch-8.17.0/plugins/elasticsearch-repository-oss elasticsearch-repository-oss-8.17.0.zip
  3. 啟動自建ES叢集節點。

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

2. 自建ES叢集建立快照倉庫

在自建ES叢集所在伺服器執行如下命令建立倉庫。

說明

此命令適用於ES 8.x版本,其他ES版本如何建立快照倉庫請參見手動備份與恢複

curl -X PUT "http://localhost:9200/_snapshot/<yourBackupName>" -H 'Content-Type: application/json' -d'
{
    "type": "oss",
    "settings": {
        "oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
        "oss.client.access_key_id": "xxxx",
        "oss.client.secret_access_key": "xxxx",
        "oss.client.bucket": "<yourBucketName>",
        "oss.client.base_path":"snapshot/",
        "oss.client.compress": true
    }
}
'

參數

說明

<yourBackupName>

倉庫名稱,自訂。

type

倉庫類型,需要設定為oss

oss.client.endpoint

OSS Bucket的訪問地址,可參見地區和Endpoint擷取。

說明

若自建ES的ECS執行個體與OSS儲存空間位於同一地區,請通過私網地址訪問OSS;若在不同地區,則使用外網地址。

oss.client.access_key_id

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

oss.client.secret_access_key

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

oss.client.bucket

OSS Bucket名稱。

oss.client.base_path

快照儲存路徑。

oss.client.compress

是否壓縮:

  • true:啟用壓縮,可節省儲存空間

  • false:不啟用壓縮

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

3. 為指定索引建立快照

在自建ES中建立snapshot_1快照,備份products_info索引。

curl -X PUT localhost:9200/_snapshot/<yourBackupName>/snapshot_1?pretty -H "Content-Type: application/json" -d'
{
"indices": "products_info"
}'

<yourBackupName>為您在自建ES建立快照倉庫中設定的倉庫名稱。

快照建立成功後,預期返回"accepted" : true

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

4. 在阿里雲ES上建立相同倉庫

在阿里雲ES中登入Kibana控制台,在左側導覽列,單擊展開表徵圖表徵圖,選擇Management > 开发工具

Shell中執行以下命令,建立與自建ES相同的倉庫。

PUT _snapshot/<yourBackupName>/
{
    "type": "oss",
    "settings": {
        "endpoint": "oss-cn-shanghai.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "<yourBucketName>",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}

<yourBackupName><yourBucketName><base_path>需要與在自建ES建立快照倉庫中使用的倉庫和Bucket保持一致。

5. 在阿里雲ES中恢複快照

在Kibana控制台執行以下命令,將備份倉庫中 snapshot_1 快照恢複到叢集,包含所有索引(除監控類和安全審計類索引),且自動跳過不存在的索引。

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

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

索引恢複過程中,可以通過GET products_info/_recovery查看products_info索引的恢複狀態,當"stage":為"DONE"時,索引恢複完成。

說明

在ES 7.10.x、7.17.x版本中,支援通過將 cluster.restore.ignore_revision.enable設定為true,來允許從修訂版本號碼更高的快照中恢複資料。修訂版本號碼即版本號碼中的第三位,例如,7.10.1版本,7為主要版本號,10為次版本號碼,1則為修訂版本號碼。

樣本:當前啟動並執行ES 7.10.0版本將cluster.restore.ignore_revision.enable設定為true後,可實現從7.10.2版本建立的快照中恢複資料。配置代碼如下。

PUT _cluster/settings
{
  "persistent": {
    "cluster.restore.ignore_revision.enable": true
  }
}

6. 結果驗證

在Kibana控制台上執行以下命令,查看恢複結果。

  • 查看恢複的索引

    GET /_cat/indices?v
  • 查看恢複的索引資料

    GET /products_info/_search

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

    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": 1,
        "hits": [
          {
            "_index": "products_info",
            "_id": "1",
            "_score": 1,
            "_source": {
              "productName": "理財產品A",
              "annual_rate": "3.2200%",
              "describe": "180天定期理財,最低20000起投,收益穩定,可以自助選擇訊息推送"
            }
          },
          {
            "_index": "products_info",
            "_id": "2",
            "_score": 1,
            "_source": {
              "productName": "理財產品B",
              "annual_rate": "3.1100%",
              "describe": "90天定投產品,最低10000起投,每天收益到賬訊息推送"
            }
          },
          {
            "_index": "products_info",
            "_id": "3",
            "_score": 1,
            "_source": {
              "productName": "理財產品C",
              "annual_rate": "3.3500%",
              "describe": "270天定投產品,最低40000起投,每天收益立即到賬訊息推送"
            }
          },
          {
            "_index": "products_info",
            "_id": "4",
            "_score": 1,
            "_source": {
              "productName": "理財產品D",
              "annual_rate": "3.1200%",
              "describe": "90天定投產品,最低12000起投,每天收益到賬訊息推送"
            }
          },
          {
            "_index": "products_info",
            "_id": "5",
            "_score": 1,
            "_source": {
              "productName": "理財產品E",
              "annual_rate": "3.0100%",
              "describe": "30天定投產品推薦,最低8000起投,每天收益會訊息推送"
            }
          },
          {
            "_index": "products_info",
            "_id": "6",
            "_score": 1,
            "_source": {
              "productName": "理財產品F",
              "annual_rate": "2.7500%",
              "describe": "熱門短期產品,3天短期,無須任何手續約用,最低500起投,通過簡訊通知擷取收益訊息"
            }
          }
        ]
      }
    }

常見問題

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

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

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

  • elasticsearch.version=自建ES的版本

    說明

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

  • java.version=1.8

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

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