0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

马哥Linux运维 ? 来源:奇妙的Linux世界 ? 作者:奇妙的Linux世界 ? 2022-04-02 10:50 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如果准备将自建的 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:将匹配的索引重命名成替代的模式。

查看索引恢复状态

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

GET index_1/_recovery

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

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 => true
        size => 5000
        scroll => "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 包管理工具直接安装:

    npminstallelasticdump-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 的方式适合数据量大的场景下进行迁移。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据迁移
    +关注

    关注

    0

    文章

    86

    浏览量

    7132
  • Elasticsearch
    +关注

    关注

    0

    文章

    30

    浏览量

    3029

原文标题:3 种常用的 Elasticsearch 数据迁移方案

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单节点Elasticsearch+Filebeat+Kibana安装指南

    单节点Elasticsearch+Filebeat+Kibana安装指南
    的头像 发表于 05-21 11:06 ?487次阅读
    单节点<b class='flag-5'>Elasticsearch</b>+Filebeat+Kibana安装指南

    如何在Linux环境下高效安装部署和配置Elasticsearch

    /CentOS-7-x86_64-DVD-2009.iso elasticsearch-7.10.0-linux-x86_64.tar.gz https://www.elastic.co/cn/downloads/past-releases
    的头像 发表于 01-16 11:49 ?1099次阅读

    在华为云上通过 Docker 容器部署 Elasticsearch 并进行性能评测

    ? 2.2 安装 Docker ? 2.3 启动 Docker ? 3. 使用Docker部署Elasticsearch ? 3.1 拉取Elasticsearch镜像 ? 3.2 启动
    的头像 发表于 01-13 13:36 ?584次阅读
    在华为云上通过 Docker 容器部署 <b class='flag-5'>Elasticsearch</b> 并进行性能评测

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    本帖最后由 HarmonyOS开发者社区 于 2025-1-3 15:41 编辑 随着HarmonyOS NEXT的发布,越来越多的应用加速推进鸿蒙化。在这一过程中,如何高效迁移原有资产、简化
    发表于 01-02 17:08

    HarmonyOS Next 应用元服务开发-应用接续动态配置迁移保持迁移连续性

    保证迁移连续性,由于迁移加载时,目标端拉起的应用可能执行过自己的迁移状态设置命令(如:冷启动时目标端在onCreate中设置了INACTIVE;热启动时对端已打开了不可迁移的页面,
    发表于 12-30 10:30

    构建高效搜索解决方案Elasticsearch &amp; Kibana 的完美结合

    前言 构建高效搜索解决方案,FlexusX 服务器与 Elasticsearch & Kibana 的完美结合,为企业带来云端搜索新体验。FlexusX 实例以其卓越性能与灵活扩展性,确保高并发搜索
    的头像 发表于 12-27 13:48 ?458次阅读
    构建高效搜索解决<b class='flag-5'>方案</b>,<b class='flag-5'>Elasticsearch</b> &amp; Kibana 的完美结合

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据文件资产迁移

    使用分布式数据对象迁移数据,当需要迁移数据较大(100KB以上)或需要迁移文件时,可以使用分布式数据
    发表于 12-24 10:11

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据

    使用分布式数据对象迁移数据,当需要迁移数据较大(100KB以上)或需要迁移文件时,可以使用分布式数据
    发表于 12-24 09:40

    MySQL数据迁移的流程介绍

    本文介绍了一次 MySQL 数据迁移的流程,通过方案选型、业务改造、双写迁移最终实现了亿级数据迁移
    的头像 发表于 11-25 09:20 ?612次阅读
    MySQL<b class='flag-5'>数据</b><b class='flag-5'>迁移</b>的流程介绍

    Elasticsearch 再次开源

    Elasticsearch 和 Kibana 又可以被称为开源了。很难表达这句话让我有多高兴。我激动得简直要跳起来了。我们 Elastic 的所有人都是如此。开源是我的 DNA。这也是Elastic的DNA。能够再次将 Elasticsearch 称为开源,我感到非常高兴
    的头像 发表于 11-13 12:14 ?505次阅读
    <b class='flag-5'>Elasticsearch</b> 再次开源

    emc数据迁移工具的使用指南

    全球领先的数据存储解决方案提供商,提供了多种数据迁移工具,以帮助企业实现这一目标。 准备工作 需求分析 :在开始迁移之前,首先要明确
    的头像 发表于 11-01 15:55 ?1000次阅读

    云计算迁移的步骤与注意事项

    评估,确保其能满足业务需求。 制定迁移计划 :包括时间表、任务分解、责任分配等,确保迁移过程有条不紊。 备份数据 :使用专业备份软件或工具,对原有数据进行全面备份,确保
    的头像 发表于 10-24 09:20 ?1496次阅读

    向CC2651R3和CC2651P3的硬件迁移

    电子发烧友网站提供《向CC2651R3和CC2651P3的硬件迁移.pdf》资料免费下载
    发表于 09-26 11:03 ?0次下载
    向CC2651R<b class='flag-5'>3</b>和CC2651P<b class='flag-5'>3</b>的硬件<b class='flag-5'>迁移</b>

    龙智Atlassian ITSM解决方案、云迁移解决方案详解:高速ITSM实施+端到端的云迁移服务

    随着云计算技术的不断成熟与普及,企业对于高效、灵活的IT服务管理(ITSM)与无缝的云迁移解决方案的需求日益增长。如何有效管理复杂的IT环境,加速业务上云进程,已成为众多企业实现数字化转型、提升
    的头像 发表于 09-04 09:41 ?594次阅读
    龙智Atlassian ITSM解决<b class='flag-5'>方案</b>、云<b class='flag-5'>迁移解决方案</b>详解:高速ITSM实施+端到端的云<b class='flag-5'>迁移</b>服务

    统一日志数据流图

    统一日志数据流图 日志系统数据流图 系统进行日志收集的过程可以分为三个环节: (1)日志收集和导入ElasticSearch (2)ElasticSearch进行索引等处理 (
    的头像 发表于 08-21 15:00 ?617次阅读
    统一日志<b class='flag-5'>数据</b>流图