Elasticsearch数据迁移

前言

近期在搞ES集群的迁移,以及日常ES运维中也涉及到同集群内索引的重命名、迁移等实际场景。就考虑把实际场景模拟一下,侧重不同集群间的数据迁移,对比观察一下目前主流的数据迁移方式的优点和缺点。为之后真实迁移场景提供参考。

这次对比测试了4种方式:

  • 原生的reindex
  • 使用快照
  • 第三方:elsaticdump
  • 第三方:logstash

先上结果吧!

验证环境信息:

源es: http://192.168.1.10:9200

目标ES: http://192.168.1.20:9200

用户名密码均为: test/Aa123456

索引:my-test-index-01

ES配置: 2C8G200GB * 3

ES版本: 6.8

测试索引数据大小: 221MB

注:鉴于内部特殊环境,源集群及目标集群位于同一个网内,同一个k8s集群上。

验证结果

方式时间复杂度其他限制条件
Reindex55秒3步reindex前需要先建索引,受限于源和目标集群的带宽情况,需要重启目标集群
Snapshot&restore30秒4步需要一个源和目标集群都可用的共享存储
Elasticdump2-3分钟3步需要一台到源和目标集群网络都通的机器,受两方网络带宽影响。
Logstash1分20S2步需要一台到源和目标集群网络都通的机器、本次测试logstash版本与es要保持一致。同时jdk版本也需要支持对应的版本

结论

reindex适用普通场景,速度快。但不适用于源、目标集群网络不通的情况下。

快照恢复速度最快,但严重依赖于共享存储,且操作步骤较多,速度快慢只受集群性能和共享存储性能影响。

logstash操作步骤最少,但受限于中间机器到源、目标集群的网络限制。

elasticsdump速度最慢,适用于索引数据量小,又不方便直接操作双方集群的情况下。

验证过程

1. reindex

跨集群迁移索引数据:

远程reindex实质上等于再源集群执行有过滤条件或者无条件的_scroll查询加速写入目标集群,并且需要在目标集群配置中增加远程集群节点的白名单reindex.remote.whitelist,适用于数据量较小的场景,比如几十万数据

reindex.remote.whitelist

在目标集群控制台高级配置中,修改reindex.remote.whitelist的值为源集群的地址,格式为host:port,不需要加协议schema. 修改配置后重启es集群。

新集群创建索引

在执行reindex前需要在新集群中优先创建出来要迁移的索引; 否则dest索引不存在的话,在reindex的时候虽然系统会自动创建索引,但会引起一些错误,已发现有字段类型改变。

PUT my-test-index-01
{"settings": {"index": {"search": {"slowlog": {"threshold": {"fetch": {"warn": "4s","trace": "500ms","debug": "1s","info": "2s"},"query": {"warn": "4s","trace": "500ms","debug": "1s","info": "2s"}}}},"refresh_interval": "10s","indexing": {"slowlog": {"threshold": {"index": {"warn": "4s","trace": "500ms","debug": "1s","info": "2s"}}}},"number_of_shards": "3","number_of_replicas": "1"}},"mappings": {"data": {"_field_names": {"enabled": false},"dynamic": "false","properties": {"hostName": {"type": "keyword"},"user_pin": {"type": "keyword"},"restart": {"type": "keyword"},"ipAddress": {"type": "keyword"},"ts": {"format": "epoch_millis","type": "date"}}}},"aliases": {}
}
reindex迁移数据
POST _reindex?timeout=30m
{"source": {"remote": {"host": "http://192.168.1.10:9200","username": "test","password": "Aa123456"},"index": "my-test-index-01"},"dest": {"index":  "my-test-index-01"}
}

命令返回结果:

耗时: 55S

2. 快照迁移

es数据快照迁移适用以下场景:

  • 大量数据需要迁移,如几十GB到几百TB ,版本兼容情况可查看官方文档[1]
  • 对迁移速度要求较高的场景,且用户接受短暂停写(在我们的实践中10tb的数据,用户只需要停写10分钟)
  • 要求迁移数据比较快:快照走的是物理文件复制,所以速度上限基本是带宽的限制。

