海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践

news2024/11/13 9:44:12

文章目录

  • 一.迁移背景
  • 二.迁移分析
  • 三.方案制定
    • 3.1 使用工具迁移
    • 3.2 脚本迁移
  • 四.方案建议

一.迁移背景

  1. 目前有两个es集群,版本为5.2.2和7.16.0,总数据量为700T。
  2. 迁移过程需要不停服务迁移,允许一小时不写数据,但是需要提供数据存储方案。
  3. 迁移到opensearch的版本为1.3.4。

二.迁移分析

根据迁移背景中的描述进行分析:

  1. Opensearch的版本是基于elasticsearch 7.10版本做的二次开发迭代,因此,7.16的es集群迁移到os 1.3.4属于小版本之间数据迁移,可正常迁移,但 es 5.2.2版本迁移到os 1.3.4属于跨两个大版本迁移,需要开发协助验证数据结构和数据字段类型是否完全符合。
  2. 迁移过程不停服务,700T一小时无法迁移完成,需要考虑可以先迁业务,把业务的数据存储先指向os集群,然后历史数据追加到os集群。
  3. 历史数据迁移到os过程中,可能由于一些原因失败,需要考虑迁移方案是否具备断点续传的功能。
  4. 数据量较大,如果是es迁移到es建议使用snapshot方式,但是es迁移os此工具不行,虽然官方建议使用snapshot迁移es到os,但实际测试无法迁移。

总结

  1. 5.2.2 版本需要开在os版本中验证数据格式和数据类型是否可以,以确定是否可以迁移。
  2. 700T 数据量较大,需要考虑迁移时间和数据一致性的保证。
  3. 由于数据量较大,建议os使用商业版存储或SSD固态硬盘,以提升存储效率和查询效率。

三.方案制定

3.1 使用工具迁移

由于opensearch官网建议使用snapshot方式迁移,但实际测试过程中并不能迁移数据,使用elasticdump可实现数据迁移。

在这里插入图片描述
步骤:

  1. 将业务应用程序写入es断开
  2. 将业务应用程序的写入指向新的os集群
  3. 使用elasticdump将数据分批次导出/导入集群
比如导出1年数据
elasticdump --input ./data_mapping.json --output https://admin:admin@192.168.2.200:32001/test --type=data --searchBody "{ \"query\": { \"bool\": { \"filter\": { \"range\": { \"requestTime\": { \"gt\": \"20200000000000000\", \"lt\": \"20210000000000000\" } } } } } }"

优势:

  1. 开源程序,无需考虑自研
  2. 通过查询条件实现的类似断点续传的功能

劣势:

  1. 支持性不好,若elasticdump工具问题,不能快速解决
  2. 需要对es数据很熟悉,并且数据中有可以查询时间范围的字段
  3. 对es语法了解,需要会写es查询语句,删除语法
  4. 按时间段进行导入导出数据为了较少因导入过程中故障问题,可通过查询条件删除数据在重新导入,风险较大
  5. 由于分批次,导入导出周期很长
  6. 暂不支持5.2.2的导入导出,需开发先验证数据结构和字段是否支持两个版本
  7. 时间不可控,elasticdump工具不适合大数据量导入导出,时间周期会较长

3.2 脚本迁移

在这里插入图片描述
步骤:

  1. 将业务应用程序写入es断开
  2. 将业务应用程序的写入指向新的os集群
  3. 开启数据抽取脚本,并写入kafka
  4. 开启数据写入脚本,读取kafka消息,写入os中

为什么需要kafka呢?

  1. 解耦合
    使用程序可以实现从elasticsearch集群中抽取数据直接写入到opensearch集群中,但会增加opensearch集群的压力,所以中间加上kafka消息中间件进行解耦合。
  2. 多版本共存
    若是使用的java程序,elasticsearch的客户端java依赖一般是JDK8,而opensearch官方建议使用的客户端是JDK11, 一个java程序需要解决两个版本的JDK依赖问题,所以将抽取和写入程序分离开来。
    3.降成本
    对于数据抽取脚本,只需要按照数据格式可拆分的进行数据迁移,例如使用按照时间范围以及关键字进行数据查询抽取:
        "query": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "access_time.keyword": {
                                "gte": 2023-01-01 00:00:00,
"lt": 2023-01-01 00:00:00,
                                "format": "yyyy-MM-dd HH:mm:ss"
                            }
                        }
                    }

                ],
                "filter": {
                    "term": {
                        "loglevel.keyword": "ERROR"
                    }
                }
            }
        }
}

这样每次只需改动数据抽取时间范围即可,同时将数据写入kafka中。若程序中断,可让写入脚本将消息消费完成,确定最后一条数据的写入时间,改动抽取脚本的时间范围即可再次启动抽取脚本,无需进行数据清理工作,只需等待写入完成即可。
数据写入脚本只需订阅相关topic即可,将数据写入到opensearch中,若脚本异常退出或网络中断,可重新进行消息的消费,无需考虑数据一致性问题。
优势:
1.自研脚本操作数据无需考虑版本兼容问题
2.可控数据传输(如:暂停,开始)
3.支持断点续传功能
4.无需停机迁移,业务可正常写入
5.支持性较好

劣势:
1.迁移过程应用程序读取数据问题,一段时间内无法读取到历史数据,因为在做数据同步过程,也可修改应用程序读取es集群中的历史数据

四.方案建议

综合以上优劣对比,建议使用方案3.2开发脚本进行数据迁移。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

最近,我在 Windows 系统上安装和配置 Apache Maven 时遇到了一些问题,想在此记录下我的解决历程,希望对遇到类似问题的朋友有所帮助。 问题描述 我下载了 Maven 并按照常规步骤配置了相关的环境变量。然而,在 PowerShell 中输入…

