热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3种常用的Elasticsearch数据迁移方案

公众号关注「奇妙的Linux世界」设为「星标」,每天带你玩转Linux!如果准备将自建的elasticsearch迁移上云,或者的迁移到其

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

6a7fd25a72f69f4f551dfbceb8ed927a.png

如果准备将自建的 elasticsearch 迁移上云,或者的迁移到其他es集群内,可以根据自己的业务需要选择合适的迁移方案。如果业务可以停服或者可以暂停写操作,可以使用以下几种方式进行数据迁移:

  • COS 快照,即Cloud Object Storage

  • logstash

  • elasticsearch-dump

各种迁移方式的对比如下:

迁移方式适用场景
COS 快照数据量大的场景(GB、TB、PB 级别)对迁移速度要求较高的场景
logstash迁移全量增量数据,且对实时性要求不高的场景需要对迁移的数据通过 es query 进行简单的过滤的场景需要对迁移的数据进行复杂的过滤或处理的场景版本跨度较大的数据迁移场景,如 5.x 版本迁移到 6.x 版本或 7.x 版本
elasticsearch-dump数据量较小的场景

1COS 快照

基于 COS 快照的迁移方式是使用 ES 的 snapshot api 接口进行迁移,基本原理就是从源 ES 集群创建索引快照,然后在目标 ES 集群中进行恢复。通过 snapshot 方式进行数据迁移时,特别需要注意 ES 的版本问题:

目标 ES 集群的主版本号(如5.6.4中的5为主版本号)要大于等于源 ES 集群的主版本号。
1.x 版本的集群创建的快照不能在 5.x 版本中恢复。

在源 ES 集群中创建 repository

创建快照前必须先创建 repository 仓库,一个 repository 仓库可以包含多份快照文件,repository 主要有以下几种类型。

  • fs:共享文件系统,将快照文件存放于文件系统中。

  • url:指定文件系统的 URL 路径,支持协议:http、https、ftp、file、jar。

  • s3:AWS S3 对象存储,快照存放于 S3 中,以插件形式支持,安装该插件请参考 repository-s3[1]

  • hdfs:快照存放于 hdfs 中,以插件形式支持,安装该插件请参考 repository-hdfs[2]

  • cos:快照存放于腾讯云COS对象存储中,以插件形式支持,安装该插件请参考 cos-repository[3]

如果需要从自建 ES 集群迁移至腾讯云的 ES 集群,可以直接使用 COS 类型仓库。但需要先在自建 ES 集群上安装 cos-repository 插件(安装插件后需要重启集群才能使用),先把自建 ES 集群中的数据先备份到 COS,然后在腾讯云上的 ES 集群中恢复出来,以完成数据的迁移。

如果自建 ES 的集群不方便安装 cos-repository 插件,但是已经安装 repository-s3 或者 repository-hdfs 插件,则可以先把数据备份到 S3 或者 HDFS 中,然后把 S3 或者 HDFS 中备份好的文件上传到腾讯云 COS 中,之后在腾讯云上的集群中进行恢复。

通过 COS 快照进行数据迁移时,需要先创建 COS 仓库,您可以通过如下命令创建仓库:

PUT _snapshot/my_cos_backup
{"type": "cos","settings": {"app_id": "xxxxxxx","access_key_id": "xxxxxx","access_key_secret": "xxxxxxx","bucket": "xxxxxx","region": "ap-guangzhou","compress": true,"chunk_size": "500mb","base_path": "/"}
}

  • app_id:腾讯云账号 APPID。

  • access_key_id:腾讯云 API 密钥 SecretId。

  • access_key_secret:腾讯云 API 密钥 SecretKey。

  • bucket:COS Bucket 名字,不带 appId 后缀的 bucket 名

  • region:COS Bucket 地域,必须与 ES 集群同地域。

  • base_path:备份目录。

在源 ES 集群中创建 snapshot

调用 snapshot api 创建快照以备份索引数据,创建快照时可以指定只对部分索引进行备份,也可以备份所有的索引,具体的 api 接口参数可以查阅 官方文档。

备份所有索引

