天天看點

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

本頁目錄

  • ES索引遷移方案介紹
  • 前提條件
  • 注冊手動快照存儲庫
  • 首次快照和恢複
  • 末次快照和恢複
  • 總結

點選

訂閱《阿裡雲Elasticsearch技術交流期刊》

,擷取最新Elasticsearch技術資訊! **

在國内的雲服務市場,阿裡雲具有易用、便捷、穩定、以及低門檻的特性,并深受廣大開發者歡迎,本次實踐是針對希望将Elasticsearch索引從AWS遷移至阿裡雲的客戶所準備,Elasticsearch索引遷移方案參考架構圖如下:

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

概念相關

  • Elasticsearch:一個分布式的RESTful風格的搜尋與分析引擎,能夠解決不斷湧現出的各種用例。作為Elastic Stack的核心,Elasticsearch可以集中存儲您的資料,幫助您發現意料之中與意料之外的情況。
  • Kibana:您可以使用Kibana對您的Elasticsearch資料進行可視化并導航彈性堆棧。
  • 亞馬遜Elasticsearch服務(Amazon Elasticsearch Service): 一項完全托管的服務,可以提供各種易于使用的Elasticsearch API 和實時分析功能,還可以實作生産工作負載需要的可用性、可擴充性和安全性。您可以使用AmazonElasticsearch Service輕松部署、保護、操作和擴充Elasticsearch,以便進行日志分析、全文搜尋和應用程式監控等工作。
  • 阿裡雲Elasticsearch服務(Alibaba Elasticsearch Service): 該服務在國際站還未上線,本文涉及的操作主要在阿裡雲Elasticsearch服務中國站上進行。
  • 快照和恢複(Snapshotand Restore):您可以使用快照和恢複功能将各個索引或整個叢集的快照建立到遠端存儲庫(如共享檔案系統,S3或HDFS)中。這些快照可以相對快速恢複,是以非常适合備份。但這些快照隻能恢複到可以讀取索引的Elasticsearch版本:
  1. 在5.x中建立的索引快照可以恢複到6.x。
  2. 在2.x中建立的索引快照可以恢複到5.x。
  3. 在1.x中建立的索引快照可以恢複到2.x。
說明:

在1.x中建立的索引快照不能恢複到5.x或6.x。在2.x中建立的索引快照也不能恢複到6.x。快照是增量的,可以包含在多個ES版本中建立的索引。如果一個快照中的索引是在不相容的ES版本中建立的,則該快照不能恢複。*

解決方案概述

你可以通過以下步驟來遷移Elasticsearch索引

1.建立基線索引

1.1、建立一個快照存儲庫

1.2、為要遷移的索引建立第一個完整的快照。該快照會自動存儲在步驟一中建立的AWSS3存儲空間中。

1.3、在阿裡雲側建立一個OSS存儲空間,并将其注冊到阿裡雲ES執行個體的快照存儲庫中。

1.4、使用OSSImport工具AWS S3存儲空間中的資料提取到阿裡雲OSS存儲空間中。

1.5、将此完整快照恢複到阿裡雲ES執行個體。

2.定期處理增量快照

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

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

3.1、停止可能會修改索引資料的服務。

3.2、建立AWS ES執行個體的最終增量快照。

3.3、将最終增量快照遷移并恢複到阿裡雲ES執行個體。

3.4、進行服務切換,檢視阿裡雲ES執行個體。

Elasticsearch服務

  • AWS ES的版本号必須為5.5.2,區域為新加坡。
  • 阿裡雲ES的版本号必須為5.5.3,區域為杭州。
  • 示例的索引名稱為movies。

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

  • Amazon ES每天會自動建立一個域中主要索引分片的快照,并将這些快照存儲在預配置的AmazonS3存儲空間中。這些快照會保留14天,您無需額外付費。此外,您可以使用這些快照來恢複域。
  • 但是您不能使用自動快照遷移到新域。自動快照隻能從指定的域中讀取。如果要遷移,您必須使用存儲在自己的存儲庫(S3存儲空間)中的手動快照。手動快照将收取标準S3費用。
  • 您需要使用IAM和Amazon S3才能手動建立和恢複索引快照。建立快照之前,請確定您已滿足以下條件。
