當您需要將自建Elasticsearch數據遷移至阿里云Elasticsearch時,可以使用OSS快照的方式進行遷移。即使用Elasticsearch的snapshot API,創建自建Elasticsearch數據的快照并存儲到OSS中,然后從OSS將快照數據恢復到阿里云Elasticsearch中。本文介紹具體的實現方法。
背景信息
通過OSS將自建Elasticsearch數據遷移至阿里云Elasticsearch,適用于自建Elasticsearch數據量比較大的場景,簡單流程如下。
操作流程
部署自建Elasticsearch集群、創建OSS Bucket、創建阿里云Elasticsearch集群。
步驟二:安裝elasticsearch-repository-oss插件
在自建Elasticsearch集群各節點中安裝elasticsearch-repository-oss插件,插件安裝后才可在自建Elasticsearch中創建OSS倉庫。
使用snapshot API在自建Elasticsearch集群中創建快照備份倉庫。
為需要遷移的索引創建快照,并將快照備份到已創建的倉庫中。
在阿里云Elasticsearch的Kibana控制臺中,使用snapshot API創建一個與自建Elasticsearch集群相同的快照備份倉庫。
將倉庫中已備份的自建Elasticsearch集群的快照恢復到阿里云Elasticsearch集群中,完成數據遷移。
快照恢復后,查看恢復的索引和索引數據。
步驟一:環境準備
準備自建Elasticsearch集群。
如果您還沒有自建Elasticsearch集群,建議您使用阿里云ECS進行搭建,具體操作步驟請參見安裝并運行Elasticsearch。
說明建議您使用同VPC下的阿里云ECS搭建自建Elasticsearch集群,通過自建服務器搭建集群可能存在網絡不通的問題。
本文以單節點集群為例進行演示,版本為6.7.0。實際生產中您可以購買多個相同專有網絡VPC(Virtual Private Cloud)的ECS實例搭建多節點Elasticsearch集群,購買ECS的具體步驟請參見自定義購買實例。
開通OSS服務,并創建與部署自建Elasticsearch集群的ECS實例相同地域的Bucket。
創建目標阿里云Elasticsearch實例,所選地域與您創建的Bucket相同。
具體操作步驟請參見創建阿里云Elasticsearch實例。
步驟二:安裝elasticsearch-repository-oss插件
連接自建Elasticsearch集群所在的ECS。
具體操作請參見通過密碼或密鑰認證登錄Linux實例。
說明本文檔以普通用戶權限為例。
下載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插件,可參見常見問題。
將安裝包解壓到自建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
啟動自建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 | 是否壓縮:
|
創建成功后,預期返回"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集群中創建倉庫中創建的倉庫名稱;index1和index2為您需要備份的索引名稱。快照創建成功后,預期返回"accepted" : true
。
快照創建過程中,您可以通過GET /_snapshot/<yourBackupName>/<yourSnapshotName>/_status
命令查看指定快照的詳細信息。當返回結果中的state為SUCCESS時,表示快照已完成。
步驟五:在阿里云Elasticsearch上創建相同倉庫
- 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺。說明 本文以阿里云Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
- 在左側導航欄,單擊Dev Tools。
在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集群的版本較多,各版本編譯存在差異,因此在使用elasticsearch-repository-oss插件時,需要您結合對應Elasticsearch的版本進行編譯調試。例如自建Elasticsearch 7.6.2集群,要求JDK版本大于1.8及以上,編譯調試后對應的插件為elasticsearch-repository-oss-7.6.2。