ES7.17由于IP变化导致的故障及恢复
背景
1. k8s 升级,导致环境中的ES集群(7.17版本)重启
2. 集群由于在公有云环境,IP不固定(重启后IP可能发生变化),通过 svc 进行访问
curl xxx-master-svc:9200/_cat/health
3. 由多个sts一起维护一个ES集群(非operator的模式)
xxx-masterxxx-ingestxxx-data
注:一般开源的ES,无论在虚拟机还是容器中部署,最佳实践还是固定IP;
4. 集群重启之后,状态变成了 red
分析
1. 初步发现是掉了2个节点(_cat/nodes),元信息还可以访问,总体表现为red
2. 发现data节点无法加入集群,新扩出来的节点也无法加入集群
- 排除网络影响,节点之间都是通的
- 无法加入的节点 local:9200/ 发现节点活着,但是 cluster_uuid: "_na_"(空)
- 对节点进行 unsafe的 detach 操作,脱离集群,重启(依然无法加入集群)
3. 日志(异常的data节点)表现为 `master not discovered or elected yet, an election requires at least 2 nodes with ids from`,以及各种访问master超时;
日志中打印的IP地址是先有master节点的IP(不存在IP错误)
4. 发现data节点存在readinessProbe策略(sts),要求_cluster/health=yellow才可以存活,将其改成red,依然无法加入集群
5. data节点无法加入集群,这里尝试修改data节点的配置,强行指定master的地址。结果data节点重启后依然无法加入集群。
cluster.initial_master_nodes: "xxx-master-1, xxx-master-2, ..."
注:
## 为了保证安全,对sts进行如下操作,对sts管理的部分节点生效(此处表示 pod 编号大于等于2 的才会执行操作,如果要sts管理的全部节点生效,改成0即可,或者去掉该配置)updateStrategy:rollingUpdate:partition: 2
type: RollingUpdate
6. 发现“正常”节点(master/ingest)的_cat/nodes命令的结果中包含个别data节点
- 反复确认过,在全部的data节点,都无法访问集群元信息(没加入集群)
- 怀疑元数据异常,整个集群已经挂了(没有形成集群)
7. 节点无法形成集群,一般有2种方法
- 方案1: (unsafe)detach
su elasticsearch -g root./bin/elasticsearch-node unsafe-bootstrap./bin/elasticsearch-node detach-cluster
- 方案2: 对全部master候选节点的配置进行修改,重启,重新形成集群
Bootstrapping a cluster | Elasticsearch Guide [7.17] | Elastic
cluster.initial_master_nodes: "xxx-master-1, xxx-master-2, ..."
解决方案
使用上面描述的方案2;
具体流程如下:
1. (容器环境才需要考虑)修改 readinessProbe,_cluster/health 需要访问元数据信息,集群已经挂掉的情况下不合理(由于集群已经挂了,所以会一直阻塞),这里改成 check 9200 端口(只需要访问本地进程/端口)。
2. 修改master节点的 initial_master_nodes 配置,指定master节点的节点name列表。
注:容器环境中滚动重启即可,不需要同时重启
疑惑
1. 如果是滚动重启,即使IP发生变化,ES也可以感知到,除非是一次重启多个节点(修改多个IP),比如超过一半的master节点,那么无法形成集群(k8s升级工艺已经无法追溯......)
2. 如果短时间太多节点变化IP,无法形成集群,为什么有些节点可以访问元数据( _cat/health,_cat/nodes 等),而不是全部节点访问ES集群元数据都是503.
(可能极端情况触发了ES的bug,该现象对前期排障造成巨大干扰。)
相关文章:
ES7.17由于IP变化导致的故障及恢复
背景 1. k8s 升级,导致环境中的ES集群(7.17版本)重启 2. 集群由于在公有云环境,IP不固定(重启后IP可能发生变化),通过 svc 进行访问 curl xxx-master-svc:9200/_cat/health 3. 由多个sts一…...

uniapp H5 touchstart touchend 切换背景会失效,或者没用
uniapp H5 touchstart touchend 切换背景会失效,或者没用 直接上代码 (使用 class 以及 hover-class来设置样式) class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…...

【word visio绘图】关闭visio两线交叉的跳线(跨线)
【visio绘图】关闭visio两线交叉的跳线(跨线) 1 如何在Visio绘图中关闭visio两线交叉的跳线(跨线)第一步:打开Visio并创建您的图形第二步:绘制您的连接线第三步:关闭跳线第四步:手动…...
meson、ninja编译dpdk
解压目录meson编译dpdk meson buildmeson编译dpdk debug版 meson setup --buildtypedebug debugbuildmeson编译使用静态库,编译example meson .. --prefix/usr/local --buildtypedebugoptimized --default-librarystatic -Dexamplesallninja编译 ninjaninja安装…...
diff命令详解
diff是Unix系统的一个很重要的工具程序。 它用来比较两个文本文件的差异,是代码版本管理的基石之一。你在命令行下,输入: $ diff < 变动前的文件 > < 变动后的文件 >; diff就会告诉你,这两个文件有何差异。它的显示结…...
Backtrader 文档学习- Broker - Slippage
Backtrader 文档学习- Broker - Slippage 1.概述 回测无法保证真实的市场条件。无论市场模拟有多好,在真实市场条件下都可能发生滑点。这意味着: 请求的价格可能无法与真实市场的价格匹配 集成的回测broker支持滑点。以下参数可以传递给broker &#…...

