Elasticsearch7.x 集群迁移文档
一、集群样例信息
集群名称:escluster-ali-test
1、源集群:(source_cluster)
| 节点IP | 节点名称 | 节点角色 | 是否为master节点 |
|---|---|---|---|
| 10.200.112.149 | es2.gj1.china-job.cn | data,master | 是 |
| 10.200.112.151 | es1.gj1.china-job.cn | data,master | 否 |
| 10.200.112.153 | es3.gj1.china-job.cn | data,master | 否 |
2、目标集群:(target_cluster)
| 节点IP | 节点名称 | 节点角色 | 是否为master节点 |
|---|---|---|---|
| 172.31.2.84 | es1.gj2.china-job.cn | data,master | 是 |
| 172.31.0.147 | es2.gj2.china-job.cn | data,master | 否 |
| 172.31.0.94 | es3.gj2.china-job.cn | data,master | 否 |
二、操作步骤
1、集群改造
源集群和目标集群合并成一个大集群,修改目标集群的配置信息。
1.1、目标集群改造
- 关闭目标集群(配置变更前需保证集群是关闭的)
- 修改目标集群所有节点的集群名称,与源集群名称一样 cluster.name: target_cluster
- 修改目标集群所有节点dscovery.zen.ping.unicast.hosts:,把源集群节点IP加入。
##指向老节点
cluster.initial_master_nodes: [“es1.gj1.china-job.cn”,“es2.gj1.china-job.cn”,“es3.gj1.china-job.cn”]
discovery.zen.ping.unicast.hosts: [“10.200.112.149”, “10.200.112.151”,“10.200.112.153”,“172.31.2.84”, “172.31.0.147”,“172.31.0.94”]
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
cluster.initial_master_nodes: - master-node-a
- master-node-b
- master-node-c
1.2、关闭源集群索引均衡功能
防止目标集群节点还未全部加入完成,数据开始迁移。
curl -XPUT "http://10.200.112.149:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{"transient" :{"cluster.routing.rebalance.enable" : "none"}
}'
1.3、启动目标集群加入到源集群
同时保证集群运行的状态为green。
1.4、检查
检查新集群健康状态、节点信息、索引状态
curl -XGET "http://10.200.112.149:9200/_cluster/health?pretty"
curl -XGET "http://10.200.112.149:9200/_cat/nodes?v"
curl -XGET "http://10.200.112.149:9200/_cat/indices?v"
2、数据迁移
1、均衡开启和节点下线
开启均衡和源集群节点数据下线,数据会迁移到目标集群
curl -XPUT "http://172.31.2.84:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"transient": {"cluster.routing.allocation.exclude._ip": "10.200.112.149,10.200.112.151,10.200.112.153","cluster.routing.rebalance.enable" : "all"}
}'或者
curl -XPUT "http://172.31.2.84:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"transient": {"cluster.routing.allocation.exclude._name": "es2.gj1.china-job.cn,es1.gj1.china-job.cn,es3.gj1.china-job.cn","cluster.routing.rebalance.enable" : "all"}
}'
2、检查数据迁移状态,节点迁移结束标准:
curl -X GET '172.31.2.84:9200/_nodes/10.200.112.149/stats/indices/docs?pretty'
curl -X GET '172.31.2.84:9200/_nodes/10.200.112.151/stats/indices/docs?pretty'
curl -X GET '172.31.2.84:9200/_nodes/10.200.112.153/stats/indices/docs?pretty'
源集群所有节点数据迁移完成,执行结果都为:
"indices" : {"docs" : {"count" : 0,"deleted" : 0}}
3、参数调整
迁移中,可能有IO,网络资源不足情况,可以做一些调整https://www.elastic.co/guide/en/elasticsearch/reference/6.5/shards-allocation.html
- cluster.routing.allocation.node_concurrent_incoming_recoveries
- cluster.routing.allocation.node_concurrent_outgoing_recoveries
- cluster.routing.allocation.node_concurrent_recoveries
- cluster.routing.allocation.node_initial_primaries_recoveries
curl -XPUT "http://172.31.2.84:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"transient": {"cluster.routing.allocation.cluster_concurrent_rebalance": 6,"cluster.routing.allocation.node_concurrent_recoveries": 10}
}'
4、调整恢复速度
如果索引恢复速度慢,可以对恢复速度进行修改:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/recovery.html
- indices.recovery.max_bytes_per_sec
curl -XPUT "http://172.31.2.84:9200/_cluster/settings?flat_settings=true&pretty" -H 'Content-Type: application/json' -d'
{"transient": {"indices.recovery.max_bytes_per_sec": "60mb"}
}'
三、更改客户端连接到目标集群节点
将所有连接迁移ES集群的客户端应用ES集群连接配置,由老集群节点调整为新集群节点信息,即:“10.200.112.149”, “10.200.112.151”,“10.200.112.153” 变更为 “172.31.2.84”, “172.31.0.147”,“172.31.0.94”
客户端切换完成后,检查客户端服务与ES集群连接是否正常,对ES的读写是否异常。
四、更改新节点配置文件,并重启(业务需要停止读写)
cluster.initial_master_nodes: [“es1.gj2.china-job.cn”,“es2.gj2.china-job.cn”,“es3.gj2.china-job.cn”,“es3.gj1.china-job.cn”]
discovery.zen.ping.unicast.hosts: [“10.200.112.149”, “10.200.112.151”,“10.200.112.153”,“172.31.2.84”, “172.31.0.147”,“172.31.0.94”]
五、源集群关闭
1、先关闭源集群非master节点
同时检查当前运行集群状态是否为green;如果出现异常,停止操作,恢复当前关闭节点。
| 操作顺序 | 操作动作 |
|---|---|
| 1 | 10.200.112.151 |
| 2 | 10.200.112.153 |
2、最后关闭源集群master节点
[10.200.112.149, 10.200.112.151,10.200.112.153,172.31.2.84, 172.31.0.147,172.31.0.94]
同时检查当前运行集群状态是否为green。如果出现异常,可以配置discovery.zen.ping.unicast.hosts: [“10.200.112.149”, “10.200.112.151”,“10.200.112.153”,“172.31.2.84”, “172.31.0.147”,“172.31.0.94”],恢复当前关闭节点。
| 操作顺序 | 操作动作 |
|---|---|
| 1 | 10.200.112.149 |
3、检查
关闭所有源集群节点后,检查目标集群是否健康,索引数据是否正常;如果没有问题,分离成功,数据迁移完毕。
六、更改新节点配置文件,并重启
cluster.initial_master_nodes: [“es1.gj2.china-job.cn”,“es2.gj2.china-job.cn”,“es3.gj2.china-job.cn”]
discovery.zen.ping.unicast.hosts: [“172.31.2.84”, “172.31.0.147”,“172.31.0.94”]
七、恢复目标集群配置正常
1、取消节点下线配置
curl -XPUT "http://172.31.2.84:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"transient": {"cluster.routing.allocation.exclude._name": null}
}'curl -XPUT "http://172.31.2.84:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"transient": {"cluster.routing.allocation.cluster_concurrent_rebalance": null,"cluster.routing.allocation.node_concurrent_recoveries": null}
}'
八、可能风险
- 在迁移数据时,ES节点物理机出现异常,丢失数据
- 网络出现异常,出现脑裂
相关文章:
Elasticsearch7.x 集群迁移文档
一、集群样例信息 集群名称:escluster-ali-test 1、源集群:(source_cluster) 节点IP节点名称节点角色是否为master节点10.200.112.149es2.gj1.china-job.cndata,master是10.200.112.151es1.gj1.china-job.cndata,master否10.200.112.153es…...
高空抛物检测算法的应用场景解析
高空抛物事件频发,对公众安全构成严重威胁。无论是居民区还是商业中心,从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主,无法在事发时及时预警和干预。为应对这一难题,视觉分析技术的发展为高…...
Leetcode 无重复字符的最长子串
算法思想: 滑动窗口:通过 start 和 end 来维护一个滑动窗口,start 指向当前窗口的起点,end 是当前窗口的末尾。滑动窗口中的字符都是无重复的。哈希表 charIndexMap:用于存储每个字符及其最近一次出现的位置。更新起始…...
用命令行的方式启动.netcore webapi
用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为: dotnet 项目启动文件.dll --urls"ht…...
Spring6详细学习笔记(IOC+AOP)
一、Spring系统架构介绍 1.1、定义 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。Spring官网 Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦…...
@RequestMapping 基于哪个库进行通信
RequestMapping 是 Spring Framework 中用于处理 HTTP 请求的注解,主要用于定义控制器方法的请求映射。它并不直接基于某个特定的通信库,而是依赖于 Spring MVC 框架的核心功能。 1. Spring MVC RequestMapping 是 Spring MVC 的一部分,Spr…...
GPIO(General Purpose Input/Output)输入/输出
GPIO最简单的功能是输出高低电平;GPIO还可以被设置为输入功能,用于读取按键等输入信号;也可以将GPIO复用成芯片上的其他外设的控制引脚。 STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO,其余每组IO有…...
两个pdf合并成一个pdf,这些pdf合并小技巧了解下
在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个文件的情况。这不仅可以提高文件管理的效率,还能让信息展示更加集中和便捷。今天就来给大家分享几种非常简单便捷的PDF合并小技巧,一起来学习下吧。 方法一:WPS WP…...
Transformer学习(2):自注意力机制
回顾 注意力机制 自注意力机制 自注意力机制中同样包含QKV,但它们是同源(Q≈K≈V),也就是来自相同的输入数据X,X可以分为 ( x 1 , x 2 , . . , x n ) (x_1,x_2,..,x_n) (x1,x2,..,xn)。 而通过输入嵌入层(input embedding),…...
分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序
分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序 文章目录 一、基本原理1. 粒子群优化算法(PSO)2. 径向基神经网络(RBF)PSO-RBF模型流程总结 二、实验结果三、核心代码…...
【React】Vite 构建 React
项目搭建 vite 官网:Vite 跟着文档走即可,选择 react ,然后 ts swc。 着重说一下 package-lock.json 这个文件有两个作用: 锁版本号(保证项目在不同人手里安装的依赖都是相同的,解决版本冲突的问题&am…...
算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
300. 最长递增子序列 1.dp定义:dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式:if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较,而是我们要取dp[j] 1的最大值…...
【linux】一种基于虚拟串口的方式使两个应用通讯
在Linux系统中,两个应用之间通过串口(Serial Port)进行通信是一种常见的通信方式,特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南,说明如何在Linux中…...
并行程序设计基础——并行I/O(3)
目录 一、多视口的并行文件并行读写 1、文件视口与指针 1.1 MPI_FILE_SET_VIEW 1.2 MPI_FILE_GET_VIEW 1.3 MPI_FILE_SEEK 1.4 MPI_FILE_GET_POSTION 1.5 MPI_FILE_GET_BYTE_OFFSET 2、阻塞方式的视口读写 2.1 MPI_FILE_READ 2.2 MPI_FILE_WRITE 2.3 MPI_FILE_READ_…...
性能测试-jmeter脚本录制(十五)
一、jmeter脚本录制(不推荐)简介: 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前,修改提示文字...
关系型数据库 - MySQL I
MySQL 数据库 MySQL 是一种关系型数据库。开源免费,并且方便扩展。在 Java 开发中常用于保存和管理数据。默认端口号 3306。 MySQL 数据库主要分为 Server 和存储引擎两部分,现在最常用的存储引擎是 InnoDB。 指令执行过程 MySQL 数据库接收到用户指令…...
解锁AI写作新境界:5款工具让你的论文创作事半功倍
在这个数字化飞速发展的时代,人工智能(AI)已经不再是科幻小说中的幻想,而是实实在在地融入了我们的日常生活。特别是在学术领域,AI技术的介入正在改变传统的论文写作方式。你是否还在为撰写论文而熬夜苦战?…...
一文读懂多组学联合分析产品在医学领域的应用
疾病的发生和发展通常涉及多个层面的生物学过程,包括基因表达、蛋白质功能、代谢物变化等。传统的单一组学研究只能提供某一层面的信息,而多组学关联分析能够综合多个层面的数据,提供更全面、更深入的疾病理解。例如,通过分析患者…...
js react 笔记 2
起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块 const { randomUUID } require(crypto);const uuid randomUUID(); console.log(uuid); // 输出类似 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d 2. 使用 props, 传递参数…...
快速使用react 全局状态管理工具--redux
redux Redux 是 JavaScript 应用中管理应用状态的工具,特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树(state tree)中,状态只能通过触发特定的 action 来更新…...
不只是CT重建:手把手教你用RTK+ITK+VS2022搭建可扩展的医学影像处理开发环境
构建医学影像算法开发平台:RTKITKVS2022全流程实战指南 医学影像处理领域正迎来前所未有的技术革新,从传统的CT重建到三维可视化、病灶自动检测等高级应用,开发者需要一套稳定且可扩展的开发环境。本文将带您从零开始,在Windows平…...
基于 YOLOv8 的猫狗图像分类项目全流程复盘
一、项目背景目标与原理随着计算机视觉技术的快速发展,图像分类作为深度学习的基础任务,在智能监控、内容审核等领域有着广泛应用。本项目以猫狗二分类为目标,基于 YOLOv8 轻量级图像分类模型,完整实现了从环境搭建、数据集处理、…...
从零打造会发光的航天飞机模型:焊接入门与PCB组装实战
1. 项目概述:从零打造一台会发光的航天飞机模型如果你对电子制作感兴趣,或者一直想亲手焊接点什么,但又觉得从零开始画电路板、写代码门槛太高,那么这个Space Shuttle Discovery焊接套件绝对是为你量身定做的“入门神作”。它巧妙…...
AI 说错了怎么办——给生成性 Agent 装上 Self-RAG 自审循环
AI 说错了怎么办——给生成性 Agent 装上 Self-RAG 自审循环Agent 早就跑通了,但有一条横切线一直没单独写过:深度阅读那种动辄一千多字的输出,怎么知道 LLM 是不是在自圆其说。这周回过头来补这一篇,顺便把本周做的几个小改动一并…...
告别预编译包!手把手教你为Qt6项目定制编译OpenCV,解锁WITH_QT支持
告别预编译包!手把手教你为Qt6项目定制编译OpenCV,解锁WITH_QT支持 在计算机视觉开发领域,OpenCV无疑是使用最广泛的库之一。然而,许多开发者可能没有意识到,直接从官网下载的预编译版本OpenCV可能无法充分发挥其与Qt框…...
别再只会用DC-DC了!手把手教你用电荷泵搞定液晶屏的VGH和VGL电压
电荷泵实战:低成本实现LCD屏VGH/VGL电压的工程方案 在TFT-LCD驱动电路设计中,VGH(栅极开启电压)和VGL(栅极关闭电压)的生成一直是硬件工程师面临的挑战。传统方案多依赖DC-DC转换器,但面对16.4V…...
CAXA 中心线
位置命令属性自由(方式)1、触发命令;2、属性如下;3、点击对象;(例如这里点击圆弧)4、输入定位点,或移动鼠标;5、点击确定中心线大小;指定延长线长度ÿ…...
NotebookLM辅助文献综述全链路拆解(2024最新版:支持arXiv/DOI/中文知网多源解析)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM文献综述辅助的范式变革 NotebookLM 是 Google 推出的基于用户自有文档的 AI 助手,其核心能力在于对上传 PDF、TXT 等学术文献进行语义索引与上下文感知问答,彻底重构…...
基于Vercel AI SDK与Next.js 14构建智能编程助手:从架构到部署实战
1. 项目概述:一个面向开发者的AI编程助手脚手架最近在GitHub上看到一个挺有意思的项目,叫vercel-labs/coding-agent-template。光看名字,你大概能猜到,这是一个跟AI编程助手相关的模板项目。没错,它本质上是一个预先配…...
杰理之满电后每个耳机功耗在20UA到30UA 处理方法【篇】
下拉200K电阻要开启...