快照迁移适合数据量大,索引数量多的迁移场景;要求源集群和目的集群有共同的快照库。

这里为了测试,临时搭建了一个minio的存储。

MINIO_ROOT_USER=myadmin
MINIO_ROOT_PASSWORD=myadmin
./minio server /export/test/data  --console-address ":9001"

默认密码是minioadmin/minioadmin

注册仓库

仓库为共享文件系统或s3等存储;可以在多个集群上注册。

查看当前集群的快照库列表

GET _cat/repositories?v

注册s3类型快照库

使用上面搭建的minio作为临时对象存储

 curl -XPUT  -H 'Content-Type: application/json'  'http://test:Aa123456@192.168.1.10:9200/_snapshot/source_snapshots?timeout=60s' -d '{"type": "s3","settings": {"bucket": "test","base_path": "","endpoint": "192.168.1.30:9001","protocol": "http","compress": "true","access_key": "minioadmin","secret_key": "minioadmin","max_restore_bytes_per_sec": "200mb","max_snapshot_bytes_per_sec": "100mb"}
}'

创建快照

指定要快照的索引,支持多个索引逗号分隔;通配符。

PUT /_snapshot/source_snapshots/mytestindex01
{
"indices": "my-test-index-01",  
"ignore_unavailable": true,  
"include_global_state": false  
}

查看创建中的快照

GET _snapshot/source_snapshots/_current

查看系统中的快照

GET _snapshot/source_snapshots/

在目标集群注册库

在源集群创建完快照后,在目标集群创建同样的快照库。快照库配置信息与源集群一致。

PUT _snapshot/source_snapshots{"type": "s3","settings": {"bucket": "test","base_path": "","endpoint": "192.168.1.30:9000","protocol": "http","compress": "true","access_key": "minioadmin","secret_key": "minioadmin","max_restore_bytes_per_sec": "200mb","max_snapshot_bytes_per_sec": "100mb"}
}

从快照恢复索引数据

查看目标集群中的快照

GET _cat/snapshots/source_snapshots

恢复前确保要恢复的索引在当前集群内不存在,否则会报错。

POST _snapshot/source_snapshots/mytestindex01/_restore
{"indices": "my-test-index-01","ignore_unavailable": true,"include_global_state": false, "include_aliases": false
}

结果:

命令为异步提交,查看restore task的执行时间,因数据量小,执行时间比较短,只能估算在30s之内,没有更准确的统计方式。 但对于大规模索引的迁移,快照的方式是效率比较高的。

3.elasticdump

elasticsearch-dump可以对索引的mapping、别名和索引模版等进行迁移,它的适用场景所如:

  • 数据量较小的场景
  • 离线迁移场景

从原ES使用elsticdump将索引迁移到目标ES集群中:

这一步保证了源索引和目标索引分片数、副本数等一些非默认配置的一致性。

  elasticdump \--input=http://test:Aa123456@192.168.1.10:9200/my-test-index-01\--output=http://test:Aa123456@192.168.1.20:9200/my-test-index-01\--type=settings

先同步索引结构

  elasticdump \--input=http://test:Aa123456@192.168.1.10:9200/my-test-index-01\--output=http://test:Aa123456@192.168.1.20:9200/my-test-index-01\--type=mapping

成功后再同步索引内数据

前面两步执行时间很短,在实际迁移中可以忽略。

  elasticdump \--input=http://test:Aa123456@192.168.1.10:9200/my-test-index-01\--output=http://test:Aa123456@192.168.1.20:9200/my-test-index-01\--type=data --noRefresh --limit=10000

在实际迁移操作时默认参数下,迁移速度非常慢。在调整limit的值后,发现对迁移速度影响比较大,重复测试了不同limit值下的迁移速度。

迁移所需时间:

并发数数据大小开始时间结束时间耗时
100221MB17:12:0817:00:001小时48分钟
5000221MB11:34:1811:38:202分02秒
10000221MB11:23:3211:26:353分钟

验证结果:

–limit 并发数量严重影响数据迁移速度.。 并发100时,221MB数据大约需要1小时48左右才能完成迁移 。 在当前集群配置下,10000并发为上限。受index.max_result_window值限制。且最佳并发数实际依赖于集群写入性能。

