全部產品
Search
文件中心

Elasticsearch:將Amazon OpenSearch Service中的Elasticsearch索引遷移至阿里雲

更新時間:Jun 30, 2024

本文介紹如何將Amazon OpenSearch Service中的Elasticsearch(以下簡稱ES)索引資料移轉到Elasticsearch中。

方案說明

該方案不局限雲端服務廠商,均依賴ES快照機制實現。例如,使用阿里雲線上遷移(遷移實施)將儲存在Amazon OpenSearch Service或騰訊雲COS的ES快照資料移轉到阿里雲OSS,參考阿里雲ES快照恢複OSS倉庫快照資料。具體操作,請參見手動備份與恢複

ES快照遷移僅支援低版本向高版本或同版本遷移恢複,詳見快照相容性

背景資訊

本次Elasticsearch索引遷移方案的參考架構如下。AWS遷移至阿里雲ES架構圖

相關概念

  • Elasticsearch:一個分布式的RESTful風格的搜尋與分析引擎,適用於各種應用情境。作為Elastic Stack的核心,Elasticsearch可以集中儲存您的資料,並對資料進行搜尋分析。

  • Kibana:您可以使用Kibana對Elasticsearch資料進行可視化搜尋分析。

  • Amazon OpenSearch Service:原Amazon Elasticsearch Service,2021年9月更名為Amazon OpenSearch Service。是AWS的一項託管服務,提供了各種便於使用的Elasticsearch API和即時分析功能,還可以實現生產工作負載需要的可用性、可擴充性和安全性。您可以使用Amazon OpenSearch Service輕鬆部署、保護、操作和擴充Elasticsearch,以便進行日誌分析、全文檢索搜尋和應用程式監控等工作。

  • Elasticsearch服務: 提供基於開源Elasticsearch服務,致力於資料分析、資料搜尋等情境服務。在開源Elasticsearch基礎上提供企業級許可權管控、安全監控警示、自動報表產生等功能。

  • 快照和恢複(Snapshot and Restore):您可以使用快照和恢複功能,在遠程存放庫(如共用檔案系統、S3或HDFS)中,建立各個索引或整個叢集的快照。建立後的快照可以被恢複到對應版本的Elasticsearch中。

    • 在5.x中建立的索引快照可以恢複到6.x。

    • 在2.x中建立的索引快照可以恢複到5.x。

    • 在1.x中建立的索引快照可以恢複到2.x。

解決方案概述

您可以通過以下步驟來遷移索引資料:

  1. 建立基準索引。

    1. 建立一個快照存放庫,並將其與Amazon Simple Storage Service (Amazon S3)儲存空間相關聯。

    2. 為要遷移的索引建立第一個完整的快照。

      該快照會自動儲存在步驟一中建立的Amazon S3儲存空間中。

    3. 在阿里雲側建立一個Object Storage Service服務OSS(Object Storage Service)儲存空間,並將其註冊到Elasticsearch執行個體的快照存放庫中。

    4. 使用OSS Import工具將Amazon S3儲存空間中的資料提取到阿里雲OSS儲存空間中。

    5. 將此完整快照恢複到Elasticsearch執行個體。

  2. 定期處理增量快照 。

    重複以上步驟處理增量快照並進行恢複。

  3. 確定最終快照,進行服務切換。

    1. 停止可能會修改索引資料的服務。

    2. 建立Amazon OpenSearch Service執行個體的最終增量快照。

    3. 將最終增量快照遷移至OSS,然後恢複到Elasticsearch執行個體中。

    4. 進行服務切換,在Elasticsearch執行個體中,查看遷移成功的資料。

前提條件

您已完成以下操作:

  • 建立Amazon OpenSearch Service(原Amazon Elasticsearch Service)域,版本號碼為Elasticsearch 5.5.2,地區為新加坡。

    具體操作步驟請參見建立Amazon OpenSearch Service域

  • 建立Elasticsearch執行個體,版本號碼為5.5.3,地區為杭州。

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

  • 建立OSS Bucket。

    本文建立的Bucket地區為華東1(杭州)、儲存類型為標準儲存、讀寫權限為私人,其他參數保持預設,具體操作步驟請參見控制台建立儲存空間

  • 準備待遷移的索引,樣本索引名稱為movies

在AWS中建立手動快照的前提條件

Amazon OpenSearch Service每天會自動為一個域中的主要索引分區建立快照,並將這些快照儲存在預配置的Amazon S3儲存空間中。這些快照會保留14天,您無需額外付費。此外,您還可以使用這些快照來恢複域,但是這些自動快照不能被遷移到新域。如果要遷移,您必須使用儲存在自己的存放庫(S3儲存空間)中的手動快照。手動快照將收取標準S3費用。

您需要使用Amazon Identity and Access Management(IAM)和Amazon S3才能手動建立和恢複索引快照。建立快照之前,請確保已滿足以下條件。

