ElasticSearch 的3种数据迁移方案

在实际工作中,我们经常会遇到需要将自建的 Elasticsearch 迁移上云,或者迁移到其他 ES 集群的情况。这时,选择合适的数据迁移方案就显得尤为重要啦。今天就来给大家介绍三种常用的迁移方案,分别是 COS 快照、logstash 和 elasticsearch - dump,小伙伴们可以根据自己的业务需求挑选哦~

如果业务可以停服或者暂停写操作,那这几种方式都可以考虑:

  1. COS 快照(Cloud Object Storage)
  2. logstash
  3. elasticsearch - dump

一、COS 快照数据备份

基于 COS 快照的迁移方式是借助 ES 的 snapshot api 接口来实现的。简单来说,就是先从源 ES 集群创建索引快照,然后在目标 ES 集群中进行恢复。不过,用这种方式迁移时,有个特别需要注意的点就是 ES 的版本问题:目标 ES 集群的主版本号(比如 5.6.4 中的 5 就是主版本号)要大于等于源 ES 集群的主版本号。而且 1.x 版本的集群创建的快照不能在 5.x 版本中恢复哦⚠️。

创建 repository 仓库

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

  • fs:共享文件系统,快照文件就存放在文件系统里。
  • url:指定文件系统的 URL 路径,支持 http、https、ftp、file、jar 这些协议。
  • s3:AWS S3 对象存储,快照存放在 S3 中,需要以插件形式支持,安装插件可以参考相关文档。
  • hdfs:快照存放在 hdfs 中,也是以插件形式支持,安装插件可参考对应文档。
  • cos:快照存放在腾讯云 COS 对象存储中,同样以插件形式支持,安装插件后要重启集群才能用哦,安装方法可以参考相关文档。

如果是从自建 ES 集群迁移到腾讯云的 ES 集群,直接用 COS 类型仓库就很方便。但得先在自建 ES 集群上安装 cos - repository 插件,之后把自建 ES 集群的数据备份到 COS,再在腾讯云的 ES 集群中恢复就行啦。

要是自建 ES 集群不方便安装 cos - repository 插件,但已经安装了 repository - s3 或者 repository - hdfs 插件,那可以先把数据备份到 S3 或者 HDFS 中,再把备份好的文件上传到腾讯云 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 后缀的哦。
  • region:COS Bucket 地域,一定要和 ES 集群在同一个地域。
  • base_path:备份目录。

在源 ES 集群中创建 snapshot

调用 snapshot 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 个都会被恢复。还可以用附加选项对索引重命名,比如想恢复单个索引并换个名字:

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

二、logstash工具

logstash 可以从一个 ES 集群读取数据再写入到另一个 ES 集群,所以也能用来做数据迁移。不过用它迁移前,有几点要注意:

  • 要在和腾讯云 ES 集群相同的 VPC 下创建 CVM,部署 logstash,而且这个 CVM 得能访问到源 ES 集群。
  • 部署 logstash 的 CVM 配置最好高一点,比如 16 核 CPU、32GB 内存。
  • logstash 应该和目标 ES 集群的主版本号相同,比如目标是 6.8.2 版本,logstash 也得用 6.8 版本。
  • 要特别注意索引 type 的问题,不同版本的 ES 对索引 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 集群的所有索引同步到目标集群,也可以设置只同步指定索引,更多功能可以去查阅相关文档。

三、elasticsearch - dump工具

elasticsearch - dump 是一款开源的 ES 数据迁移工具,github 上有它的地址

安装 elasticsearch - dump

它是用 node.js 开发的,可以用 npm 包管理工具直接安装:

npm install elasticdump -g

主要参数说明

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

如果集群有安全认证,在对应的 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

迁移单个索引

下面这个操作是把集群 172.16.0.39 中的 companydatabase 索引迁移到集群 172.16.0.20。首先要迁移索引的 settings,不然直接迁移 mapping 或者 data 会丢失原有配置,当然也可以在目标集群先创建好索引再同步:

elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settingselasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mappingelasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data

迁移所有索引

