本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
將騰訊云Elasticsearch(以下簡稱ES)數據遷移到阿里云ES,除了可以使用ES快照機制實現數據搬遷外,也可以通過阿里云Logstash實現,本文介紹如何通過阿里云Logstash將索引數據從騰訊云ES遷移至阿里云ES中。
場景說明
本文的操作流程同樣適用于跨賬號、跨地域的阿里云Elasticsearch之間遷移數據的場景。在配置時,將input中的騰訊云Elasticsearch的配置替換為源阿里云Elasticsearch的配置即可。
在遷移過程中,Logstash需要連接公網才能與騰訊云Elasticsearch互通,因此會涉及到Logstash連接公網的相關操作。對于跨賬號、跨地域的阿里云Elasticsearch之間遷移數據的場景,同樣需要配置Logstash與公網連通,因此在此類場景下,您可以參考本文檔的流程。
操作流程
創建阿里云Elasticsearch實例、Logstash實例和騰訊云Elasticsearch實例、開啟阿里云Elasticsearch實例的自動創建索引功能、搭建騰訊云代理服務器。
選擇兼容的騰訊云Elasticsearch實例、阿里云Elasticsearch實例和Logstash實例進行遷移。
通過配置文件管理方式創建并配置Logstash管道,配置時設置input為騰訊云Elasticsearch,output為阿里云Elasticsearch。
說明您也可以使用自建Logstash,需要在服務器上安裝JDK(1.8及以上版本)以及相應版本的Logstash,然后在Logstash的conf下配置YML文件,并啟動服務。
在Kibana中使用
GET /_cat/indices?v
,查看索引是否遷移成功。
準備工作
創建阿里云Elasticsearch實例,并開啟自動創建索引功能。
具體操作步驟請參見創建阿里云Elasticsearch實例和快速訪問與配置。
創建阿里云Logstash實例。
具體操作步驟請參見創建阿里云Logstash實例。
由于阿里云Logstash實例部署在專有網絡VPC(Virtual Private Cloud)下,但在遷移過程中,Logstash需要連接公網才能與騰訊云Elasticsearch互通,因此需要通過配置NAT網關實現與公網連通,詳情請參見配置NAT公網數據傳輸。
說明對于自建的Logstash,需要購買與阿里云Elasticsearch在同一VPC下的ECS實例(已符合條件的ECS不需要重復購買,需要綁定彈性公網IP)。
創建騰訊云Elasticsearch實例,并搭建騰訊云代理服務器。
由于騰訊云Elasticsearch不支持通過公網直接訪問,因此需要準備cvm服務器搭建nginx代理,詳情請參見通過外網訪問騰訊云Elasticsearch集群。
步驟一:選取遷移方案
由于騰訊云Elasticsearch版本與阿里云Elasticsearch版本不一致,因此需要先選擇兼容的版本進行遷移,本文支持的版本方案如下(其他方案不保證兼容):
騰訊云Elasticsearch | 阿里云Elasticsearch |
騰訊云Elasticsearch 5.6.4 | 遷移至阿里云Elasticsearch的版本要求:自建Logstash 5.6.x、阿里云Elasticsearch 5.5.6。 說明
|
騰訊云Elasticsearch 6.4.3 | 遷移至阿里云Elasticsearch的版本有如下兩種選擇:
說明
|
建議您在大版本內進行數據遷移。關于Logstash版本選取詳情,請參見Support Matrix。
如果您使用的是其他方案,可參見產品兼容性判斷是否存在兼容性問題。如果存在,可升級實例版本或新購實例。
步驟二:創建并配置Logstash管道
- 進入阿里云Elasticsearch控制臺的Logstash頁面。
- 進入目標實例。
- 在頂部菜單欄處,選擇地域。
- 在Logstash實例中單擊目標實例ID。
在左側導航欄,單擊管道管理。
單擊創建管道。
在創建管道任務頁面,輸入管道ID并配置管道。
本文使用的管道配置如下。
input { elasticsearch { hosts => "http://xxxxxxxxx:9200" user => "elastic" index => "*" password => "xxxxxx" docinfo => true } } output { elasticsearch { hosts => "http://xxxxxxx.elasticsearch.aliyuncs.com:9200" user => "elastic" password => "xxxxxx" index => "%{[@metadata][_index]}" document_type => "%{[@metadata][_type]}" document_id => "%{[@metadata][_id]}" } }
參數
說明
hosts
Elasticsearch服務的訪問地址。input中為
http://<騰訊云代理服務的公網地址>:<端口>
;output中為http://<阿里云Elasticsearch實例ID>.elasticsearch.aliyuncs.com:9200
。user
訪問Elasticsearch服務的用戶名,默認為elastic。
password
對應用戶的密碼。對于阿里云Elasticsearch,elastic用戶的密碼在創建實例時設定,如果忘記可進行重置,重置密碼的注意事項和操作步驟請參見重置實例訪問密碼。
index
input中為待遷移的索引名,設置為*表示同步全部索引;output中為遷移后的索引名,設置為%{[@metadata][_index]}表示匹配元數據中的index,即遷移后的索引名與源索引名相同。
document_type
遷移后索引的類型。設置為%{[@metadata][_type]}表示匹配元數據中的type,即遷移后索引的類型與源索引的類型相同。
document_id
遷移后文檔的ID。設置為%{[@metadata][_id]}表示匹配元數據中的id,即遷移后文檔的ID與源文檔的ID相同。
docinfo
設置為true,Logstash將會提取Elasticsearch文檔的元信息,例如index、type和id。
更多Config配置詳情請參見Logstash配置文件說明。
以上配置將源Elasticsearch集群的所有索引同步到目標集群中,您也可以設置只同步指定的索引,input配置如下。
input { elasticsearch { hosts => "http://xxxxxxxx:9200" user => "elastic" index => "alicloudtest" password => "xxxxxxx" query => '{ "query":{ "query_string": { "query": "*" } } }' docinfo => true }
Elasticsearch input插件可以根據配置的查詢語句,從Elasticsearch集群讀取文檔數據,適用于批量導入測試日志等操作。默認讀取完數據后,同步動作會自動關閉,而阿里云Logstash需保證進程一直運行,關閉后將會重新啟動進程,導致某些單一任務場景(如logstash input es)存在重復寫數據的情況。設置長時間范圍的定時任務可繞過寫重復的情況,如每年3月5日13點20分觸發任務執行,執行完第一次任務后停止管道運行,可避免重復寫情況。可以通過cron語法配合schedule參數實現,詳情請參見Logstash官網Scheduling介紹。
例如,設置3月5日13點20分執行任務:
schedule => "20 13 5 3 *"
單擊下一步,配置管道參數。
參數
說明
管道工作線程
并行執行管道的Filter和Output的工作線程數量。當事件出現積壓或CPU未飽和時,請考慮增大線程數,更好地使用CPU處理能力。默認值:實例的CPU核數。
管道批大小
單個工作線程在嘗試執行Filter和Output前,可以從Input收集的最大事件數目。較大的管道批大小可能會帶來較大的內存開銷。您可以設置LS_HEAP_SIZE變量,來增大JVM堆大小,從而有效使用該值。默認值:125。
管道批延遲
創建管道事件批時,將過小的批分派給管道工作線程之前,要等候每個事件的時長,單位為毫秒。默認值:50ms。
隊列類型
用于事件緩沖的內部排隊模型。可選值:
MEMORY:默認值。基于內存的傳統隊列。
PERSISTED:基于磁盤的ACKed隊列(持久隊列)。
隊列最大字節數
請確保該值小于您的磁盤總容量。默認值:1024 MB。
隊列檢查點寫入數
啟用持久性隊列時,在強制執行檢查點之前已寫入事件的最大數目。設置為0,表示無限制。默認值:1024。
警告配置完成后,需要保存并部署才能生效。保存并部署操作會觸發實例重啟,請在不影響業務的前提下,繼續執行以下步驟。
單擊保存或者保存并部署。
保存:將管道信息保存在Logstash里并觸發實例變更,配置不會生效。保存后,系統會返回管道管理頁面。可在管道列表區域,單擊操作列下的立即部署,觸發實例重啟,使配置生效。
保存并部署:保存并且部署后,會觸發實例重啟,使配置生效。
步驟三:驗證結果
登錄目標阿里云Elasticsearch實例的Kibana控制臺。
具體步驟請參見登錄Kibana控制臺。
在左側導航欄,單擊Dev Tools(開發工具)。
在Console中執行
GET /_cat/indices?v
命令,查詢索引是否遷移成功。
相關文檔
使用ES快照機制實現將騰訊云ES數據遷移到阿里云ES,請參見將Amazon OpenSearch Service中的Elasticsearch索引遷移至阿里云。