本文介紹如何將Amazon OpenSearch Service中的Elasticsearch(以下簡稱ES)索引數據遷移到阿里云Elasticsearch中。
方案說明
該方案不局限云服務廠商,均依賴ES快照機制實現。例如,使用阿里云在線遷移(遷移實施)將存儲在Amazon OpenSearch Service或騰訊云COS的ES快照數據遷移到阿里云OSS,參考阿里云ES快照恢復OSS倉庫快照數據。具體操作,請參見手動備份與恢復。
ES快照遷移僅支持低版本向高版本或同版本遷移恢復,詳見快照兼容性。
背景信息
本次Elasticsearch索引遷移方案的參考架構如下。
相關概念
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基礎上提供企業級權限管控、安全監控告警、自動報表生成等功能。本文涉及的操作主要在阿里云Elasticsearch服務的中國站上進行。
快照和恢復(Snapshot and Restore):您可以使用快照和恢復功能,在遠程存儲庫(如共享文件系統、S3或HDFS)中,創建各個索引或整個集群的快照。創建后的快照可以被恢復到對應版本的Elasticsearch中。
在5.x中創建的索引快照可以恢復到6.x。
在2.x中創建的索引快照可以恢復到5.x。
在1.x中創建的索引快照可以恢復到2.x。
解決方案概述
您可以通過以下步驟來遷移索引數據:
創建基線索引。
創建一個快照存儲庫,并將其與Amazon Simple Storage Service (Amazon S3)存儲空間相關聯。
為要遷移的索引創建第一個完整的快照。
該快照會自動存儲在步驟一中創建的Amazon S3存儲空間中。
在阿里云側創建一個對象存儲服務OSS(Object Storage Service)存儲空間,并將其注冊到阿里云Elasticsearch實例的快照存儲庫中。
使用OSS Import工具將Amazon S3存儲空間中的數據提取到阿里云OSS存儲空間中。
將此完整快照恢復到阿里云Elasticsearch實例。
定期處理增量快照 。
重復以上步驟處理增量快照并進行恢復。
確定最終快照,進行服務切換。
停止可能會修改索引數據的服務。
創建Amazon OpenSearch Service實例的最終增量快照。
將最終增量快照遷移至OSS,然后恢復到阿里云Elasticsearch實例中。
進行服務切換,在阿里云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授權。在給該角色添加信任關系時,必須在 |
創建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/*" ] } ] }
將策略內容復制到編輯策略區域。
檢查策略是否正確。
為IAM角色添加IAM策略。
步驟一:注冊手動快照存儲庫
您必須通過Amazon OpenSearch Service注冊快照存儲庫后,才能創建手動索引快照。創建手動索引快照前,需要先為IAM角色的信任關系中指定的用戶或角色簽發您的AWS請求,詳情請參見在AWS中創建手動快照的前提條件。
由于curl命令不支持AWS請求簽名,因此不能使用curl命令注冊快照存儲庫。請使用示例Python客戶端注冊您的快照存儲庫。
下載示例Python客戶端文件。
修改示例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"
。
安裝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
執行Python客戶端,注冊快照存儲庫。
# python snapshot.py
進入對應Amazon OpenSearch Service的Kibana控制臺,在Dev Tools頁面的Console中,執行以下命令,查看請求結果。
GET _snapshot
步驟二:創建首次快照并恢復
在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控制臺中,查看快照文件。
從Amazon S3提取快照數據至阿里云OSS。
詳細操作方法請參見從Amazon S3上的應用無縫切換至OSS。
數據提取后,在OSS控制臺中查看存儲的快照數據。
還原快照至阿里云Elasticsearch實例。
創建快照存儲庫。
進入目標阿里云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 } }
查看名稱為
snapshot_movies_1
的快照狀態。GET _snapshot/eric-snapshot-repository/snapshot_movies_1
說明請記錄此快照操作的起始時間和結束時間。當您使用阿里云OssImport遷移工具遷移增量快照數據時,此記錄會被用到。例如:
“start_time_in_millis”: 1519786844591
“end_time_in_millis”: 1519786846236
恢復快照。
POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore { "indices": "movies" }
執行以下命令,查看
movies
索引的可用性。GET movies/_recovery
執行成功后,可以看到
movies
索引中存在三組數據,且與Amazon OpenSearch Service域中的數據相同。
步驟三:創建末次快照并恢復
在Amazon OpenSearch Service的
movies
索引中插入數據。movies
索引中已存在三組數據,您還需插入另兩組數據。使用
GET movies/_count
命令,可查看索引數據量。手動創建另一個快照。
執行以下命令手動創建快照,詳情請參見上文的在Amazon OpenSearch Service上手動創建快照步驟。
PUT _snapshot/eric-snapshot-repository/snapshot_movies_2 { "indices": "movies" }
創建成功后,執行以下命令查看快照狀態。
GET _snapshot/eric-snapshot-repository/snapshot_movies_2
查看S3存儲空間中列出的文件。
從Amazon S3提取增量快照數據至阿里云OSS。
您可以使用OSSImport工具從Amazon S3遷移數據至阿里云OSS。目前有兩個快照文件存儲在S3存儲空間里,可以通過修改配置文件local_job.cfg中的
isSkipExistFile
變量來遷移新的文件。isSkipExistFile
表示數據遷移期間是否跳過現有對象,為布爾類型,默認值為false。如果設置為true,則根據size
和LastModifiedTime
跳過對象;如果設置為false,則覆蓋現有對象。當jobType
設置為audit
時,此選項無效。遷移工作完成后,您可以看到新的文件已被遷移至OSS中。
恢復增量快照。
恢復增量快照詳細步驟請參見上文的步驟二:創建首次快照并恢復章節中的恢復快照步驟。但是首先需要關閉
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的快照數據移到正常的文件夾下。