大模型,智能家居的春秋战国之交

智能家居,大家都不陌生。尽管苹果、谷歌、亚马逊等AI科技巨头,以及传统家电厂商都在积极进入这一领域,但发展了十多年之后,智能家居依然长期呈现出一种技术上人工智障、市场上四分五裂的局面。 究其原因,是此前传统家电…

【设计模式】结构型模式(四):组合模式、享元模式

《设计模式之结构型模式》系列,共包含以下文章: 结构型模式(一):适配器模式、装饰器模式结构型模式(二):代理模式结构型模式(三):桥接模式、外观…

众测遇到的一些案列漏洞

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行…

算法求解(C#)-- 寻找包含目标字符串的最短子串算法

1. 引言 在字符串处理中,我们经常需要从一个较长的字符串中找到包含特定目标字符串的最短子串。这个问题在文本搜索、基因序列分析等领域有着广泛的应用。本文将介绍一种高效的算法来解决这个问题。 2. 问题描述 给定一个源字符串 source 和一个目标字符串 targe…

ThingsBoard规则链节点:RPC Call Reply节点详解

引言 1. RPC Call Reply 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 设备控制 3.2 状态查询 3.3 命令执行 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台,提供了设备管理…

动态规划(简单多状态 dp 问题 1.按摩师 2.打家劫舍 II 3. 删除并获得点数 4.粉刷房子 5.买卖股票的最佳时机(全系列))

面试题 17.16. 按摩师213. 打家劫舍 II740. 删除并获得点数LCR 091. 粉刷房子 (原:剑指 Offer II 091. 粉刷房子)309. 买卖股票的最佳时机含冷冻期714. 买卖股票的最佳时机含手续费123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV 1.…

【VBA实战】用Excel制作排序算法动画续

为什么会产生用excel来制作排序算法动画的念头,参见【VBA实战】用Excel制作排序算法动画一文。这篇文章贴出我所制作的所有排序算法动画效果和源码,供大家参考。 冒泡排序: 插入排序: 选择排序: 快速排序:…

关于Markdown的一点疑问,为什么很多人说markdown比word好用?

markdown和word压根不是一类工具,不存在谁比谁好,只是应用场景不一样。 你写博客、写readme肯定得markdown,但写合同、写简历肯定word更合适。 markdown和word类似邮箱和微信的关系,这两者都可以通信,但微信因为功能…

区块链技术在数字版权管理中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …

基于Spring Boot的在线装修管理系统的设计与实现,LW+源码+讲解

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#…

Ollama 0.4 发布!支持 Llama 3.2 Vision,实现多模态 RAG

“ 阅读本文大概需要5分钟。 前言 最近,Ollama 推出了 0.4 版本,其中最大的亮点就是支持了 Llama 3.2 Vision 模型,该模型具备多模态特性,也就是说能够理解图像并将图像纳入提示词中进行处理,让模型更智能地处理RAG中…

关于若依500验证码问题的求助

关于若依框架中验证码出现500错误的问题,这通常表示服务器内部错误。以下是一些可能的原因及解决方案: 一、配置文件问题 .env.production文件: 确保.env.production文件中的VUE_APP_BASE_API已经修改成服务器上的域名地址,而不…

使用HtmlAgilityPack+PuppeteerSharp+iText7抓取IdentityServer4帮助文档

需要学习IdentityServer4的用法,但是在IdentityServer4帮助文档网站(参考文献1)中没有找到下载离线文档的地方,准备使用HtmlAgilityPackPuppeteerSharpiText7将网站内容抓取生成离线PDF文档,便于本机学习、查看。   …

fpga开发原理图设计仿真分析

目录 原理图设计方法的流程 仿真分析 method1. 基于向量波形的仿真方法 method2. 基于testbench的仿真方法 在Quartus Prime开发环境下,进行EDA设计的基本流程如图所示。 包括五个主要任务: (1) 建立工程 (2) 设计输入 (3) 编译、综合与适配 (4) 引脚…

Node.js——fs模块-路径补充说明

1、相对路径: ./座右铭.txt 当前目录下的座右铭.txt座右铭.txt 等效于上面的写法../座右铭.txt 当前目录的上一级目录中的座右铭.txt 2、绝对路径 D:/Program File Windows系统下的绝对路径/usr/bin Linux系统…

从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot集成RabbitMQ RabbitMQ中的一些角色: publisher:生产者 consumer:消费者 exchange个:交换机,负责消息路由 queue:队列…

比流计算资源效率最高提升 1000 倍,“增量计算”新模式能否颠覆数据分析?

作者 | 关涛 云器科技CTO 数据平台领域发展 20 年,逐渐成为每个企业的基础设施。作为一个进入“普惠期”的领域,当下的架构已经完美了吗,主要问题和挑战是什么?在 2023 年 AI 跃变式爆发的大背景下,数据平台又该如何演…

MySQL性能测试方案设计

在现代互联网系统中,数据库性能直接影响到整体应用的速度和用户体验。而MySQL作为广泛使用的关系型数据库,随着数据量和并发请求的增长,其性能问题也日益突出。今天我们将深入探讨如何设计一套高效的MySQL性能测试方案,帮助你精准…

彻底解决单片机BootLoader升级程序失败问题

文章目录 1、引言2、MicroBoot:优雅的解决升级问题问题1:bootloader 在跳转到app前没有清理干净存在的痕迹问题2: 需要 APP 传递信息给 Bootloader问题3: APP单独运行没有问题,通过Bootloader跳转到APP运行莫名死机问题…