【笔记】Elasticsearch snapshot(快照)数据迁移

0.简介

        项目中需要进行Elasticsearch(以下简称ES)新旧集群切换,涉及到集群数据迁移。本篇笔记录了利用Elasticsearch snapshot特性进行数据迁移的关键步骤。

1.迁移前检查

        在开始进行迁移前,做以下两点检查。  

        1)检查是否开启path.repo选项

               使用ES snapshot特性的前提是开启了path.repo选项,如图1。该选项指定了snapshot存储的位置。

               本次数据迁移使用的是fs类型的snapshot,ES还提供许多其他类型的快照方式,具体内容可参考官方文档。Snapshot and restore | Elasticsearch Guide [8.12] | Elastic

 图1

        2)检查索引

        在迁移前先检查集群中存在哪些索引和它们的分配情况,方便迁移完成后进行对比。检查数据是否迁移成功。如图2。

curl -v -XGET 'http://localhost:9200/_cat/indices' -u elasitc

图2

2.创建snapshot仓库

        利用ES的snapshot API,在旧集群中创建一个快照仓库。其中,location选项必须是path.repo选项指定的目录。图3是创建快照仓库成功的截图。

        type选项指定了快照仓库的类型,本例中使用的是fs类型,即文件类型。

curl -v -XPUT 'http://localhost:9200/_snapshot/test-repo' -H "Content-Type: application/json" -d '
{
    "type": "fs",
    "settings": {
        "location": "/home/dsp/help/snapshot"
    }
}' -u elastic

图 3

        除此之外,还可以使用以下命令查询仓库的状态。

curl -X GET "http://localhost:9200/_snapshot/my_repository/my_snapshot?pretty" -u elastic

3.创建索引快照

        创建好快照仓库后,创建索引的快照,为了方便演示,在这里指我们只为图2中sharedb_*索引创建快照,如图4。

curl -v -XPUT 'http://localhost:9300/_snapshot/test-repo/index-snapshot-2024-02-09?wait_for_completion=true' -H "Content-Type: application/json" -d '
{
"indices": "sharedb_cert_info_time_test"
}' -u elastic | python -m json.tool

图4 

这时候我们进入/home/dsp/help/snapshot中可以看到相关的备份数据。如图5。 

图5 

        可以通过以下命令获取索引快照的信息

curl -X GET "http://localhost:9200/_snapshot/my_repository/my_snapshot?pretty" -u elastic

图6 

4. 迁移数据

        迁移数据这一步非常简单,有两种方式。

        第一种方式是,启动一个新的ES集群,将path.repo路径配置为现在的路径;第二种方式是对旧集群指定的快照仓库的目录复制,再随意移动到某个地方。本例中使用第二种方式。

 图 7

5.配置并启动新节点并从快照中恢复数据

        现在,启动一个新的集群,并且 将path.repo选项配置正确。、

        在本例中,我们将新的ES节点监听在9400和9401端口。

图8 

        从下图中可以看到现在运行了两个ES实例。一个监听在9300端口,一个监听在9400端口。监听在9300端口的是旧实例,监听在9400端口的是新实例。

图9 

        现在我们使用restore API在9400端口的ES实例上对索引进行恢复。恢复之前我们先看看该实例目前的快照仓库信息。

curl -v -XGET 'http://localost:9400/_snapshot" -u elastic

        可以看到,目前新实例上还不存在快照仓库。所以这里需要注意,我们要先创建一个与旧实例上创建的仓库同名的快照仓库。 

图10 

curl -v -XPUT 'http://localhost:9400/_snapshot/test-repo' -H "Content-Type: application/json" -d '
{
    "type": "fs",
    "settings": {
        "location": "/home/dsp/help/snapshot-new"
    }
}' -u elastic

图11 

        图xx创建了新的快照仓库。其中的location选项是我们刚才复制的地址。再次查看仓库信息。可以提看到新的仓库已经存在。

 

图12 

        此时,新实例上我们虽然还没有做任何事情,但我们可以直接查看刚才备份的快照索引的信息。

图13 

         但如果这个时候查询分片信息的话,我们是看不到该索引的。

图14 

        现在,我们执行restore操作,从快照仓库中恢复sharedb_cert_info_time_test索引  

curl -XPUT "http://localhost:9400/_snapshot/test-repo/index-snapshot-2024-02-09"/_restore

图15 

图16 

        到这里,我们的索引就在新的实例上恢复了。注意到这个索引的状态是UNASSIGNED。导致UNASSINGNED在本例中与snapshot关系不大,是为某个插件的原因,因此这不是本篇笔记的关注点 ,暂时不做解释。

8.停止旧集群  

        最后,我们停止旧的实例,即完成了迁移。

10.小结

        ES迁移数据的方法有很多,这里只做了快照方法迁移。还可以使用elasticsearch-dump工具对索引进行迁移。当然,还有一个更加简单的方式——直接迁移ES data目录即可。赶快去试试吧。

        不过需要各位注意的是,ES进行数据迁移时,需要注意版本问题,无论是小版本(例如7.17.x->7.17.x),还是大版本(7.xx.xx -> 8.xx.xx)都有可能出现问题。ES官方网站上可以查询到版本之前的兼容信息。

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值