前言
前面我们通过通过腾讯云控制台快速构建了一个ES集群,并能通过云控制台管理界面或者CVM操作管理ES集群。我们知道ES是一个存储搜索分析引擎,那么如何让自己的现有的ES集群的数据跨平台的迁移到腾讯云上来呢??我们推荐ES官方的snapshot方法。下面为大概的过程(因为本人账号属于集体账号,处于安全考虑后面的部分过程粗略讲一下)
一、snapshot(跨集群数据、数据量大)
snapshot api 是 ES 用于对数据进行备份和恢复的一组 api 接口,可以通过 snapshot api 进行跨集群的数据迁移,原理就是从源 ES 集群创建数据快照,然后在目标 ES 集群中进行恢复。
现有ES集群IP: 172.18.X.X 要求: 能上外网
目标ES集群VIP:10.1.0.7 同网段CVMIP为:10.1.0.14
需求: 将原ES集群的索引信息通过快照的形式迁移到目标ES。解决步骤如下:
1,首先:在自有的源ES集群上,创建快照所要存储的仓库-repository。仓库类型fs ,首先要在ES配置文件elasticsearch.yml设置仓库路径,注意:此路径标识的目录在本地一定要存在!!
2,其次,重启ES集群 确定节点都正常启动。
3,接下来,我们调用snapshot api 创建 repository 使用如下命令:
返回结果:显示错误。如下”:
报错提示的意思是访问被拒绝。。。操作多次,仍是相同的错误。那么是不是仓库所在路径的文件夹没权限呢??
所以,我改了一下文件夹权限 chown -R elas:elas /usr/local/hezhen/test 如下所示:
然后再次启动ES集群,让配置生效。再次执行上面的命令,发现成功了。如下图:
原因很简单:ES 5.x版本后,默认是需要通过普通用户来启用服务的。因为我们刚新建的文件夹的权限是root。elas去启动服务的时候无法将命令写进属于root的文件夹。自然就报错。
3,在自有的集群中创建索引快照,如下:创建一条索引的快照
创建完后,文件夹里边有数据了,验证一下“
如果要备份所有索引,可以使用如下命令:
PUT _snapshot/aa_buckup/snapshot_1?wait_for_completion=true
查看快照信息 GET _snapshot/aa_buckup/snapshot_1?pretty
4,目标ES集群中创建repository
方法:在腾讯云上创建 COS 对象 bucket,把仓库建在 COS 的某个 bucket 下。步骤
首先:你需要登录到腾讯云控制台的COS(对象存储服务)项去新建一个bucket桶,并命名为自己习惯的名字
其次:在Kibana命令行下去新建一个仓库,将其映射到腾讯云
如果报下面的错,说明你要去云控制台去设置安全秘钥与访问码
那么这样在目标集群上就把ES仓库建立在自己的Bulk上了。
最后,将源 ES 集群创建好的 snapshot 上传至目标 ES 集群创建好的仓库中。(打包--下载--解压----上传)
5,在目标集群从快照恢复索引 使用此命令即可
GET _snapshot/aa_buckup/snapshot_1/_restore?wait_for_completion=true
6,查看快照恢复状态
GET _snapshot/_status
二、总结
1,ES数据作集群迁移的时候根据不同的使用场景有不同的方法。比如还有elasticsearch-dump 、Logstash.他们的区别是:elasticsearch-dump 和 logstash 迁移方式更适合于源 ES 集群和目标 ES 集群处于同一网络的情况下进行迁移。需要跨云厂商的迁移,可以选择使用 snapshot 的方式进行迁移,例如从阿里云 ES 集群迁移至腾讯云 ES 集群。
2,elasticsearchdump 工具和 MySQL 数据库用于做数据备份的工具 mysqldump 类似,都是逻辑备份,需要将数据一条一条导出后再执行导入,所以适合数据量小的场景下进行迁移。
3,snapshot 的方式适合数据量大的场景下进行迁移。
因此,我们这里重点介绍了一下snapshot的使用。因为它不受网络限制,属于离线跨群的数据迁移工具。后面有时间我们再继续深入讲解它更多的案例应用。