基于reindex實(shí)現(xiàn)低版本多type數(shù)據(jù)遷移
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。
本文介紹基于reindex將阿里云Elasticsearch 5.x實(shí)例中的多type數(shù)據(jù),遷移到高版本Elasticsearch 6.x實(shí)例的單type索引中。
注意事項(xiàng)
2020年10月阿里云ES進(jìn)行了網(wǎng)絡(luò)架構(gòu)調(diào)整,新網(wǎng)絡(luò)架構(gòu)下的集群跨集群reindex需依賴Privatelink打通阿里云ES集群私網(wǎng)。您可以參見下表,依據(jù)您的業(yè)務(wù)場景選擇解決方案進(jìn)行處理。
2020年10月之前創(chuàng)建的ES集群屬于舊網(wǎng)絡(luò)架構(gòu),2020年10月及之后創(chuàng)建的ES集群屬于新網(wǎng)絡(luò)架構(gòu)。
使用場景 | ES集群所處網(wǎng)絡(luò)架構(gòu) | 解決方案 |
阿里云ES集群間的數(shù)據(jù)遷移 | 兩個ES集群均創(chuàng)建于舊網(wǎng)絡(luò)架構(gòu)下。 | reindex方式:阿里云ES間跨集群reindex。 |
其中一個ES集群創(chuàng)建于新網(wǎng)絡(luò)架構(gòu)下。 說明 另一個ES集群可以創(chuàng)建于新網(wǎng)絡(luò)架構(gòu),也可以創(chuàng)建于舊網(wǎng)絡(luò)架構(gòu)。 | ||
將ECS上自建的ES集群中的數(shù)據(jù)遷移至阿里云ES集群中 | 阿里云ES集群創(chuàng)建于舊網(wǎng)絡(luò)架構(gòu)下。 | reindex方式:通過reindex將自建ES數(shù)據(jù)遷移至阿里云。 |
阿里云ES集群創(chuàng)建于新網(wǎng)絡(luò)架構(gòu)下。 | reindex方式:通過實(shí)例私網(wǎng)打通將自建Elasticsearch數(shù)據(jù)遷移至阿里云。 |
操作流程
準(zhǔn)備阿里云Elasticsearch和Logstash實(shí)例,確保兩者在同一專有網(wǎng)絡(luò)下。
阿里云Elasticsearch實(shí)例:存儲索引數(shù)據(jù)。
阿里云Logstash實(shí)例:通過管道配置功能,遷移處理后的數(shù)據(jù)。
通過reindex,將阿里云Elasticsearch 5.x實(shí)例中的多type索引轉(zhuǎn)換為單type索引。您可以通過以下兩種方式來實(shí)現(xiàn):
合并type方式:將Elasticsearch 5.x實(shí)例中的單索引多type數(shù)據(jù),通過reindex script方式合并成一個單索引單type數(shù)據(jù)。
拆分type方式:將Elasticsearch 5.x實(shí)例中的單索引多type數(shù)據(jù),按照不同的type,通過reindex拆分成多個單索引單type數(shù)據(jù)的方式。
使用阿里云Logstash,將處理后的索引數(shù)據(jù)遷移至高版本Elasticsearch 6.x實(shí)例中。
在Kibana中查看遷移成功的索引。
準(zhǔn)備工作
準(zhǔn)備低版本(5.5.3)和高版本(6.7.0)的阿里云Elasticsearch實(shí)例,并準(zhǔn)備待遷移的多type數(shù)據(jù)。
創(chuàng)建實(shí)例的具體操作,請參見創(chuàng)建阿里云Elasticsearch實(shí)例。
創(chuàng)建阿里云Logstash實(shí)例,要求與阿里云Elasticsearch實(shí)例處于同一專有網(wǎng)絡(luò)下。
具體操作,請參見步驟二:創(chuàng)建阿里云Logstash實(shí)例。
步驟一:轉(zhuǎn)換索引類型
以下步驟介紹通過合并type方式,將單索引多type數(shù)據(jù)合并成一個單索引單type數(shù)據(jù)。
開啟Elasticsearch實(shí)例的自動創(chuàng)建索引功能。
在左側(cè)導(dǎo)航欄,單擊Elasticsearch實(shí)例。
在頂部菜單欄處,選擇資源組和地域。
在實(shí)例列表中,單擊低版本的實(shí)例ID。
在左側(cè)導(dǎo)航欄,單擊ES集群配置。
單擊YML文件配置右側(cè)的修改配置。
在YML文件配置頁面,設(shè)置自動創(chuàng)建索引為允許自動創(chuàng)建索引。
警告修改自動創(chuàng)建索引方式會觸發(fā)實(shí)例重啟,請確認(rèn)后再操作。
勾選該操作會重啟實(shí)例,請確認(rèn)后操作,單擊確定。
登錄低版本Elasticsearch實(shí)例的Kibana控制臺。
具體操作,請參見登錄Kibana控制臺。
在左側(cè)導(dǎo)航欄,單擊Dev Tools(開發(fā)工具)。
在Console中,執(zhí)行以下命令,將單索引多type數(shù)據(jù)合并成單索引單type數(shù)據(jù)。
POST _reindex { "source": { "index": "twitter" }, "dest": { "index": "new1" }, "script": { "inline": """ ctx._id = ctx._type + "-" + ctx._id; ctx._source.type = ctx._type; ctx._type = "doc"; """, "lang": "painless" } }
以上示例通過自定義type的方式,指定ctx._source.type在new1索引中添加type字段,將其設(shè)置為原始_type的值。并且new1索引的_id由_type-_id組成,防止存在不同類型的文檔具有相同的ID而發(fā)生沖突的情況。
執(zhí)行
GET new1/_mapping
命令,查看合并后的Mapping結(jié)構(gòu)。執(zhí)行以下命令,查看合并后的索引數(shù)據(jù)。
GET new1/_search { "query":{ "match_all":{ } } }
以下步驟介紹通過拆分type方式,將單索引多type數(shù)據(jù),按照不同的type,通過reindex拆分成多個單索引單type數(shù)據(jù)。
在Console中,執(zhí)行以下命令,將單索引多type拆分單索引單type。
POST _reindex { "source": { "index": "twitter", "type": "tweet", "size": 10000 }, "dest": { "index": "twitter_tweet" } } POST _reindex { "source": { "index": "twitter", "type": "user", "size": 10000 }, "dest": { "index": "twitter_user" } }
以上示例將twitter索引按照不同type,分別拆分成twitter_tweet和twitter_user索引。
執(zhí)行以下命令,查看拆分后的索引數(shù)據(jù)。
GET twitter_tweet/_search { "query":{ "match_all":{ } } }
GET twitter_user/_search { "query":{ "match_all":{ } } }
步驟二:通過Logstash遷移數(shù)據(jù)
- 進(jìn)入阿里云Elasticsearch控制臺的Logstash頁面。
- 進(jìn)入目標(biāo)實(shí)例。
- 在頂部菜單欄處,選擇地域。
- 在Logstash實(shí)例中單擊目標(biāo)實(shí)例ID。
在左側(cè)導(dǎo)航欄,單擊管道管理。
單擊創(chuàng)建管道。
在創(chuàng)建管道任務(wù)頁面,輸入管道ID并配置管道。
本文使用的管道配置如下。
input { elasticsearch { hosts => ["http://es-cn-0pp1f1y5g000h****.elasticsearch.aliyuncs.com:9200"] user => "elastic" index => "*" password => "your_password" docinfo => true } } filter { } output { elasticsearch { hosts => ["http://es-cn-mp91cbxsm000c****.elasticsearch.aliyuncs.com:9200"] user => "elastic" password => "your_password" index => "test" } }
管道配置參數(shù)詳情,請參見Logstash配置文件說明。
單擊下一步,配置管道參數(shù)。
參數(shù)
說明
管道工作線程
并行執(zhí)行管道的Filter和Output的工作線程數(shù)量。當(dāng)事件出現(xiàn)積壓或CPU未飽和時,請考慮增大線程數(shù),更好地使用CPU處理能力。默認(rèn)值:實(shí)例的CPU核數(shù)。
管道批大小
單個工作線程在嘗試執(zhí)行Filter和Output前,可以從Input收集的最大事件數(shù)目。較大的管道批大小可能會帶來較大的內(nèi)存開銷。您可以設(shè)置LS_HEAP_SIZE變量,來增大JVM堆大小,從而有效使用該值。默認(rèn)值:125。
管道批延遲
創(chuàng)建管道事件批時,將過小的批分派給管道工作線程之前,要等候每個事件的時長,單位為毫秒。默認(rèn)值:50ms。
隊(duì)列類型
用于事件緩沖的內(nèi)部排隊(duì)模型。可選值:
MEMORY:默認(rèn)值。基于內(nèi)存的傳統(tǒng)隊(duì)列。
PERSISTED:基于磁盤的ACKed隊(duì)列(持久隊(duì)列)。
隊(duì)列最大字節(jié)數(shù)
請確保該值小于您的磁盤總?cè)萘俊DJ(rèn)值:1024 MB。
隊(duì)列檢查點(diǎn)寫入數(shù)
啟用持久性隊(duì)列時,在強(qiáng)制執(zhí)行檢查點(diǎn)之前已寫入事件的最大數(shù)目。設(shè)置為0,表示無限制。默認(rèn)值:1024。
警告配置完成后,需要保存并部署才能生效。保存并部署操作會觸發(fā)實(shí)例重啟,請?jiān)诓挥绊憳I(yè)務(wù)的前提下,繼續(xù)執(zhí)行以下步驟。
單擊保存或者保存并部署。
保存:將管道信息保存在Logstash里并觸發(fā)實(shí)例變更,配置不會生效。保存后,系統(tǒng)會返回管道管理頁面。可在管道列表區(qū)域,單擊操作列下的立即部署,觸發(fā)實(shí)例重啟,使配置生效。
保存并部署:保存并且部署后,會觸發(fā)實(shí)例重啟,使配置生效。
步驟三:查看數(shù)據(jù)遷移結(jié)果
登錄高版本Elasticsearch實(shí)例的Kibana控制臺。
具體操作,請參見登錄Kibana控制臺。
在左側(cè)導(dǎo)航欄,單擊Dev Tools。
在Console中,執(zhí)行以下命令,查看遷移成功的索引。
GET _cat/indices?v