Es7.x數(shù)據(jù)遷移實戰(zhàn)(Snapshot、S3)
前言
前面文章寫過ES的遷移方案,不同場景使用不同的遷移方案會事半功倍,今天咱們就來具體操作一下基于Snapshot方式來遷移數(shù)據(jù),Snapshot更加適用于大數(shù)據(jù)量跨集群遷移數(shù)據(jù)。并且索引創(chuàng)建快照的過程是增量的。在給索引創(chuàng)建快照的過程中,Elasticsearch會分析存儲在倉庫中的索引文件并且只會復(fù)制那些自從上次快照 之后新建或有所更新的文件。這使得多個快照以一種緊湊的方式存儲在同一個倉庫里。創(chuàng)建快照的過程是以非阻塞方式執(zhí)行的。一個索引在創(chuàng) 建快照的同時能夠被檢索和查詢。盡管如此,快照保存的是在開始進(jìn)行創(chuàng)建快照的那個時間點的索引的視圖。所以,在開始創(chuàng)建快照之后的記錄不會出現(xiàn)在這個快照里。在主分片啟動之后創(chuàng)建快照的過程就會立即開始,并且之后不會改變位置。
操作
開門見山,直接上操作,咱們使用Kibana可視化桌面來操作,當(dāng)然也可以直接使用CURL的方式。
安裝S3插件
除了S3,也可以使用本地存儲fs等,進(jìn)入docker容器。
docker exec -it c76785ab5a8b bash
# 安裝插件
./bin/elasticsearch-plugin insyall repository-s3
exit
重啟容器(不建議這樣安裝,萬一容器掛了重新啟動后就會沒有,建議使用掛載的方式)。
docker restart c76785ab5a8b
查看是否安裝成功。
GET _cat/plugins
c76785ab5a8b analysis-ik 7.8.1
c76785ab5a8b repository-s3 7.8.1
顯示這樣表明安裝成功,一般情況下插件版本是和ES的版本對應(yīng)的
創(chuàng)建倉庫
創(chuàng)建倉庫之前咱們先把minio的AK、SK在后臺配置(安全),以同樣的方式進(jìn)入docker中
./bin/elasticsearch-keystore add s3.client.default.access_key
./bin/elasticsearch-keystore add s3.client.default.secret_key
添加后退出重啟(不建議)。
然后開始創(chuàng)建倉庫。
PUT _snapshot/stock_backup
{
"type": "s3",
"settings": {
"bucket": "stock",
"protocol": "http",
"disable_chunked_encoding": "true",
"endpoint": "172.0.0.1:9000"
}
}
驗證是否創(chuàng)建成功。
GET _snapshot/_all?pretty
{
"stock_backup" : {
"type" : "s3",
"settings" : {
"bucket" : "stock",
"disable_chunked_encoding" : "true",
"endpoint" : "172.0.0.1:9000",
"protocol" : "http"
}
}
}
此時,倉庫已經(jīng)創(chuàng)建好了,咱們直接備份數(shù)據(jù)。
備份
全量備份。
PUT _snapshot/stock_backup/snapshot_all
部分備份,例如:只備份其中的index。
當(dāng)然也可以添加參數(shù):
- indices: 要本分的index,逗號分割。
- max_wait: 最大等待時間。
- wait_interval: 等待間隔。
- wait_for_completion: 參數(shù)指定創(chuàng)建snapshot的請求是否等待快照創(chuàng)建完成再返回。
- ignore_unavailable: 把這個選項設(shè)置為 true 的時候在創(chuàng)建快照的過程中會忽略不存在的索引。默認(rèn)情況下, 如果沒有設(shè)置 ignore_unavailable 在索引不存在的情況下快照請求將會失敗。
- include_global_state: 為false 能夠防止 集群的全局狀態(tài)被作為快照的一部分存儲起來。默認(rèn)情況下,如果快照中的1個或多個索引不是全部主分片都可用會導(dǎo)致整個創(chuàng)建快照的過程失敗。 通過設(shè)置 partial 為 true 可以改變這個行為。
PUT _snapshot/stock_backup/default_all
{
"indices": "dec_default_news,dec_default_rate,dec_default_ha",
"ignore_unavailable": true,
"include_global_state": false
}
查看備份狀態(tài)。
GET _snapshot/stock_backup/default_all # 查看單個
{
"snapshots" : [
{
"snapshot" : "default_all",
"uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
"version_id" : 7080199,
"version" : "7.8.1",
"indices" : [
"dec_default_news",
"dec_default_rate",
"dec_default_ha"
],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2022-04-02T03:16:09.842Z",
"start_time_in_millis" : 1648869369842,
"end_time" : "2022-04-02T03:16:09.842Z",
"end_time_in_millis" : 1648869369842,
"duration_in_millis" : 0,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
}
}
]
}
GET _snapshot/stock_backup/_all?pretty # 查看所有
{
"snapshots" : [
{
"snapshot" : "default_all",
"uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
"version_id" : 7080199,
"version" : "7.8.1",
"indices" : [
"dec_default_news",
"dec_default_rate",
"dec_default_ha"
],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2022-04-02T03:16:09.842Z",
"start_time_in_millis" : 1648869369842,
"end_time" : "2022-04-02T03:16:09.842Z",
"end_time_in_millis" : 1648869369842,
"duration_in_millis" : 0,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
}
}
]
}
此時已經(jīng)備份成功。
恢復(fù)
咱們的操作是跨集群的數(shù)據(jù)遷移,同樣的操作,在另一個集群里面創(chuàng)建相同的倉庫
PUT _snapshot/stock_backup
{
"type": "s3",
"settings": {
"bucket": "stock",
"protocol": "http",
"disable_chunked_encoding": "true",
"endpoint": "172.0.0.1:9000"
}
}
然后看下現(xiàn)在有備份數(shù)據(jù)。
GET _snapshot/stock_backup/_all?pretty
{
"snapshots" : [
{
"snapshot" : "default_all",
"uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
"version_id" : 7080199,
"version" : "7.8.1",
"indices" : [
"dec_default_news",
"dec_default_rate",
"dec_default_ha"
],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2022-04-02T03:16:09.842Z",
"start_time_in_millis" : 1648869369842,
"end_time" : "2022-04-02T03:16:09.842Z",
"end_time_in_millis" : 1648869369842,
"duration_in_millis" : 0,
"failures" : [ ],
"shards" : {
"total" : 3,
"failed" : 0,
"successful" : 3
}
}
]
}
發(fā)現(xiàn)已經(jīng)存在了備份的數(shù)據(jù),此時只需要恢復(fù)就行。
POST _snapshot/stock_backup/default_all/_restore
{
"acknowledged" : true
}
等待執(zhí)行結(jié)束就OK。
GET _cat/indices
yellow open dec_default_news HWykC-xpQVK0ZqK-3NjXVA 1 1 308 0 208kb 208kb
yellow open dec_default_rate F3JFzHF-QK2AH_9IUmnacA 1 1 409471 0 221.5mb 221.5mb
yellow open dec_default_ha c78OXNB1T3KafgVHj7TwiA 1 1 164 0 250.2kb 250.2kb
大功告成。