附:

elasticdump本次用到参数介绍

  • –input #源集群连接地址
  • –outout #目标连接地址
  • –noRefresh #导入过程中禁用refresh,提高数据写入速度
  • –type #迁移的类型
  • –limit #每次执行操作多少条数据

4.logstash

  • 迁移全量或增量数据(前提条件需要唯一排序的字段,对于有删除操作是无法同步到目标集群),且对实时性要求不高的场景
  • 需要对迁移的数据通过 es query 进行简单的过滤的场景.
  • 需要对迁移的数据进行复杂的过滤或处理的场景.
  • 版本跨度较大的数据迁移场景,如 5.x 版本迁移到 6.x 版本或 7.x 版本.

下载安装logstash

最开始使用8.14版本的logstash迁移6.8版本的ES集群,执行过程报错退出。为避免其他干扰重新下载6.8版本的logstash进行测试。logstash适配jdk8或jdk11。

编辑配置文件

源es: http://192.168.1.10:9200

目标ES: http://192.168.1.20:9200

用户名密码均为: test/Aa123456

索引:my-test-index-01

input {        elasticsearch {            hosts => ["http://192.168.1.10:9200"]            user => "test"            password => "Aa123456"            index => "my-test-index-01"            docinfo => true            size => 5000        }}filter {        mutate {            remove_field => ["@timestamp", "@version"]        #去掉logstash添加的字段}}output {       elasticsearch {            hosts => ["http://192.168.1.20:9200"]            user => "test"            password => "Aa123456"            index => "my-test-index-01"                 document_type => "%{[@metadata][_type]}"            document_id => "%{[@metadata][_id]}"        
}

开始时间

2024-07-03T11:25:13

结束时间:

2024-07-03T11:26:34

耗时: 1分20S

结论: 也需要提前创建索引,否则会导致原索引自定义配置部分丢失。索引大小从221增加到了259; 文档数没有变。

实际迁移时,需要提前在目标集群创建好要迁移的索引。

PUT my-test-index-01
{"settings": {"index": {"search": {"slowlog": {"threshold": {"fetch": {"warn": "4s","trace": "500ms","debug": "1s","info": "2s"},"refresh_interval": "10s","number_of_shards": "3","number_of_replicas": "1"}},"mappings": {"data": {"_field_names": {"enabled": false},"dynamic": "false","properties": {"hostName": {"type": "keyword"},"user_pin": {"type": "keyword"},....."ts": {"format": "epoch_millis","type": "date"}}}},"aliases": {}
}

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

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

相关文章

Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)

基础介绍 Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:网络地址转换(Network Address Translate)数据包内容修改以及数据包过滤的防火墙功能。Netfliter框架不仅仅在ipv4中有应用,bridge,ipv4&#…

ipv6 基础学习(一)

IPv6 为什么要有IPV6? IPv4地址空间有限:IPv4使用32位地址,最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长,这些地址已经几乎耗尽。 IPv6地址空间庞大:IPv6使用128位地址,可以提供大约3.410^3…

面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里

目录 堆内存(Heap)栈内存(Stack)String字符串的hashcode缓存 在Java中,堆内存(Heap)和栈内存(Stack)是两种不同类型的内存区域。它们各自扮演着不同的角色,并…

深入理解TCP/IP协议中的三次握手

👍 个人网站:【洛秋资源小站】 深入理解TCP/IP协议中的三次握手 在计算机网络中,TCP/IP协议是通信的基石。理解TCP/IP协议中的三次握手是掌握网络通信的关键步骤之一。本文将详细解释TCP/IP协议中的三次握手过程,探讨其工作原理&…

Python面试整理-字符串处理

在Python中,字符串是一种非常重要且常用的数据类型,用于处理文本。字符串操作包括许多不同的方法,可以用来查询、修改、和处理字符串。以下是一些常用的字符串处理技术: 创建字符串 字符串可以通过单引号、双引号或三引号创建,支持多行字符串。 s1 = Hello s2 = "Wor…

操作系统安全:Windows隐藏账户的安全问题与实战操作。

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 Windows系统的…

2024-7-21 IT领域最新资讯概览

目录 微软蓝屏事件及后续影响 网络安全公司CrowdStrike的声明与股价波动 全球IT支出增长趋势 微软蓝屏事件及后续影响 事件概述: 由于网络安全公司CrowdStrike的技术更新中的“bug”,导致微软部分应用和服务出现蓝屏死机问题,进而引发了全…

VulnHub:insomnia

靶机下载地址 信息收集 主机发现和端口扫描 攻击机网段192.168.31.0/24。 # 主机发现 nmap 192.168.31.0/24 -Pn -T4 # 靶机ip:192.168.31.207 端口扫描 nmap 192.168.31.207 -A -p- -T4 经过nmap扫描发现目标主机有http服务,端口是8080。 目录扫描 访问http…

【SD】深入理解Stable Diffusion与ComfyUI的使用

【SD】深入理解Stable Diffusion与ComfyUI的使用 1. Stable Diffusion(SD)原理概述2. 各部件详解3. SD的工作流程4. ComfyUI与SD的结合5. 总结 1. Stable Diffusion(SD)原理概述 整体结构:SD不是单一模型,…

[计网04] 传输层和应用层 笔记 总结 万字详解

目录 传输层概述和功能 URL 和URI 端口号划分 套接字Socket UDP(User Datagram Protocol) UDP首部 UDP伪首部 TCP 三报文握手和四报文挥手 TCP(Transmission Control Protocol) TCP首部报文格式 TCP流量控制 cwnd&…

C语言 | Leetcode C语言题解之第273题整数转换英文表示

题目: 题解: char* singles[] {"", "One ","Two ","Three ","Four ","Five ","Six ","Seven ","Eight ","Nine "}; char* teens[] {"Ten…

【网络】socket套接字基础知识

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解并掌握socket套接字。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自:网络…

QT样式美化 之 qss入门

样例一 *{font-size:13px;color:white;font-family:"宋体"; }CallWidget QLineEdit#telEdt {font-size:24px;}QMainWindow,QDialog{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #1B2534, stop: 0.4 #010101,stop: 0.5 #000101, stop: 1.0 #1F2B…

英福康INFICON Transpector CIS2介绍PPT

英福康INFICON Transpector CIS2介绍PPT

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点,可以通过拍摄多张图像求平均值的方法来减少噪点,获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

使用dock构建基于lnmp的WrodPress

项目要求: 1.创建nginx容器环境 上传nginx.conf文件、上传阿里云镜像、上传html目录 2.准备mysql cd /opt mkdir mysql 上传my.conf文件、上传阿里云镜像、写好的Dockfile文件 3.准备php cd /opt mkdir php 上传所需文件: 构建各镜像: …

前端入门(五)之练习表格的增删改查

一、html代码&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格的增删改查</title…

【深度学习】起源:人脑的神经结构

文章目录 睁眼看世界&#xff0c;倾耳听人间脑子&#xff0c;是个好东西&#xff01;眼睛成像其它身体感触系统脑子&#xff1a;我很忙的&#xff01;脑细胞&#xff1a;脑子里的打工人生物神经元——结构生物神经元——人脑的运算单位 人脑的深度学习总结 睁眼看世界&#xff…

项目名称:C语言在线学习平台(README)

项目介绍 本项目是一个基于 SpringBoot 和 Vue 的在线学习平台&#xff0c;旨在为用户提供一个方便、高效的学 习环境。 该平台包括课程教学大纲、主讲教师介绍、教学课件及视频展示、作业管理和题库管理等功 能。 技术栈 后端&#xff1a;SpringBoot Mybatis Mysql 前端&…

RHCE(免密登录+web服务器)之小试牛刀

1、配置linux客户端免密登录服务端linux主机的root用户 2、配置web服务器&#xff0c;当访问网站www.haha.com时显示&#xff1a;haha 3、配置web服务器&#xff0c;当访问网站www.xixi.com/secret/显示&#xff1a;this is secret 本实验使用RHEL9.3和Rocky linux8操作系统 RH…