描述
建立S3存儲空間 為您的 Amazon ES域存儲手動快照。
建立IAM角色 為Amazon Elasticsearch服務授權。在給該角色添加信任關系時,須在Principal語句中指定Amazon Elasticsearch 服務。使用Amazon ES注冊您的快照存儲庫時也需要該IAM角色。隻有具有該角色通路權限的IAM使用者才可以注冊快照存儲庫。
建立IAM政策 指定Amazon S3可以對S3存儲空間執行的操作。該政策須添加給為Amazon Elasticsearch 服務授權的IAM角色。您需要在該政策的Resource語句中指定S3存儲空間。
  • 您需要一個S3存儲空間來存儲手動快照,并記下其Amazon資源名稱(ARN)。該ARN在以下場景中會用到:

1.為IAM角色添加的IAM政策中的Resource語句。

2.用于注冊快照存儲庫的Python用戶端。

S3存儲空間的ARN示例:

arn:aws:s3:::eric-es-index-backups

  • 確定您已建立一個IAM角色,且在其信任關系中的Service語句中指定該角色的服務類型為Amazon Elasticsearch服務(es.amazonaws.com),如下所示:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "es.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}           

您可以在AWS IAM控制台檢視信任關系的詳細資訊。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲
【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

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

  • 您需要将IAM政策添加給IAM角色。該政策指定用于存儲Amazon ES域的手動快照的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/*"
            ]
        }
    ]
}           

将政策内容複制到編輯政策區域:

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

您可以通過檢視Policies > Summary來檢查政策是否正确。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

為IAM角色添加IAM政策

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

您必須通過亞馬遜Elasticsearch服務(Amazon Elasticsearch Service)注冊快照存儲庫,然後才能拍攝手動索引快照。此一次性操作需要為IAM角色的信任關系中指定的使用者或角色中的一位使用憑證簽發您的AWS請求,如上文在AWS中建立手動快照的前提條件中所述。

不能使用curl執行此操作,因為它不支援AWS請求簽名。請改用

示例Python用戶端

注冊您的快照存儲庫。

1.修改示例Python用戶端

下載下傳

檔案,然後修改檔案中标黃的值,填入實際比對的值。完成修改後,複制示例Python用戶端檔案中的内容至Python檔案中,并命名為snapshot.py。

示例Python用戶端:

變量名
地域 您建立快照存儲庫所在的AWS地域。
主機 您Amazon ES域名的通路位址。
aws_access_key_id IAM憑證
aws_secret_access_key
路徑 快照存儲庫的名字
data:bucket;region;role_arn 必須包含您在上述在AWS中建立手動快照的前提條件中為IAM角色建立的S3存儲空間的名字和ARN。要為快照存儲庫啟用使用S3托管密鑰的伺服器端加密,請将

"server_side_encryption":true

添加到settingsJSON - imporant如果S3存儲空間在地域us-east-1,您需要使用

"endpoint":"s3.amazonaws.com"

替代

"region":"us-east-1"

2.安裝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
# python setup.py install           

3.執行Python用戶端以注冊快照存儲庫

# pyth
on snapshot.py           

注冊快照存儲庫通過Kibana > Dev Tools檢視請求結果:

GET _snapshot

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

首次快照恢複

1.在AWS ES上手動拍攝快照。

以下指令均可通過Kibana > Dev Tools執行,也可以從Linux或者Mac OSX指令行中使用curl來執行。

  • 僅為在eric-snapshot-repository存儲庫中的movies索引拍攝名為snapshot_movies_1的快照。
PUT _snapshot/eric-snapshot-repository/snapshot_movies_1
{
"indexes": "movies"
}           
  • 檢視快照狀态
GET _snapshot/ eric-snapshot-repository/snapshot_movies_1           
【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲
  • 檢視AWS S3控制台中的快照檔案。
    【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

2.從AWS S3提取快照資料至阿裡雲OSS

此步操作,您需要從AWS S3存儲空間提取快照資料至阿裡雲的對象存儲OSS(Object Storage Service)中。具體詳情,請參見

從AWS S3上的應用無縫切換至OSS

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

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

3.還原快照至阿裡雲ES執行個體

建立快照存儲庫

在Kibana > Dev Tools中執行以下請求來建立一個同名的快照存儲庫。按照參數說明填下實際數值。

PUT _snapshot/eric-snapshot-repository
{
"type": "oss",
"settings": {
            "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",  
            "access_key_id": "Put your AccessKey id here.",
            "secret_access_key": "Put your secret AccessKey here.",
            "bucket": "eric-oss-aws-es-snapshot-s3",
            "compress": true
      }
}
           
【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

建立好快照存儲庫後,檢視在AWS ES手動快照步驟中部署名為snapshot_movies_1的快照狀态。

GET _snapshot/eric-snapshot-repository/snapshot_movies_1           
說明 請記錄此快照操作的起始時間和結束時間:當您用阿裡雲OssImport遷移工具遷移增量快照資料時,此記錄會被用到。如:

“start_time_in_millis”: 1519786844591

“end_time_in_millis”: 1519786846236

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

4.恢複快照

在 Kibana > Dev Tools中執行以下請求。

POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore
{
    "indexes": "movies"
}
GET movies/_recovery
           
【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

在Kibana > Dev Tools上檢視movies索引的可用性。您可以看到在movies索引中存在三條記錄,即為AWS ES執行個體中的記錄數。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

1.AWS ES movies索引中建立執行個體資料

上步中,在movies索引中已存在三條記錄,您還需插入另兩條記錄。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

使用請求 GET movies/_count,檢視引數。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

2.手動拍攝另一個快照

請參見上述的在AWS ES上手動拍攝快照步驟,并檢視快照狀态。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

檢視S3存儲空間中列出的檔案。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

如果您檢視索引檔案夾,也可找出不同。

3.從AWS S3提取增量快照資料至阿裡雲OSS

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

已歸檔 含義
isSkipExistFile 布爾值,資料遷移期間是否跳過現有對象 如果設定為true,則根據size和LastModifiedTime跳過對象。如果設定為false,則覆寫現有對象。 預設值為false。 當jobType設定為audit時,此選項無效。

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

阿裡雲的OSS存儲空間:

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

AWS S3的存儲空間:

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

4.恢複增量快照

可以參照恢複快照中的步驟恢複增量快照。但是首先需要關閉movies索引,然後再恢複快照。快照恢複後可以再次打開movies索引。

POST /movies/_close
GET movies/_stats
POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore
{
    "indexes": "movies"
}
POST /movies/_open
           

恢複快照步驟完成後,可以看到movies索引中文檔數5和AWS ES執行個體中的數量相同。

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

可以通過快照和恢複的方法将AWS Elasticsearch的服務資料遷移至阿裡雲的Elasticsearch服務中。

此方案要求首先關閉AWS ES執行個體以防止遷移期間的寫入和請求。

參考資料:

https://www.elastic.co/products/elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-snapshots.html https://github.com/zhichen/elasticsearch-repository-oss/wiki/OSS%E5%BF%AB%E7%85%A7%E8%BF%81%E7%A7%BB?spm=a2c4g.11186623.2.3.2acd85 說明及配置

掃碼加入我們

加入《Elasticsearch中文技術社群》,與更多開發者探讨交流

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

訂閱《阿裡雲Elasticsearch技術交流期刊》每月定期為大家推送相關幹貨

【最佳實踐】如何從AWS中的Elasticsearch索引平滑遷移至阿裡雲

2019年阿裡雲雲栖大會上,Elasticsearch背後的商業公司Elastic與阿裡雲Elasticsearch确定戰略合作更新,在100%相容開源的基礎上,完成了ELK的完整生态雲上閉環,歡迎開通使用。

點選了解更多産品資訊