将源 ES 集群中的所有索引备份到 my_cos_backup 仓库下,并命名为 snapshot_1

PUT _snapshot/my_cos_backup/snapshot_1

这个命令会立刻返回,并在后台异步执行直到结束。如果希望创建快照命令阻塞执行,可以添加 wait_for_completion 参数:

PUT _snapshot/my_cos_backup/snapshot_1?wait_for_completion=true

命令执行的时间与索引大小相关。

备份指定索引

您可以在创建快照的时候指定要备份的索引:

PUT _snapshot/my_cos_backup/snapshot_2
{"indices": "index_1,index_2"
}

参数 indices 的值为多个索引的时候,需要用,隔开且不能有空格。

查看快照状态

通过以下命令检查快照是否备份完成,返回结果中的state字段为SUCCESS则说明快照已经备份成功:

GET _snapshot/my_cos_backup/snapshot_1

在目标 ES 集群中创建 repository

在目标 ES 集群中创建仓库和在源 ES 集群中创建仓库完全相同。

从快照恢复

将快照中备份的所有索引都恢复到 ES 集群中:

POST _snapshot/my_cos_backup/snapshot_1/_restore

如果 snapshot_1 包括5个索引,则这5个索引都会被恢复到 ES 集群中。您还可以使用附加的选项对索引进行重命名。该选项允许您通过模式匹配索引名称,并通过恢复进程提供一个新名称。如果您想在不替换现有数据的前提下,恢复旧数据来验证内容或进行其他操作,则可以使用该选项。从快照里恢复单个索引并提供一个替换的名称:

POST /_snapshot/my_cos_backup/snapshot_1/_restore
{"indices": "index_1","rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"
}

  • indices:只恢复 index_1 索引,忽略快照中存在的其他索引。

  • rename_pattern:查找所提供的模式能匹配上的正在恢复的索引。

  • rename_replacement:将匹配的索引重命名成替代的模式。

查看索引恢复状态

您可以通过调用 _recovery API,查看指定索引恢复的进度:

GET index_1/_recovery

另外可以通过调用以下 API,查看指定索引的状态,返回结果中 status 为 green,则说明索引已经完全恢复:

GET _cluster/health/index_1

2logstash

logstash 支持从一个 ES 集群中读取数据然后写入到另一个 ES 集群,因此可以使用 logstash 进行数据迁移,使用 logstash 进行迁移前,需要注意以下几点:

  • 需要在和腾讯云上的 ES 集群相同的 VPC 下创建 CVM,部署 logstash,同时保证该 CVM 能够访问到源 ES 集群。

  • 用于部署 logstash 的 CVM 最好选择比较高的配置,例如 CPU 为16核,内存为32GB。

  • logstash 应该和目标 ES 集群的主版本号相同,例如目标 ES 集群为6.8.2版本,则 logstash 也需要使用6.8版本。

  • 需要特别注意索引 type 的问题,因为 ES 的不同版本对索引 type 的约束不同,跨大版本迁移 ES 集群时可能出现因为索引的 type 而导致写入目标集群失败等的问题。具体可参考 logstash-output-elasticsearch 插件中对 document_type 参数的说明。

一个常用的使用 logstash 进行跨集群数据迁移的配置文件如下:

input {elasticsearch {hosts => "1.1.1.1:9200"index => "*"docinfo => truesize => 5000scroll => "5m"}
}output {elasticsearch {hosts => ["http://2.2.2.2:9200"]user => "elastic"password => "your_password"index => "%{[@metadata][_index]}"document_type => "%{[@metadata][_type]}"document_id => "%{[@metadata][_id]}"}
}

上述配置文件将源 ES 集群的所有索引同步到目标集群中,同时也可以设置只同步指定的索引,利用 logstash 进行迁移的更多功能可查阅 logstash-input-elasticsearch 和 logstash-output-elasticsearch[4]

3elasticsearch-dump