三子棋游戏小课堂
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 今天的主菜是,C语言实现的三子棋小游戏, 所属专栏: C语言知识点 主厨的主页:Chef‘s blog 前言&…...

golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务 什么是MQTT? MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的消息传输协议,设计用于在低带宽、高延迟或不可靠的网络环境中进行通信。MQTT最初由IBM开发…...

uniapp微信小程序-请求二次封装(直接可用)
一、请求封装优点 代码重用性:通过封装请求,你可以在整个项目中重用相同的请求逻辑。这样一来,如果 API 发生变化或者需要进行优化,你只需在一个地方修改代码,而不是在每个使用这个请求的地方都进行修改。 可维护性&a…...

UE4 C++ 结构体
先在UCLASS()前写入: USTRUCT(BlueprintType) struct FMyStruct //必须以"F"开头 {GENERATED_BODY() //必须添加“GENERATED_BODY()”UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "MyStruct1")int32 Health;UPROPERTY(EditAnywher…...
软件工程知识梳理0-概述
学好软件工程就必须理解软件工程到底是干什么的,为什么需要软件工程,以及怎么干的!只有理解了软件工程的本质,才能更好的理解软件工程中各种工程手段和方法的目的。 个人开发模式 —> 小作坊开发模式 —> 软件工程开发模式 …...

贪吃蛇---C语言---详解
引言 C语言已经学了不短的时间的,这期间已经开始C和Python的学习,想给我的C语言收个尾,想起了小时候见过别人的老人机上的贪吃蛇游戏,自己父母的手机又没有这个游戏,当时成为了我的一大遗憾,这两天发现C语…...

Airflow原理浅析
⭐️ airflow基本原理 Apache Airflow 是一个开源的工作流自动化工具,它用于调度和管理复杂的数据工作流。Airflow 的原理基于有向无环图(DAG)的概念,它通过编写和组织任务的有向图来描述工作流程。 以下是 Apache Airflow 的一…...

uniapp 使用canvas 画海报,有手粘贴即可用
html部分 <view click"doposter">下载海报</view> <canvas canvas-id"myCanvas" type2d style"width: 370px; height: 550px;opcity:0;position: fixed;z-index:-1;" id"myCanvas" />js 部分 drawBackground() {c…...
Vite+Vue3+TS 引入使用Cesium.js
申请 Cesium Token 进入Cesium 注册账号 cesium 离谱的是 E宝 (Epic) 居然可以快捷登录?! 登录后点击导航栏的 Access Token 再右侧即可看到默认Token 安装&引入 # Cesium pnpm pnpm install cesium# 如果项目同时存在Three.js 需避免使用pnpm T…...

Cocos creator 动作系统
动作系统简介 是用于控制物体运动的一套系统,完全依赖代码进行实现,动态调节节点的移动。 移动 cc.moveTo 移动到某个坐标(x,y) //1秒时间内,移动到0,0let action1 cc.moveTo(1,0,0)this.node.runAction(action1)c…...

对Spring当中AOP的理解
AOP(面向切面编程)全称Aspect Oriented Programminge AOP就是把系统中重复的代码抽取出来,单独开发,在系统需要时,使用动态代理技术,在不修改源码的基础上,将单独开发的功能通知织入(应用)到系统中的过程,完…...

【Vue】2-8、Axios 网络请求
cdn:<script src"https://unpkg.com/axios/dist/axios.min.js"></script> 注:使用 CDN 链接就可以不需要去下载对应的 js 文件到本地,只需要联网即可使用,可以减少项目的体积 <!DOCTYPE html> <…...

Vue中嵌入原生HTML页面
Vue中嵌入html页面并相互通信 需求:b2b支付需要从后获取到数据放到form表单提交跳转,如下: 但是vue目前暂时没找到有类似功能相关文档,所以我采用iframe嵌套的方式 1. Vue中嵌入Html <iframe src"/static/gateway.htm…...

streampark+flink一键整库或多表同步mysql到doris实战
streamparkflink一键整库或多表同步mysql到doris实战,此应用一旦推广起来,那么数据实时异构时,不仅可以减少对数据库的查询压力,还可以减少数据同步时的至少50%的成本,还可以减少30%的存储成本; streampar…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...