当前位置: 首页 > 科技观察

ES7.x数据迁移实践(Snapshot,S3)

时间:2023-03-12 12:02:24 科技观察

前言我在上篇文章写过ES迁移方案。不同的场景使用不同的迁移方案会事半功倍。今天我们就具体操作一下基于Snapshot方式的数据迁移。快照比较适合跨集群迁移大量数据。并且索引创建快照的过程是增量的。在对索引进行快照的过程中,Elasticsearch会分析存储在存储库中的索引文件,并且只复制那些自上次快照以来新增或更新的文件。这允许多个快照以紧凑的方式存储在同一个存储库中。创建快照的过程以非阻塞方式执行。可以在拍摄快照的同时检索和查询索引。但是,快照会保存拍摄快照时的索引视图。因此,快照启动后的记录不会出现在该快照中。创建快照的过程在主分片启动后立即开始,并且之后不会更改位置。操作开门见山,直接上操作,我们使用Kibana可视化桌面来操作,当然你也可以直接使用CURL方式。安装S3插件除了S3,还可以使用本地存储fs等,进入docker容器。dockerexec-itc76785ab5a8bbash#安装插件./bin/elasticsearch-plugininsyallrepository-s3exit重启容器(不建议这样安装,万一容器挂了重启就消失了,就是推荐使用挂载方式)。dockerrestartc76785ab5a8b查看是否安装成功。GET_cat/pluginsc76785ab5a8banalysis-ik7.8.1c76785ab5a8brepository-s37.8.1显示安装成功。一般插件版本对应ES版本。在创建仓库之前,我们先在后台(Security)配置minio的AK和SK,同样的方式进入docker./bin/elasticsearch-keystoreadds3.client.default.access_key./bin/elasticsearch-keystoreadds3.client.default.secret_key,添加后退出重启(不推荐)。然后开始创建存储库。PUT_snapshot/stock_backup{“type”:“s3”,“settings”:{“bucket”:“stock”,“protocol”:“http”,“disable_chunked_encoding”:“true”,“endpoint”:“172.0.0.1:9000"}}验证是否创建成功。GET_snapshot/_all?pretty{“stock_backup”:{“type”:“s3”,“settings”:{“bucket”:“stock”,“disable_chunked_encoding”:“true”,“endpoint”:“172.0.0.1:9000","protocol":"http"}}}至此,仓库已经创建完成,我们直接备份数据。备份完全备份。PUT_snapshot/stock_backup/snapshot_all部分备份,例如:只备份其中的索引。当然也可以加上参数:indices:要赋值的索引,用逗号隔开。max_wait:最长等待时间。wait_interval:等待间隔。wait_for_completion:该参数指定创建快照的请求是否等待快照创建后再返回。ignore_unavailable:当该选项设置为true时,创建快照时将忽略不存在的索引。默认情况下,如果不设置ignore_unavailable,如果索引不存在,快照请求将失败。include_global_state:false可以防止集群的全局状态被存储为快照的一部分。默认情况下,如果快照中的一个或多个索引不适用于所有主分片,则整个快照创建过程将失败。可以通过将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}检查备份状态。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,“失败”:[],“碎片”:{“总计”:3,“失败”:0,“成功”:3}}]}GET_snapshot/stock_backup/_all?pretty#查看所有{“快照”:[{“快照”:“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}}]}此时备份已经成功恢复,我们的操作是跨集群数据迁移,同样的操作在另一个集群创建同一个仓库PUT_snapshot/stock_backup{"type":"s3","settings":{"bucket":"stock","protocol":"http","disable_chunked_encoding":"true","endpoint":"172.0.0.1:9000"}}然后看看现在的备份数据.GET_snapshot/stock_backup/_all?pretty{“快照”:[{“快照”:“default_all”,“uuid”:“4ZgKyuBWTE2vtowAczIDpQ”,“version_id”:7080199,“版本”:“7.8.1”,“指数”:[“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,“失败”:[],“碎片”:{“总计”:3,“failed":0,"successful":3}}]}发现备份数据已经存在,此时只需要恢复即可。POST_snapshot/stock_backup/default_all/_restore{"acknowledged":true}等待执行结束就OK了。GET_cat/indicesyellowopendec_default_newsHWykC-xpQVK0ZqK-3NjXVA113080208kb208kbyellowopendec_default_rateF3JFzHF-QK2AH_9IUmnacA114094710221.5mb221.5mbyellowopendec_default_hac78OXNB1T3KafgVHj7TwiA111640250.2kb250.2kb大功告成。