自建ES集群遷移上云全攻略
業(yè)務(wù)上云過程中,勢必會涉及到企業(yè)內(nèi)部自建中間件等服務(wù)的遷移上云的需求,本文介紹下自建ES服務(wù)遷移上云的一些遷移方案以及如何根據(jù)業(yè)務(wù)場景選取適合的遷移方案
遷移方案
1、OSS快照
原理:以O(shè)SS為中轉(zhuǎn)存儲介質(zhì),使用elasticsearch-repository-oss插件關(guān)聯(lián)兩個(gè)集群,源集群備份數(shù)據(jù),目標(biāo)集群恢復(fù)數(shù)據(jù)(云廠商的托管ES集群默認(rèn)都安裝了oss插件),因?yàn)槭强煺漳J?,?shù)據(jù)一致性得到保證,數(shù)據(jù)恢復(fù)速度也快
OSS遷移原理
遷移步驟拆解
源集群
- 創(chuàng)建OSS Bucket、設(shè)置ak、sk等信息
- 在自建集群安裝安裝elasticsearch-repository-oss插件,插件版本保證和集群版本一致
- 為需要遷移的索引創(chuàng)建快照,并將快照備份到已創(chuàng)建的倉庫中
目標(biāo)集群
- 使用snapshot API創(chuàng)建一個(gè)與自建Elasticsearch集群相同的快照備份倉庫
- 將倉庫中已備份的快照恢復(fù)到目標(biāo)集群,完成數(shù)據(jù)遷移
- 快照恢復(fù)后,查看恢復(fù)的索引和索引數(shù)據(jù)
注意事項(xiàng)
- 這個(gè)方案的需要對原集群安裝同步插件,插件有跨度過大版本兼容性問題,版本兼容性可以看插件說明文檔
- 原集群備份是支持增量的,速度比較快;目標(biāo)集群恢復(fù)是全量恢復(fù),不支持增量,即目標(biāo)集群每次恢復(fù)是先創(chuàng)建索引,在恢復(fù)數(shù)據(jù)(目標(biāo)集群不能出現(xiàn)同名索引,否則恢復(fù)任務(wù)會失?。?/li>
- OSS備份的是主分區(qū)的數(shù)據(jù),恢復(fù)過程也是主分區(qū)數(shù)據(jù),副本分片的數(shù)據(jù)恢復(fù)是集群內(nèi)部恢復(fù)邏輯。即:恢復(fù)任務(wù)完成時(shí),是不包括副本數(shù)據(jù)恢復(fù)時(shí)間的。如果索引配置了寫一致性,需要等副本也恢復(fù)完成才能寫入成功
2、logstash
原理:logstash通俗的講:就是一個(gè)管道,連接兩端不同數(shù)據(jù)源。它的工作原理就是讀取源端數(shù)據(jù)(input),經(jīng)過處理(filter)發(fā)送到目標(biāo)端(output),可以使用它的這個(gè)特性連接兩個(gè)集群,遷移數(shù)據(jù)
logstash工作原理
遷移步驟拆解
- 安裝部署logstash
- 配置并運(yùn)行l(wèi)ogstash管道,核心配置如下
input {
elasticsearch {
hosts => ["http://<自建Elasticsearch Master節(jié)點(diǎn)的IP地址>:9200"]
user => "elastic"
index => "*,-.monitoring*,-.security*,-.kibana*"
password => "your_password"
docinfo => true
schedule => "*/30 * * * *" #每30分鐘同步一次
}
}
filter {
}
output {
elasticsearch {
hosts => ["http:<云資源暴露的endpoint地址>//:9200"]
user => "elastic"
password => "your_password"
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}
注意事項(xiàng)
logstash不能感知對索引的delete操作,即原集群中文檔數(shù)據(jù)被刪除了,目標(biāo)集群不會跟著刪除,update操作是支持同步的
對實(shí)時(shí)性要求不高的場景比較適用。
使用技巧:
- 確保源端數(shù)據(jù)的ID和目標(biāo)端ID一致的增量同步需求的話,可以在logstash中配置schedule定時(shí)任務(wù)。
- index字段支持正則表達(dá)式和取反匹配,可以通過這個(gè)特性控制遷移的索引。
3、elasticsearch-dump
原理:這是一個(gè)索引遷移工具,比較輕量化,基本原理也是定義input和output,從原集群查詢數(shù)據(jù)寫入到目標(biāo)集群,類型于logstash,但是不支持?jǐn)?shù)據(jù)過濾功能
遷移步驟拆解
elasticdump --input 原集群es地址/索引 --output 目標(biāo)集群es地址/索引
# type:指定遷移的類型,支持mapping、、analyzer、data
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=data
注意事項(xiàng)
- 適合數(shù)據(jù)量不大,遷移索引個(gè)數(shù)不多的場景,如果目標(biāo)集群索引不存在,需要遷移analyzer/mapping/data等索引屬性信息和數(shù)據(jù)
- 不支持增量遷移,每次都需要停機(jī)遷移,而且同步效率不高,操作步驟繁瑣
4、跨集群在線融合
原理:通過將自建集群和云上集群這兩個(gè)本身獨(dú)立的集群融合為一個(gè)大集群,并結(jié)合ES集群自帶的分片分配、遷移特性 來完成數(shù)據(jù)的遷移工作
在線融合遷移方案
遷移步驟拆解
- 融合:首先我們需要在騰訊云ES控制臺上申請一套和自建ES集群同等規(guī)模的空集群,即上圖2中的目標(biāo)集群,然后將云上的集群全量重啟后加入到自建的ES集群中,使得兩個(gè)集群融合成一個(gè)大集群。
- 遷移:融合完成后,通過對ES集群cluster/settings設(shè)置exclude屬性來進(jìn)行分片的遷移,當(dāng)執(zhí)行了如下API后,ES集群就會自動將自建集群節(jié)點(diǎn)上的分片逐步驅(qū)逐到云上的節(jié)點(diǎn)上來。從而完成分片的搬遷和集群數(shù)據(jù)的遷移工作。
- 下線:當(dāng)自建集群節(jié)點(diǎn)上的分片都已經(jīng)全部遷移完成后,再將自建集群節(jié)點(diǎn)全部停機(jī)下線,這樣便完成了整個(gè)集群的遷移上云過程。我們可以通過如下API來查看自建節(jié)點(diǎn)上的分片數(shù)是否為0。
注意事項(xiàng)
- 受云廠商是否支持限制(騰訊云支持、阿里云不支持)
- 自建ES集群版本不能大于目標(biāo)集群版本。主要原因是云上低版本的集群節(jié)點(diǎn)無法加入高版本的自建集群中。另外對于版本號,最好是兩個(gè)集群大版本號一致
- 自建ES集群的插件需要和云ES集群插件保持一致,因?yàn)槿诤系酵粋€(gè)集群,需保證插件兼容
- 自建ES集群不能開啟security認(rèn)證,帶有認(rèn)證會導(dǎo)致融合失敗
5、reindex
原理:reindex是ES提供的一個(gè)api接口,可以把數(shù)據(jù)從一個(gè)集群遷移到另外一個(gè)集群,reindex的核心做跨索引、跨集群的數(shù)據(jù)遷移,比如我們的某個(gè)索引分片過大,我們就可以創(chuàng)建新索引,在使用reindex API遷移數(shù)據(jù)。
遷移步驟拆解
目標(biāo)集群設(shè)置whilelist白名單。
reindex.remote.whitelist: ["10.0.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200"]
目標(biāo)集群調(diào)用reindex api配置遷移任務(wù)。
POST _reindex
{
"source": {
"remote": {
"host": "http://x.x.x.1:9200"
},
"index": "test1"
},
"dest": {
"index": "test2"
}
}
注意事項(xiàng)
- Reindex 不會嘗試設(shè)置目標(biāo)索引。 它不會復(fù)制源索引的設(shè)置。 您應(yīng)該在運(yùn)行 _reindex 操作之前設(shè)置目標(biāo)索引,包括設(shè)置映射、分片計(jì)數(shù)、副本等。
- 源端數(shù)據(jù)量較小,且對遷移速度要求不高的場景。
6、跨集群復(fù)制CCR
原理:跨集群復(fù)制 (CCR) 功能支持將特定索引從一個(gè) ElasticSearch 集群復(fù)制到一個(gè)或多個(gè) ElasticSearch 集群。除了跨數(shù)據(jù)中心復(fù)制之外,CCR 還有許多其他用例,包括數(shù)據(jù)本地化,或者將數(shù)據(jù)從 Elasticsearch 集群復(fù)制到中央報(bào)告集群。
備注:6.7及以后的版本支持,CCR 是一項(xiàng)白金級功能(付費(fèi)功能)。
遷移方案如何選?
在上面我們介紹了可用的跨集群遷移方案,還有兩種方式也是經(jīng)常被提及的,方案那么多,我們怎么去選取適合自己業(yè)務(wù)場景的遷移方案,是一個(gè)值得我們?nèi)ニ伎嫉膯栴},我整理了一個(gè)表格供大家參考:
ES集群業(yè)界常用遷移方案