【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


附录-版本升级指南

  • 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南
    • 1. 升级必要性分析
      • 1.1 版本特性对比
      • 1.2 兼容性评估矩阵
    • 2. 预升级准备清单
      • 2.1 环境检查表
      • 2.2 数据备份策略
    • 3. 分阶段升级流程
      • 3.1 滚动升级步骤(零停机)
      • 3.2 关键操作指令
    • 4. 升级后验证体系
      • 4.1 核心功能验证表
      • 4.2 性能基准对比
    • 5. 回退方案设计
      • 5.1 快速回退流程
      • 5.2 回退检查清单
    • 6. 常见问题解决方案
      • 6.1 典型问题处理矩阵
      • 6.2 关键日志分析
      • Elasticsearch 常用结构化查询参数

3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南

  • Elasticsearch版本升级核心流程与关键节点
开始
环境准备
兼容性检查
数据备份
集群预热
滚动升级
配置调整
功能验证
性能测试
监控与优化
文档更新
结束
插件兼容性检查
查询DSL验证
配置参数审计
快照备份
数据校验
停止节点服务
升级二进制文件
启动节点并验证
循环所有节点
移除弃用配置
启用新特性
核心API测试
集群健康检查
Rally基准测试
压力测试工具
监控集群状态
调整JVM参数
优化分片分配
  • 风险控制矩阵:
风险点预防措施应急方案
插件不兼容提前测试所有插件回滚到7.x并隔离问题插件
数据损坏双重备份+校验从快照恢复数据
性能下降预留30%资源+预热调整JVM参数+分片分配策略
配置错误版本差异文档对照使用默认配置重新初始化
  • 升级验证清单
      1. 集群健康状态(GET /_cluster/health
      1. 节点版本一致性(GET /_nodes/stats
      1. 索引元数据校验(GET /_cat/indices
      1. 搜索功能测试(GET /_search
      1. 写入性能验证(POST /_bulk
      1. 安全插件验证(GET /_security/_authenticate
  • 建议在升级过程中使用以下监控指标:
{// 定义一个包含多个监控指标的数组,用于在 Elasticsearch 集群升级过程中对集群的运行状态进行监控"metrics": [// 监控 JVM 堆内存的使用百分比// 该指标反映了 Elasticsearch 节点上 Java 虚拟机堆内存的使用情况// 过高的堆内存使用百分比可能会导致频繁的垃圾回收,甚至可能引发内存溢出错误,影响集群的性能和稳定性// 一般建议将该指标控制在 70% - 80% 以下,以便为系统预留足够的内存空间"jvm.mem.heap_used_percent",// 监控集群中正在初始化的分片数量// 在集群升级、节点重启或数据重新分配等操作过程中,会有分片进入初始化状态// 过多的初始化分片可能会导致集群资源被大量占用,影响集群的响应速度和可用性// 通过监控该指标,可以及时发现分片初始化过程中是否存在异常情况"cluster.routing.allocation.initializing_shards",// 监控索引搜索操作的执行时间(以毫秒为单位)// 该指标反映了搜索查询在 Elasticsearch 中的执行效率// 搜索查询时间过长可能意味着查询语句复杂、索引结构不合理或集群资源不足等问题// 对该指标进行监控有助于及时发现搜索性能瓶颈,并采取相应的优化措施"indices.search.query_time_in_millis",// 监控搜索线程池的活跃线程数量// 搜索线程池用于处理搜索请求,活跃线程数量反映了当前正在处理搜索请求的线程数量// 如果活跃线程数量持续过高,可能表示搜索请求过于频繁,导致线程池资源耗尽,影响搜索性能// 监控该指标可以帮助我们了解搜索线程池的使用情况,合理调整线程池配置或优化搜索请求负载"thread_pool.search.active"]
}

1. 升级必要性分析

1.1 版本特性对比

功能模块7.x 版本能力8.x 版本增强业务影响评级
安全体系TLS可选TLS默认启用 + 新密码套件⭐⭐⭐⭐⭐
搜索性能传统BM25支持ANN向量搜索⭐⭐⭐⭐
存储效率标准压缩默认ZSTD压缩(提升20%)⭐⭐⭐⭐
运维监控X-Pack基础监控集成APM+机器学习告警⭐⭐⭐
  • 什么是 ES ANN 向量搜索
    • 在 Elasticsearch(ES)中,ANN(Approximate Nearest Neighbor,近似最近邻)向量搜索是一种用于高效查找与给定查询向量最相似的向量数据的技术。在传统的基于关键词的搜索无法满足复杂的语义搜索需求时,向量搜索便发挥出重要作用。例如在图像、音频、文本等领域,通过将这些数据转换为向量表示,利用向量之间的相似度来进行搜索,能实现更精准、更智能的搜索结果
    • ANN 向量搜索的应用场景
      • 图像搜索。用户上传一张图片,系统通过提取图片的向量特征,在 Elasticsearch 中搜索与之相似的图片。
      • 文本语义搜索。输入一段文本,系统可以找到语义相似的其他文本,而不仅仅是关键词匹配的文本。
      • 推荐系统。根据用户的历史行为或偏好生成向量,在商品、文章等数据的向量库中搜索相似的向量,为用户提供个性化推荐。

1.2 兼容性评估矩阵

组件7.17兼容性8.0兼容性风险级别处理方案
JDK版本8/1117+提前升级JDK
Logstash插件部分兼容需7.17+插件版本升级
Kibana仪表盘兼容需重建导出/导入NDJSON
自定义分词器需要验证需要验证测试验证+备用方案
  • NDJSON(Newline-Delimited JSON)
    • 一种轻量级的数据交换格式,由多行独立的 JSON 对象组成,每行一个完整的 JSON 文档,通过换行符(\n)分隔。这种格式特别适合处理日志、流式数据或需要批量处理的结构化数据
  • NDJSON 核心特性
    • 轻量性:无需复杂的解析器,逐行读取即可处理。
    • 流式处理:支持实时数据流处理,适合日志收集、消息队列等场景。
    • 扩展性:每行独立,便于分布式处理。
    • 兼容性:可通过工具轻松转换为 CSV、XML 等格式。
  • NDJSON 在 Elasticsearch 中的应用
    • 批量数据导入。通过 Elasticsearch 的 Bulk API 导入 NDJSON 格式数据:
      curl -X POST "localhost:9200/_bulk" -H "Content-Type: application/x-ndjson" --data-binary @data.ndjson
      
    • 日志处理。在 Logstash 中使用 json_lines codec 处理 NDJSON 日志:
      input {file {path => "/var/log/app.log"codec => json_lines}
      }output {elasticsearch {hosts => ["localhost:9200"]index => "logs-%{+YYYY.MM.dd}"}
      }
      
    • 注意事项
      • 特殊字符处理:确保每行是有效的 JSON,注意转义换行符 \n 和反斜杠 \\
      • 数据完整性:避免在传输过程中丢失换行符,导致解析错误。
      • 性能优化对于大规模数据,建议分批次处理,避免内存溢出。
    • 与其他格式对比
      格式优点缺点适用场景
      NDJSON轻量、流式处理不支持嵌套结构日志、实时数据流
      JSON结构灵活解析复杂、不适合流式处理API 响应、配置文件
      CSV易于表格处理类型不明确数据分析、报表生成

2. 预升级准备清单

2.1 环境检查表

# 检查集群健康状态
GET _cluster/health?filter_path=status,*_active_shards# 验证索引兼容性
GET _index_template?filter_path=index_templates.name,index_templates.index_template.template# 检查废弃API使用情况
GET _nodes/usage?filter_path=.*.deprecations

2.2 数据备份策略

// 向 _snapshot/backup_repo/pre_upgrade_bk_2023 端点发送 PUT 请求,目的是在名为 backup_repo 的快照仓库中创建一个名为 pre_upgrade_bk_2023 的快照
PUT _snapshot/backup_repo/pre_upgrade_bk_2023
{// 指定要包含在快照中的索引// 使用 "*" 表示包含集群中的所有索引,这样会对集群内的所有数据进行备份"indices": "*",// 设置是否忽略不可用的索引// 当设置为 true 时,如果某些索引不可用(例如处于损坏或未分配状态),快照过程不会因为这些不可用的索引而失败,而是会跳过它们继续进行快照操作"ignore_unavailable": true,// 设置是否包含集群的全局状态// 全局状态包含了集群的配置信息、节点信息、索引模板等元数据// 设置为 true 表示在快照中会包含这些全局状态信息,以便在恢复快照时可以还原整个集群的配置"include_global_state": true,// 为快照添加元数据信息// 元数据可以用于记录关于快照的额外信息,方便后续的管理和识别// 这里添加了一个名为 "reason" 的元数据字段,其值为 "pre-upgrade-8.x",表明创建这个快照的原因是在升级到 8.x 版本之前进行备份"metadata": {"reason": "pre-upgrade-8.x"}
}
  • 备份验证指标
    • 成功率:100%索引包含
    • 耗时:≤数据总量/50MB/s
    • 存储空间:原始数据大小×1.2

3. 分阶段升级流程

3.1 滚动升级步骤(零停机)

准备阶段
停用分片分配
升级单个节点
重启并验证节点
是否所有节点升级?
启用分片分配
最终集群检查

3.2 关键操作指令

# 停用分片分配
# 向 _cluster/settings 端点发送 PUT 请求,用于修改集群的持久化设置
# 持久化设置意味着即使集群重启,这些设置仍然会生效
PUT _cluster/settings
{# "persistent" 表示这是持久化设置"persistent": {# 设置集群路由分配的启用规则为 "primaries"# 这意味着只允许主分片进行分配,副本分片的分配将被暂停# 在进行节点升级等操作时,停用分片分配可以避免在升级过程中因分片重新分配而导致的性能问题和数据不一致问题"cluster.routing.allocation.enable": "primaries"}
}# 升级单个节点
# 使用 sudo 以管理员权限执行 systemctl 命令,停止 Elasticsearch 服务
# 停止服务是为了确保在升级过程中不会有新的请求进入,避免数据损坏或升级失败
sudo systemctl stop elasticsearch.service# 使用 sudo 以管理员权限执行 rpm 命令,进行软件包的升级操作
# -Uvh 是 rpm 命令的选项,其中 -U 表示升级,-v 表示显示详细的升级过程信息,-h 表示显示进度条
# elasticsearch-8.8.1.rpm 是 Elasticsearch 8.8.1 版本的 RPM 软件包,通过该命令将节点升级到 8.8.1 版本
sudo rpm -Uvh elasticsearch-8.8.1.rpm# 验证节点状态
# 向 _cat/nodes 端点发送 GET 请求,用于获取集群中节点的信息
# v 参数表示以表格形式输出详细信息,方便查看
# h 参数用于指定要显示的列,这里指定显示节点的名称(name)、版本(version)和角色(roles)
# 通过查看这些信息,可以确认节点是否成功升级到 8.8.1 版本以及节点的角色是否正常
GET _cat/nodes?v&h=name,version,roles

4. 升级后验证体系

4.1 核心功能验证表

测试类别测试方法预期结果通过标准
数据完整性随机采样文档对比哈希值哈希值完全匹配100%匹配
搜索相关性相同查询对比7.x/8.x结果前10结果重合≥90%≥95%重合
写入性能批量写入压力测试吞吐量差异≤15%≤10%差异
安全认证多角色权限验证权限控制精确生效无越权访问

4.2 性能基准对比

测试场景7.17 性能指标8.8 性能指标变化率
日志写入吞吐12万条/秒14万条/秒+16%↑
复杂聚合查询2.3秒1.8秒-22%↓
冷数据存储成本$0.023/GB/月$0.018/GB/月-22%↓
安全握手延迟320ms180ms-44%↓

5. 回退方案设计

5.1 快速回退流程

触发回退
停止新数据写入
恢复7.x集群快照
验证数据完整性
切换流量到7.x
清理8.x节点

5.2 回退检查清单

    1. 确认快照版本与7.x集群版本一致
    1. 关闭8.x集群安全认证功能
    1. 清除8.x特定索引模板
    1. 回滚JDK到11版本

6. 常见问题解决方案

6.1 典型问题处理矩阵

问题现象根本原因解决方案紧急程度
节点无法加入集群TLS配置不一致同步安全证书到所有节点⭐⭐⭐⭐⭐
聚合查询返回空结果字段类型不兼容重建索引并更新映射⭐⭐⭐⭐
Kibana仪表板加载失败插件版本不匹配升级Kibana到8.x配套版本⭐⭐⭐
分词器报错停用词列表格式变更调整分词器配置文件⭐⭐

6.2 关键日志分析

# 典型错误日志1:证书不兼容
[WARN][o.e.x.s.t.n.SecurityNetty4Transport] SSL/TLS connection error: handshake_failure# 解决方案:
使用elasticsearch-certutil重新生成统一CA证书# 典型错误日志2:字段类型冲突
java.lang.IllegalArgumentException: field [price] of type [scaled_float] conflicts with existing type [double]# 解决方案:
创建新索引并指定正确字段类型,使用reindex API迁移数据

  • 附录:迁移工具包
工具类别推荐工具使用场景
数据迁移Elasticsearch Reindex API索引结构更新
配置检查ES Upgrade Assistant预检兼容性问题
性能对比Rally基准测试工具版本性能对比
安全迁移Elastic Certutil证书管理

关键注意事项

  1. 必须先在测试环境验证业务场景
  2. 生产环境升级需选择业务低峰期
  3. 保留至少7天的旧版本快照
  4. 监控系统需提前适配8.x指标格式
  • **注:实际升级耗时与数据规模成正比,每TB数据预计需要2-4小时迁移时间**
    es - head 是一个 Elasticsearch 的可视化管理插件,它本身并不定义查询参数,而是允许用户使用 Elasticsearch 的各种查询参数来执行搜索操作。以下为你详细介绍 Elasticsearch 中常见的查询参数及其含义:

彩蛋!!!

Elasticsearch 常用结构化查询参数

  • match 查询。全文搜索查询,会对查询文本进行分词处理,然后在指定字段中查找匹配的分词。
  • term 查询。精确匹配查询,不会对查询词进行分词处理,直接查找字段中包含确切值的文档。
  • prefix 查询。查找字段中以指定前缀开头的文档。

  • wildcard 查询。支持使用通配符 *(匹配任意数量的任意字符)和 ?(匹配单个任意字符)进行模糊匹配。
  • range 查询。查找字段值在指定范围内的文档,支持 gt(大于)、gte(大于等于)、lt(小于)、lte(小于等于)操作符。
  • bool 查询。用于组合多个查询条件,可使用 must(必须匹配)、must_not(必须不匹配)、should(可以匹配,匹配越多得分越高)和 filter(过滤文档,不影响得分)子句。

  • _source 参数。控制返回文档中包含的字段,可以指定包含或排除某些字段。
  • explain 参数。当设置为 true 时,会在返回结果中包含每个匹配文档的得分解释信息,帮助理解文档得分的计算方式。
  • timeout 参数。指定查询的超时时间,若查询在指定时间内未完成,将返回已找到的部分结果。

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

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

相关文章

Android,Java,Kotlin 确保线程顺序执行的多种实现方式

在多线程编程中,有时需要确保一个线程必须等待另一个线程执行完毕后再执行。本文将介绍几种常见的方法来实现这一需求,并提供详细的代码示例。 1. 使用 Thread.join() Thread.join() 是最简单直接的方法,它会让当前线程等待目标线程执行完毕…

论文调研 | 一些开源的AI代码生成模型调研及总结【更新于250313】

本文主要介绍主流代码生成模型,总结了基于代码生成的大语言模型,按照时间顺序排列。 在了解代码大语言模型之前,需要了解代码相关子任务 代码生成 文本生成代码(Text to code):根据自然语言描述生成代码 重构代码(Refactoring …

【QT】-一文说清楚QT定时器怎么用

在 Qt 中,定时器(QTimer)是用来定时执行某些任务的非常有用的类。它可以帮助你在指定的时间间隔后重复执行某个函数。常见的用法是启动一个定时器,每过一段时间自动执行某个操作,比如更新 UI、检查状态或发送数据等。 …

iOS OC匹配多个文字修改颜色和字号

1、传入字符串数组&#xff0c;通过NSMutableAttributedString修改匹配文字 可以根据需要搞成匹配单个字符串 - (NSAttributedString *)applyFontSizeToText:(NSString *)text matchStrings:(NSArray<NSString *> *)matchStrings {NSMutableAttributedString *attribut…

3DS模拟器使用(pc+安卓)+金手指+存档互传

1、引言 3ds模拟器已经能够在手机端近乎完美模拟了&#xff0c;那么多的3ds游戏&#xff0c;比玩手机游戏舒服多了。 本人是精灵宝可梦的老玩家&#xff0c;从第一世代就一直在玩&#xff0c;刚耍完NDS的第五世代&#xff0c;黑白系列。现在到宝可梦XY了&#xff0c;需要在3d…

Java EE Web环境安装

Java EE Web环境安装 一、JDK安装与测试&#xff08;Windows环境&#xff09; 1. 安装JDK 官网下载&#xff1a;Oracle JDK&#xff08;选择Windows x64 Installer&#xff09;双击安装包&#xff0c;按向导完成安装 ​ 2. 环境变量配置 右键【此电脑】→【属性】→【高级…

探索CSS魔法:3D翻转与渐变光效的结合

随着前端技术的不断发展&#xff0c;CSS不再仅仅局限于样式设计&#xff0c;它也成为了实现富有互动性的动画和特效的强大工具。本篇文章将向大家展示如何利用CSS的3D变换和渐变光效&#xff0c;打造一张“神秘卡片”&#xff0c;通过简单的代码实现炫酷的视觉效果。 1. 初识神…

C++ STL 深度解析:vector 的全面指南与进阶技巧

一、底层架构深度剖析 1.1 内存管理机制 vector 通过三个指针实现动态内存管理&#xff1a; _start&#xff1a;指向分配内存的首元素&#xff08;begin()返回值&#xff09;_finish&#xff1a;指向最后一个元素的下一个位置&#xff08;end()返回值&#xff09;_end_of_st…

pom.xml中配置的repository,在编译器下载依赖包没生效,怎么解决

针对 pom.xml 中配置的仓库&#xff08;repository&#xff09;未生效导致依赖下载失败的问题&#xff0c;结合搜索结果和 Maven 依赖解析机制&#xff0c;以下是分步解决方案&#xff1a; 一、问题原因分析 镜像覆盖全局请求 若 settings.xml 中配置了镜像&#xff08;mirror…

S7-1200 G2移植旧版本S7-1200程序的具体方法示例

S7-1200 G2移植旧版本S7-1200程序的具体方法示例 前期概要: S7-1200 G2必须基于TIA博途V20,之前的程序可通过移植的方式在新硬件上使用。 该移植工具可自动将TIA Portal 项目从 S7-1200 移植到更新的S7-1200 G2。 注意: 该插件支持在同一TIA Portal项目实例内将软件和/或硬…

CNN SSP, ASPP, PPM 分割任务经典尺度聚合模块

SSP&#xff1a;Spatial Pyramid Pooling 让任意大小图像最终输出的特征维度始终固定&#xff0c;便于接全链接层。 4x4, 2x2,1x1区域的maxpooling&#xff0c;让任意大小图像最终输出最终特征维度始终为 &#xff08;1641)*256 ASSP:Atrous Spatial Pyramid Pooling 不进行…

OpenHarmony-XTS测试

OpenHarmony-XTS测试 OpenHarmony-XTS测试环境搭建测试准备开始运行PS OpenHarmony-XTS测试 针对OpenHarmony版本进行XTS测试使用记录。 windows环境。 以acts套件为例。 环境搭建 获取测试套件&#xff0c;两种方法 1&#xff09;官网下载&#xff1a;https://www.openharm…

文件系统 linux ─── 第19课

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…

kali之netdiscover

kali之netdiscover Netdiscover 是 Kali Linux 中一款用于网络发现和主机扫描的工具。它通过主动发送 ARP 请求来识别局域网中的活动主机&#xff0c;并显示它们的 IP 地址、MAC 地址和网卡厂商信息。Netdiscover 特别适用于局域网内的主机发现和网络映射。 1. Netdiscover 的…

【软考-架构】5.2、传输介质-通信方式-IP地址-子网划分

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 传输介质网线光纤无线信道 通信方式和交换方式会考&#xff1a;交换方式 &#x1f4af;考试真题第一题第二题 IP地址表示子网划分&#x1f4af;考试真题第一题第二题 传输…

G2o顶点与边编程总结

G2o的顶点与边属于 HyperGraph 抽象类的继承OptimizableGraph 的继承。 BaseVertex<D,T> D是预测点的维度&#xff08;在流形空间的最小表示&#xff09;T是待估计vertex的数据类型&#xff0c;比如用四元数表达三维旋转的话&#xff0c;T就是Quaternion 类型 // 顶点的…

【区块链】以太坊

学习视频源链接&#xff1a; https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根据肖老师的视频进行的笔记记录 bitcoin 1.0 区块链 以太坊 2.0区块链 以太坊 设置了 memory hard mining puzzle &#xff0c;这造成了asic resistance&#xff0c; 后续 proof of work &a…

凸优化算法学习笔记:决策单调性与 wqs二分

文章目录 前言决策单调性单调矩阵&#xff0c;完全单调矩阵&#xff0c;蒙日阵决策单调性优化 d p dp dp线性 d p dp dp分治&#xff08;离线&#xff09;二分队列&#xff08;在线&#xff09;SMAWK 区间 d p dp dp 练习题LOJ6039 w q s wqs wqs 二分&#xff08;蒙日阵最短…

Aop实现简单基于日志记录

目录 一、基础知识&#xff1a; 二、测试记录接口的参数和结果 一、基础知识&#xff1a; Before&#xff1a;用于执行目标方法之前的逻辑。After&#xff1a;用于执行目标方法之后的逻辑。AfterReturning&#xff1a;用于获取目标方法返回值后的逻辑。AfterThrowing&#x…

【Nacos】服务发布之优雅预热上线方案

目录 一、背景二、注册时机2.1、注册机制2.2、分析源码找到注册时机 三、注册前心跳健康检测3.1、方案实施3.2、源码分析3.3、优化代码 四、流量权重配置五、总结5.1、整体完整流程&#xff1a;5.2、流程图&#xff1a;5.1、优化方案完整代码&#xff1a; 一、背景 有些面向广…