这个操作是把集群 172.16.0.39 中的所有索引迁移到集群 172.16.0.20,但不能迁移索引配置,得单独对每个索引迁移配置,或者在目标集群先创建好索引:

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

四、总结

  1. elasticsearch - dump 和 logstash 做跨集群数据迁移时,要求执行迁移任务的机器能同时访问两个集群,所以更适合源和目标 ES 集群在同一网络的情况。而 snapshot 方式是完全离线的,没有这个限制,适合跨云厂商迁移,比如从阿里云 ES 集群迁移到腾讯云 ES 集群,当然也可以打通网络实现互通,但成本较高。
  2. elasticsearch - dump 类似 MySQL 的 mysqldump,是逻辑备份,需要一条条导出再导入,适合数据量小的场景;
  3. snapshot 方式则适合数据量大的场景;

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

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

相关文章

MySQL 中的“双路排序”与“单路排序”:原理、判别与实战调优

一句话导读 ORDER BY 不能走索引时,MySQL 会在 Server 层做一次 filesort。内部实现分 单路(全字段) 与 双路(rowid) 两种;了解它们的触发条件、判别方法与调优思路,是 SQL 性能优化的必修课。一…

OpenLayers 综合案例-信息窗体-弹窗

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二 作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路! OpenLayers…

GaussDB 开发基本规范

1 集中式1.1数据库价值特性推荐特性分类特性列表说明表类型PARTITION表数据分区存储引擎行存储按行顺序存储表,建议点查,增删改操作较多场景下使用事务事务块显式启动事务单语句事务不显式启动事务,单语句即为事务扩容在线扩容扩节点和数据重…

工作中使用git可能遇到的场景

1.main历史发布版本出问题需要查看,怎么切换历史发布版本?git reset --hard commitid 更新本地库和代码2.A分支的代码已经做过一些功能,想迁移到B分支当前在A分支git checkout B (切换到B分支)git cherry-pick A的com…

【Spring AI】本地大型语言模型工具-Ollama

Ollama 是一个专注于在本地运行大型语言模型&#xff08;LLM&#xff09;的工具&#xff0c;支持多种开源模型&#xff08;如 Llama 3、Mistral、Gemma 等&#xff09;&#xff0c;提供简单的命令行和 API 接口。<dependency><groupId>org.springframework.ai</…

电机S加减速

STM32步进电机S型加减速算法_stm32___build__-2048 AI社区 以上&#xff0c;电机加减速说的非常清楚&#xff0c;收藏点赞&#xff01;

一、初识 Linux 与基本命令

作者&#xff1a;IvanCodes 日期&#xff1a;2025年7月28日 专栏&#xff1a;Linux教程 思维导图 一、Linux 简介 1.1 什么是 Linux? Linux 是一种自由、开源的类Unix操作系统内核&#xff0c;由林纳斯托瓦兹 (Linus Torvalds) 在1991年首次发布。我们通常所说的 “Linux 系统…

解决angular与jetty websocket 每30s自动断连的问题

背景&#xff1a;前端&#xff1a;angular 12&#xff0c;websocket接口由lib.dom.d.ts提供后端&#xff1a;java&#xff0c;websocket接口由jetty 12提供问题现象&#xff1a;前端连上server后&#xff0c;每隔30s就会断开&#xff0c;由于长时间空闲&#xff0c;会导致webso…

【机器学习深度学习】模型私有化部署与微调训练:赋能特定问题处理能力

目录 前言 一、私有化部署的背景&#xff1a;通用能力 ≠ 企业实用 暴露问题 二、微调训练的核心目的 2.1 动作一&#xff1a;私有化部署&#xff08;Private Deployment&#xff09; 2.2 动作二&#xff1a;领域微调&#xff08;Domain Fine-Tuning&#xff09; 2.3 微…

Seq2Seq学习笔记

Seq2Seq模型概述Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;是一种基于深度学习的序列生成模型&#xff0c;主要用于处理输入和输出均为序列的任务&#xff0c;如机器翻译、文本摘要、对话生成等。其核心思想是将可变长度的输入序列映射为另一个可变长度的输出序列。…

react useId