前提條件

描述

建立Amazon S3儲存空間

儲存Amazon OpenSearch Service域的手動快照。

建立IAM角色

為Amazon OpenSearch Service授權。在給該角色添加信任關係時,必須在Principal語句中指定Amazon OpenSearch Service。使用Amazon OpenSearch Service註冊您的快照存放庫時,也需要使用該IAM角色。只有具有該角色存取權限的IAM使用者才可以註冊快照存放庫。

建立IAM策略

指定IAM角色可以對S3儲存空間執行的操作。該策略必須添加給為Amazon OpenSearch Service授權的IAM角色。您需要在該策略的Resource語句中指定S3儲存空間。

  • 建立S3儲存空間

    建立一個Amazon S3儲存空間來儲存手動快照,並記錄其Amazon資源名稱(ARN)。該ARN在以下情境中會用到:

    • 用於IAM角色添加IAM策略的Resource語句。

    • 用於註冊快照存放庫的Python用戶端。

    Amazon S3儲存空間的ARN樣本如下。

    arn:aws:s3:::eric-es-index-backups
  • 建立IAM角色

    確保已經建立了一個IAM角色,且在其信任關係中的Service語句中指定該角色的服務類型為Amazon OpenSearch Service(es.amazonaws.com),如下所示。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "es.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

    您可以在IAM控制台查看信任關係的詳細資料。

    查看信任關係

    說明

    在IAM控制台建立AWS服務角色時,Select role type下拉式清單中不包含Amazon OpenSearch Service。 但是,您可以先選擇Amazon EC2,按照提示完成角色建立,然後將ec2.amazonaws.com修改為es.amazonaws.com

  • 建立IAM策略

    建立IAM策略,並將IAM策略添加給IAM角色。該策略指定儲存Amazon OpenSearch Service域的S3儲存空間。以下樣本指定了儲存空間eric-es-index-backups的ARN。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListBucket"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups"
                ]
            },
            {
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups/*"
                ]
            }
        ]
    }
    1. 將策略內容複寫到編輯策略地區。策略編輯地區

    2. 檢查策略是否正確。Policy Summary

    3. 為IAM角色添加IAM策略。為IAM角色添加IAM策略

步驟一:註冊手動快照存放庫

您必須通過Amazon OpenSearch Service註冊快照存放庫後,才能建立手動索引快照。建立手動索引快照前,需要先為IAM角色的信任關係中指定的使用者或角色簽發您的AWS請求,詳情請參見在AWS中建立手動快照的前提條件

重要

由於curl命令不支援AWS請求籤名,因此不能使用curl命令註冊快照存放庫。請使用樣本Python用戶端註冊您的快照存放庫。

  1. 下載樣本Python用戶端檔案。

  2. 修改樣本Python用戶端檔案。

    修改檔案中標黃的值,填入實際匹配的值。修改完成後,複製樣本Python用戶端檔案中的內容至Python檔案中,並命名為snapshot.py。

    樣本Python用戶端檔案中的參數說明如下。

    變數名

    描述

    region

    建立快照存放庫所在的AWS地區。

    host

    Amazon OpenSearch Service域的訪問地址。

    aws_access_key_id

    IAM憑證ID。

    aws_secret_access_key

    IAM憑證Key。

    path

    快照存放庫的路徑。

    data

    必須包含上文在AWS中建立手動快照的前提條件中,為IAM角色建立的S3儲存空間的名字和ARN。

    重要
    • 如果要為快照存放庫啟用S3託管密鑰的伺服器端加密,請將 "server_side_encryption": true添加到settings JSON中。

    • 如果S3儲存空間在ap-southeast-1地區,請使用"endpoint": "s3.amazonaws.com"替代"region": "ap-southeast-1"

  3. 安裝Amazon Web Services Library boto-2.48.0。

    上文的樣本Python用戶端,需要您在註冊快照存放庫的電腦上安裝boto軟體包的2.x版本。

    # wget https://pypi.python.org/packages/66/e7/fe1db6a5ed53831b53b8a6695a8f134a58833cadb5f2740802bc3730ac15/boto-2.48.0.tar.gz#md5=ce4589dd9c1d7f5d347363223ae1b970 
    # tar zxvf boto-2.48.0.tar.gz
    # cd boto-2.48.0
    # sudo python setup.py install
  4. 執行Python用戶端,註冊快照存放庫。

    # python snapshot.py
  5. 進入對應Amazon OpenSearch Service的Kibana控制台,在Dev Tools頁面的Console中,執行以下命令,查看請求結果。

    GET _snapshot

    查看請求結果

步驟二:建立首次快照並恢複

  1. 在Amazon OpenSearch Service上手動建立快照。

    說明

    以下命令可在Kibana控制台上執行,也可以在Linux或者Mac OSX命令列中使用curl命令來執行。

    • 為在eric-snapshot-repository存放庫中的movies索引,建立名稱為snapshot_movies_1的快照。

      PUT _snapshot/eric-snapshot-repository/snapshot_movies_1
      {
      "indices": "movies"
      }
    • 查看快照狀態。

      GET _snapshot/eric-snapshot-repository/snapshot_movies_1

      查看快照狀態

    • 在Amazon S3控制台中,查看快照檔案。瞎看快照檔案

  2. 從Amazon S3提取快照資料至阿里雲OSS。

    詳細操作方法請參見從Amazon S3上的應用無縫切換至OSS

    資料提取後,在OSS控制台中查看儲存的快照資料。

    OSS快照資料

  3. 還原快照至Elasticsearch執行個體。

    1. 建立快照存放庫。

      進入目標Elasticsearch執行個體的Kibana控制台(登入Kibana控制台),在Dev Tools頁面的Console中,執行如下命令建立一個同名的快照存放庫。

      PUT _snapshot/eric-snapshot-repository
      {
      "type": "oss",
      "settings": {
                  "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",  
                  "access_key_id": "your AccessKeyID",
                  "secret_access_key": "your AccessKeySecret ",
                  "bucket": "eric-oss-aws-es-snapshot-s3",
                  "compress": true
            }
      }
    2. 查看名稱為snapshot_movies_1的快照狀態。

      GET _snapshot/eric-snapshot-repository/snapshot_movies_1

      查看快照

      說明

      請記錄此快照操作的起始時間和結束時間。當您使用阿里雲OssImport遷移工具遷移增量快照資料時,此記錄會被用到。例如:

      • “start_time_in_millis”: 1519786844591

      • “end_time_in_millis”: 1519786846236

  4. 恢複快照。

    POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore
    {
        "indices": "movies"
    }

    執行以下命令,查看movies索引的可用性。

    GET movies/_recovery

    執行成功後,可以看到movies索引中存在三組資料,且與Amazon OpenSearch Service域中的資料相同。查看ES索引資料

步驟三:建立末次快照並恢複

  1. 在Amazon OpenSearch Service的movies索引中插入資料。

    movies索引中已存在三組資料,您還需插入另兩組資料。

    插入另外兩條資料

    使用GET movies/_count命令,可查看索引資料量。

  2. 手動建立另一個快照。

    執行以下命令手動建立快照,詳情請參見上文的在Amazon OpenSearch Service上手動建立快照步驟。

    PUT _snapshot/eric-snapshot-repository/snapshot_movies_2
    {
    "indices": "movies"
    }

    建立成功後,執行以下命令查看快照狀態。

    GET _snapshot/eric-snapshot-repository/snapshot_movies_2

    查看S3儲存空間中列出的檔案。

    查看S3空間檔案

  3. 從Amazon S3提取增量快照資料至阿里雲OSS。

    您可以使用OSSImport工具從Amazon S3遷移資料至阿里雲OSS。目前有兩個快照檔案儲存體在S3儲存空間裡,可以通過修改設定檔local_job.cfg中的isSkipExistFile變數來遷移新的檔案。

    isSkipExistFile表示資料移轉期間是否跳過現有對象,為布爾類型,預設值為false。如果設定為true,則根據sizeLastModifiedTime跳過對象;如果設定為false,則覆蓋現有對象。當jobType設定為audit時,此選項無效。

    遷移工作完成後,您可以看到新的檔案已被遷移至OSS中。

    新檔案遷移到OSS中

  4. 恢複增量快照。

    恢複增量快照詳細步驟請參見上文的步驟二:建立首次快照並恢複章節中的恢複快照步驟。但是首先需要關閉movies索引,然後再恢複快照。快照恢複後可以再次開啟movies索引。

    • 關閉movies索引

      POST /movies/_close
    • 查看movies索引狀態

      GET movies/_stats
    • 恢複增量快照

      POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore
      {
          "indices": "movies"
      }
    • 開啟movies索引

      POST /movies/_open

    恢複快照步驟完成後,可以看到movies索引中文檔數量為5,與Amazon OpenSearch Service域中的文檔數量相同。

    恢複快照結果

總結

您可以通過建立和恢複快照的方法,將Amazon OpenSearch Service中的Elasticsearch索引資料移轉至Elasticsearch索引中。此方案要求先關閉需要遷移的叢集索引,以防止遷移期間的寫入和請求。

相關文檔:

常見問題

Q:阿里雲ES從OSS上做快照恢複索引資料時報錯,為什嗎?

A:可能是因為OSS上快照的檔案名稱為符號,例如檔案名稱為正斜線(/)。

阿里雲ES從OSS上做快照恢複索引資料時,不支援OSS上快照的檔案名稱為符號。解決方案為通過用圖形化管理工具ossbrowser快速入門,將OSS的快照資料移到正常的檔案夾下。