本文主要介紹當您的阿里云Elasticsearch創建于新網絡架構下時,如何通過實例私網連接打通網絡后,使用reindex方式將ECS上自建的Elasticsearch中的數據遷移至阿里云Elasticsearch中,包括創建索引和遷移數據。
前提條件
自建Elasticsearch需要滿足以下條件:
所在的ECS的網絡類型必須是專有網絡(不支持Classiclink方式打通的ECS),且必須與阿里云Elasticsearch在同一個專有網絡下。
所在的ECS的安全組不能限制阿里云Elasticsearch實例的各節點IP(Kibana控制臺可查看各節點的IP),且要開啟9200端口。
已經與阿里云Elasticsearch實例連通。可在執行腳本的機器上,使用
curl -XGET http://<host>:9200
驗證。說明您可以通過任意一臺機器執行文檔中的腳本,前提是該機器可以同時訪問自建Elasticsearch和阿里云Elasticsearch集群的9200端口。
準備自建Elasticsearch索引數據,本文以下圖中的source索引作為需要遷移的索引為例。
阿里云Elasticsearch需要滿足以下條件:
提前開啟自動創建索引功能或者在阿里云Elasticsearch上創建好索引
mappings
、settings
。未做白名單限制。
使用限制
2020年10月阿里云ES進行了網絡架構調整,新網絡架構下的集群跨集群reindex需依賴Privatelink打通阿里云ES集群私網。您可以參見下表,依據您的業務場景選擇解決方案進行處理。
2020年10月之前創建的ES集群屬于舊網絡架構,2020年10月及之后創建的ES集群屬于新網絡架構。
使用場景 | ES集群所處網絡架構 | 解決方案 |
阿里云ES集群間的數據遷移 | 兩個ES集群均創建于舊網絡架構下。 | reindex方式:阿里云ES間跨集群reindex。 |
其中一個ES集群創建于新網絡架構下。 說明 另一個ES集群可以創建于新網絡架構,也可以創建于舊網絡架構。 |
| |
將ECS上自建的ES集群中的數據遷移至阿里云ES集群中 | 阿里云ES集群創建于舊網絡架構下。 | reindex方式:通過reindex將自建ES數據遷移至阿里云。 |
阿里云ES集群創建于新網絡架構下。 | reindex方式:通過實例私網打通將自建Elasticsearch數據遷移至阿里云。 |
操作流程
目前,僅支持PrivateLink功能的負載均衡實例作為終端節點服務的服務資源。通過PrivateLink實現在VPC間私網訪問服務前,您需要創建支持PrivateLink功能的負載均衡實例,并配置相關監聽信息。
終端節點服務是可以被其他VPC通過創建終端節點建立私網連接的服務,待負載均衡實例配置完成后,您需要創建終端節點服務。
在Elasticsearch控制臺關聯阿里云Elasticsearch實例與步驟二中創建的終端節點服務。
目標實例與終端節點服務關聯成功后,即可獲取終端節點域名,用于配置reindex白名單。
在Elasticsearch控制臺將步驟四中獲取的域名配置到目標實例的reindex白名單中,進行授權。
完成以上步驟后,即完成源實例與目標實例間的網絡互通,可以進行數據遷移。
步驟一:配置支持PrivateLink功能的負載均衡實例
創建負載均衡實例。
確保負載均衡實例的地域和后端添加的云服務器ECS的地域相同。詳情請參見創建支持PrivateLink功能的負載均衡實例。
配置協議&監聽。選擇負載均衡協議為TCP,并配置端口號為9200。
詳情請參見配置協議&監聽。
配置后端服務器,添加自建ES所在的ECS服務器,并配置端口號為9200。
詳情請參見配置后端服務器。
單擊下一步,按需配置健康檢查,本文以默認值為例。
配置完成后,單擊提交,單擊知道了,根據頁面提示返回實例管理頁面,查看后端ECS實例的健康檢查狀態。
當后端ECS實例的健康檢查狀態為正常時,表示后端ECS實例可以正常處理負載均衡轉發的請求了。
步驟二:創建終端節點服務
在頂部菜單欄處,選擇要創建終端節點服務的地域。
本文以華東1(杭州)為例。
單擊創建終端節點服務,在服務創建頁面,按需選擇創建終端節點服務配置。
具體操作和詳細說明請參見創建和管理終端節點服務。本文使用的配置說明如下,未提及的參數按需選擇或保持默認。
參數
說明
選擇服務資源
選擇要承載流量的可用區,然后選擇與終端節點服務關聯的負載均衡實例。
負載均衡實例作為服務資源與終端節點服務關聯,關聯的負載均衡實例將接受來自您服務的用戶的網絡訪問,終端節點服務的可用區與服務資源所在的主可用區一致。
可以作為服務資源的負載均衡實例必須滿足以下兩個條件:
網絡類型為專有網絡。
功能特性為支持PrivateLink。
自動接受終端節點連接
選擇是否自動接受終端節點的連接請求,建議選擇是,取值含義如下:
是:終端節點服務將自動接受終端節點的連接請求,通過終端節點能夠訪問服務。
否:終端節點連接將處于已斷開狀態,等待服務管理員進行處理:
如果服務管理員接受該終端節點對應的終端節點服務連接,通過終端節點將能夠訪問服務。
如果服務管理員拒絕該終端節點對應的終端節點服務連接,通過終端節點無法訪問服務。
是否支持同可用區優先
選擇是否支持同可用區優先,建議選擇是。
單擊確定創建。
步驟三:配置阿里云Elasticsearch私網互通
- 登錄阿里云Elasticsearch控制臺。
- 在左側導航欄,單擊Elasticsearch實例。
- 進入目標實例。
- 在頂部菜單欄處,選擇資源組和地域。
- 在Elasticsearch實例中單擊目標實例ID。
在左側導航欄,選擇 。
在集群網絡設置區域,單擊配置實例私網連接右側的修改。
在配置實例私網連接面板,單擊+添加私網連接,選擇步驟二中創建的終端節點服務和目標訪問可用區,并選中系統提示信息。
單擊確認,終端節點服務主動連接終端節點,連接成功后會顯示已連接。
步驟四:獲取終端節點域名
執行完以上步驟后,需要獲取終端節點域名用于配置reindex白名單。
在配置實例私網連接面板中,單擊目標終端節點ID。
在終端節點連接頁簽,單擊目標終端節點ID前的圖標,即可查看終端節點對應的域名。
步驟五:配置reindex白名單
該操作會觸發集群重啟,建議在業務低峰期進行。
- 登錄阿里云Elasticsearch控制臺。
- 在左側導航欄,單擊Elasticsearch實例。
- 進入目標實例。
- 在頂部菜單欄處,選擇資源組和地域。
- 在Elasticsearch實例中單擊目標實例ID。
在左側導航欄,選擇 。
在YML文件配置區域,單擊右側的修改配置。
在YML文件配置面板,修改其他Configure配置,將從步驟四中獲取的域名配置至此處。
代碼示例:
reindex.remote.whitelist: 'ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200'
單擊確定。
步驟六:數據遷移
在Kibana控制臺的Dev Tools中執行如下命令,進行數據遷移。
說明登錄Kibana控制臺的具體步驟請參見登錄Kibana控制臺。
POST /_reindex?pretty { "source": { "remote": { "host": "http://ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200", "username": "elastic", "password": "Elastic@123***" }, "index": "source", "size": 5000 }, "dest": { "index": "dest" } }
更多信息說明請參見reindex api。
可選:在數據遷移過程中,如果您需要獲取所有正在運行的reindex請求狀態,請執行以下命令。
GET _tasks?detailed=true&actions=*reindex
查看數據遷移結果。
待數據遷移完成后,您可以通過執行以下命令查看數據遷移結果。
GET _cat/indices?
如果目標端索引test中顯示健康狀態正常并且數據大小正常,則證明數據遷移成功。
常見問題
問題:單索引數據量比較大,數據同步速度比較慢時,如何處理?
解決方法:
由于reindex功能的底層實現原理是通過scroll方式實現的,所以您可以適當調大scroll size的大小或配置scroll slice,借助scroll并行化機制提升效率。詳情請參見reindex api。
如果源端數據量較大,建議采用OSS快照方式。詳情請參見通過OSS將自建Elasticsearch數據遷移至阿里云。
如果單索引數據量比較大,可以在遷移前將目標索引的副本數設置為0,刷新時間設置為-1,以加快數據同步速度。待數據遷移完成后,再修改回來。
// 遷移索引數據前可以先將索引副本數設為0,不刷新,用于加快數據遷移速度。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 0, "refresh_interval" : "-1" }' // 索引數據遷移完成后,可以重置索引副本數為1,刷新時間1s(1s是默認值)。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 1, "refresh_interval" : "1s" }'