useId useId 是 React 18 引入的一个内置 Hook&#xff0c;用于生成唯一且稳定的 ID &#xff0c; 主要用于&#xff0c;解决在客户端和服务器端渲染&#xff08;SSR&#xff09;时&#xff0c;动态生成 ID 可能导致的冲突问题&#xff1b; 特别适合用于&#xff0c;需要关联 H…

排水管网实时监测筑牢城市安全防线

排水管网的实时监测工作&#xff0c;强调其对于保障城市安全的重要作用。“排水管网”明确了具体的关注对象&#xff0c;它是城市基础设施的重要组成部分&#xff0c;承担着雨水、污水排放等关键功能。“实时监测”突出了监测的及时性和持续性&#xff0c;意味着能够随时获取排…

SZU大学物理实验报告|电位差计

写在前面&#xff1a;博文里放图片&#xff0c;主要省去了对文档的排版时间&#xff0c;实验还是要自己做的&#xff0c;反正都要去实验室上课&#xff0c;顺带锻炼下动手能力。有些结果是实验手写的&#xff0c;所以看不到&#xff0c;有结果的可以对下结果差的不太多就行&…

RoPE简单解析

文章目录简介拆解一些tricks简介 因为RoPE的优异性能&#xff0c;其已成为各种大模型中位置编码的首选&#xff0c;包括多模态模型&#xff1b;在一些多模态模型或视频理解模型中&#xff0c;甚至会用到多维度RoPE。虽然RoPE已广泛应用&#xff0c;之前也看了不少针对其原理解…

windows 获取 APK 文件的包名和启动 Activity 名称

使用 aapt 命令确保环境变量配置正确&#xff1a;首先需要确保你的系统环境变量中包含了 Android SDK 的 build-tools 目录路径。这是因为 aapt 工具位于该目录下。运行命令&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;&#xff0c;然后输入以下命令来查看 APK 的详…

【Mac版】Linux 入门命令行快捷键+联想记忆

Linux Mac 用户终端命令行快捷键 符号速查全解作为一个刚接触 Linux 和终端的 macOS 用户&#xff0c;常常被命令行的各种快捷键和符号弄得头晕脑胀&#xff0c;本文将带你系统地掌握命令行中最常用的快捷键和符号&#xff0c;并通过逻辑联想帮助你轻松记住每一个组合。一、基…

AUTOSAR Mcal Dio - 模块介绍 + EB配置工具介绍

文章目录1. 模块简介2. 主要功能3. 缩略语4. API接口5. 功能介绍5.1. ChannelGroup5.2. Dio_MaskedWritePort6. 序列图6.1.读GPIO电平6.2. 设置GPIO电平7. EB 工具配置7.1.General7.2.DioPort8. 参考资料1. 模块简介 Dio&#xff0c;全称“Digital Input Output”。Dio模块&am…

ICT模拟零件测试方法--晶体管测试

ICT模拟零件测试方法–晶体管测试 文章目录ICT模拟零件测试方法--晶体管测试晶体管测试晶体管测试配置晶体管测试配置晶体管测量选项晶体管测试 i3070 在线测试软件为每个晶体管提供两种测试&#xff1a; 使用二极管测试对晶体管的两个 PN 结进行测试。这是检查设备存在的快速…

AI算法实现解析-C++实例

基于C++实现的AI 以下是基于C++实现的AI/机器学习相关示例,涵盖基础算法、计算机视觉、自然语言处理等领域,适合不同阶段的学习者参考: 基础机器学习算法 线性回归 使用梯度下降法预测连续值,核心公式: 损失函数: 逻辑回归 二分类问题实现,Sigmoid函数: K-Means…

亚马逊云科技实战架构:构建可扩展、高效率、无服务器应用

对于今天的开发者、架构师和技术爱好者而言&#xff0c;云计算早已超越了简单的“虚拟机租赁”或“服务器托管”阶段。它已经演化为一套丰富、强大且精密的工具集&#xff0c;能够以前所未有的方式设计、部署和扩展应用程序。真正的云原生思维&#xff0c;是掌握并运用多种架构…