elasticsearch-dump 是一款开源的 ES 数据迁移工具,github 地址[5]

  1. 安装 elasticsearch-dump

    elasticsearch-dump 使用 node.js 开发,可使用 npm 包管理工具直接安装:

    npm install elasticdump -g

  2. 主要参数说明

    --input: 源地址,可为 ES 集群 URL、文件或 stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index}
    --input-index: 源 ES 集群中的索引
    --output: 目标地址,可为 ES 集群地址 URL、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index}
    --output-index: 目标 ES 集群的索引
    --type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias

  3. 如果集群有安全认证,可以参照下面的方法使用 reindex 集群鉴权。在对应的 http 后面,添加 user:password@ 参考样例 elasticsearch-dump --input=http://192.168.1.2:9200/my_index --output=http://user:password@192.168.1.2:9200/my_index --type=data

  4. 迁移单个索引

    以下操作通过 elasticdump 命令将集群172.16.0.39中的 companydatabase 索引迁移至集群172.16.0.20。

    第一条命令先将索引的 settings 先迁移,如果直接迁移 mapping 或者 data 将失去原有集群中索引的配置信息如分片数量和副本数量等,当然也可以直接在目标集群中将索引创建完毕后再同步 mapping 与 data。

    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data

  5. 迁移所有索引

    以下操作通过 elasticdump 命令将集群172.16.0.39中的所有索引迁移至集群172.16.0.20。

    此操作并不能迁移索引的配置,例如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据。

    elasticdump --input=http://172.16.0.39:9200 --output=http://172.16.0.20:9200

4总结

  1. elasticsearch-dump 和 logstash 做跨集群数据迁移时,都要求用于执行迁移任务的机器可以同时访问到两个集群,因为网络无法连通的情况下就无法实现迁移。而使用 snapshot 的方式则没有这个限制,因为 snapshot 方式是完全离线的。因此 elasticsearch-dump 和 logstash 迁移方式更适合于源 ES 集群和目标 ES 集群处于同一网络的情况下进行迁移。而需要跨云厂商的迁移,可以选择使用 snapshot 的方式进行迁移,例如从阿里云 ES 集群迁移至腾讯云 ES 集群,也可以通过打通网络实现集群互通,但是成本较高。

  2. elasticsearch-dump 工具和 MySQL 数据库用于做数据备份的工具 mysqldump 类似,都是逻辑备份,需要将数据一条一条导出后再执行导入,所以适合数据量小的场景下进行迁移。

  3. snapshot 的方式适合数据量大的场景下进行迁移。

参考资料

[1]

repository-s3: https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3.html

[2]

cos-repository: https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html

[3]

cos-repository: https://github.com/tencentyun/elasticsearch-repository-cos

[4]

repository-s3: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

[5]

elasticsearch-dump: https://github.com/taskrabbit/elasticsearch-dump

本文转载自:「架构实验室」,原文:https://tinyurl.com/yc2b5keh,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

6e2c70b7738bf0f79c2345fc03b2668d.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

3e622c8c6f8c53d38ccb165d69bb3d67.png

你可能还喜欢

点击下方图片即可阅读

132feaf85540e6df402981fc1fb89934.png

WireGuard 中文教程:使用 Netmaker 快速组建 WireGuard 全互联 (Full Mesh) 网络

123f9a46f24eea162e37601c0962b3a1.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

6fb42f0e00181a260db685a06db87cac.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!



推荐阅读
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在 Ubuntu 22.04 LTS 系统中安装 HPLIP 的详细步骤与注意事项
    HPLIP 是 HP 官方提供的软件套件,旨在支持多种 HP 打印机型号,如 Deskjet、Officejet、Photosmart、PSC、Business Inkjet 和 LaserJet 等。本文详细介绍了在 Ubuntu 22.04 LTS 系统中安装 HPLIP 的步骤,并提供了重要的注意事项,确保用户能够顺利配置和使用 HP 打印设备。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 如何在Lua中调用C语言编译的动态链接库
    本文介绍了如何在Lua中调用C语言编译的动态链接库。通过详细步骤和示例代码,帮助开发者理解和掌握这一技术。参考了《Lua编程入门》一书中的相关内容,并结合实际操作经验,提供了更加清晰和实用的指导。此外,还探讨了在不同操作系统下编译和链接Lua的方法,为跨平台开发提供了有价值的参考。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
author-avatar
拍友2502921323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有