LVS负载均衡配置虚拟引起微服务注册混乱

线上小程序突然报错,查看网关日志,访问下游微服务A时大量报错:

1)检查微服务是否未注册。登录eureka页面,发现三个节点均正常注册

三个微服务节点地址分别为:13.9.1.91:8080,13.9.1.92:8080和13.9.1.93:8080

2)查看详细日志,发现网关请求地址为13.9.1.121,也就是说虽然微服务节点正常注册,但请求数据并未分发到实际的微服务节点上。

3)继续排查,发现13.9.1.121为LVS上配置的负载均衡地址。回想起来,系统原来并未使用微服务架构,所以负载均衡采用LVS模式来实现,三个节点的集群配置的虚拟地址就是13.9.1.121,因为采用的DR模式,所以在三个节点上均配置了13.9.1.121,也及时说每个节点都配置了两个IP地址,一个是原来分配到eth0网卡的地址,一个配置在虚拟网卡的负载均衡的虚拟IP地址。所以怀疑是微服务虚拟网卡上的地址通过ARP发布出去,在网关保存(虚拟IP:节点MAC地址)的绑定关系,后继LVS服务器也通过ARP发布虚拟IP地址,从而在网关保存的(虚拟IP:节点MAC)被(虚拟IP:LVS MAC地址),所以网关把请求会转发到LVS,因为该LVS已不再使用,所以连接超时。登录13.9.1.90,检查配置,发现已经配置了ARP抑制(也就既不响应针对虚拟IP的ARP请求,也不广播本地所配置的虚拟IP)

4)到此判断应该是在Eureka中报错的注册信息错误,也就是说在Eureka保存的三个节点的地址均为13.9.1.121,所以网关请求Eureka拿到的地址是13.9.1.121,从而把请求分发到这个并未安装微服务的LVS节点。进一步分析微服务的注册过程,微服务注册时携带instance_id和本地IP地址, instantce_id是从微服务的application.yml中获取,并且显示在Eureka的监控页面上,但在Eureka页面并未显示实际的IP地址。那么实际上注册时的IP地址是什么呢?微服务注册时,遍历所有UP状态的网卡,找到第一个非环回IP地址(环回地址:对于IPV4来说,就是以127开头的地址)作为注册使用的IP地址。

5)问题找到了。在原理使用LVS做负载时,在主机eth0配置了虚拟IP,这样在eth0网卡绑定了两个地址,一个原来的真实IP地址,一个是虚拟IP地址,并且在Linux内核的IP地址列表中虚拟地址在前,真实IP地址在后,微服务注册时,获取到的第一个非环回地址正是虚拟IP地址,所以在Eureka保存的微服务的地址为虚拟IP地址,网关分发请求时,从Eureka获取到的是虚拟IP地址13.9.1.121,请求被分发到了原来的LVS服务,所以在网关报500错误。

6)进一步分析。为什么原来一切正常,突然出现这个问题?

问了一下运维人员,微服务节点虚机操作系统在晚上被重启了。根源找到了,因为节点上配置了两个地址(虽然不再使用原来的负载均衡,但原来为了负载均衡而配置的虚拟IP地址并未删除),但虚拟IP对应的虚拟网卡原来通过命令行DOWN掉了,所以注册时IP地址为物理IP地址,系统重启后,虚拟IP所在网卡自动进入UP状态,所以注册时获取的地址就是虚拟IP地址,从而导致流量分发目的地错误。

总结:

1)在主机上,没有的配置信息该删除的删除掉。比如当前问题主机上的虚拟网卡和虚拟IP地址

2)在微服务的配置文件中使用eureka.instance.ip-address 直接指定注册时使用的IP地址

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

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

相关文章

开源服务指南使用手册

开源服务指南是什么?从哪里来?往哪里去? 定位 用中文推荐优质开源项目,让开发者更容易找到趁手的开源工具。 Slogan 发现开源之美,碰撞无限可能。 我们想要让大家知道更多优秀的开源项目,发现开源的美…

ARM CCA机密计算软件架构之软件堆栈概述

Arm CCA平台通过硬件添加和固件组件的混合方式实现,例如在处理元素(PEs)中的RME以及特定的固件组件,特别是监视器和领域管理监视器。本节介绍Arm CCA平台的软件堆栈。 软件堆栈概述 领域VM的执行旨在与Normal world(正常世界)隔离,领域VM由Normal world Host(正常世界…

【软件工程】融通未来的工艺:深度解析统一过程在软件开发中的角色

🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言: 正文 统一过程(Unified Process) 介绍和解释: 应用: 优缺点&#xf…

C/C++ 函数的默认参数

下面介绍一项新内容 - 默认参数。 默认参数指的是当函数调用中省略了实参时自动使用的一个值。 例如,如果将 void wow (int n)设置成n 有默认值为1,则函数调用 wow()相当于 wow(1)这极大地提高了使用函数的灵活性。 假设有一个名为left()的函数&#xff…

SpringIOC之ApplicationObjectSupport

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

pytorch与cuda版本对应关系汇总

pytorch与cuda版本关系 cuda版本支持pytorch版本cuda10.21.5 ~ 1.12cuda11.01.7 ~ 1.7.1cuda11.11.8 ~ 1.10.1cuda11.31.8.1 ~ 1.12.1cuda11.61.12.0 ~ 1.13.1cuda11.71.13.0 ~ 2.0.1cuda11.82.0.0 ~ 2.1.1cuda12.12.1.0 ~ 2.1.1 cuda 与 cudnn关系 cuda版本支持cudnn版本cu…

微信小程序:跳转页面

实际调用需要根据自己业务实际情况决定,虽然各种方式一定程度上能减少内存损耗,但是业务上面流转优化才是最终要满足的,一定要从业务流转去优化去考虑,不要为了性能增加了流转复杂度 1、wx.navigateTo 保留当前页面,跳…

12、defer

defer defer意思是推迟、延迟。语法很简单,就在正常的语句前加上defer就可以了。 ​ 在某函数中使用defer语句,会使得defer后跟的语句进行延迟处理,当该函数即将返回时,或发生panic时,defer后语句开始执行。注意os.E…

算法基础之最短Hamilton路径

最短Hamilton路径 核心思想&#xff1a; 数位dp 用二进制数 存当前所有点 遍历过为1 遍历i图中j点 若j点走过 则求j点路径长度 f[state][j] f[state_k][k] w[k][j] state为除去j点的图 #include<iostream>#include<cstring>#include<algorithm>using n…

java web开发

什么是javaEE javaEE是企业版 是一个web开发平台 规范了web技术标准 技术有 JDBC JSP XML Servlet 硬件服务器&#xff1a;和pc一样属于计算机 软件服务器&#xff1a;文件服务器 数据库服务器 应用服务器java EE 应用服务器 是收费的 实现了EE技术 web 服务器 实现了部分技…

<JavaEE> TCP 的通信机制(一) -- 确认应答 和 超时重传

目录 TCP的通信机制的核心特性 一、确认应答 1&#xff09;什么是确认应答&#xff1f; 2&#xff09;如何“确认”&#xff1f; 3&#xff09;如何“应答”&#xff1f; 二、超时重传 1&#xff09;丢包的概念 2&#xff09;什么是超时重传&#xff1f; 3&#xff09…

详解信道容量,信道速率,安全速率的区别

目录 一. 信道容量与信道速率 二. 小结 三. 安全速率与物理层安全 3.1 香农物理层安全模型 3.2 安全信道速率 四. 补充安全中断概率&#xff08;Secrecy Outage Probability, SOP&#xff09; 五. 补充安全分集度&#xff08;Secrecy Diversity Order, SDO&#xff09; …

如何通过 useMemo 和 useCallback 提升你的 React 应用性能

背景 在 React 中&#xff0c;useMemo 和 useCallback 这两个 hook 是我们优化应用性能的有力工具。它们会返回 memoized 版本的值或函数&#xff0c;只在依赖项发生变化时才进行重新计算或定义。 Hook 介绍 useMemo useMemo 的作用是返回一个 memoized 值&#xff0c;它接…

AAAI 2024 | 用逆向思维图(ReX-GoT)进行多选对话常识推理

©PaperWeekly 原创 作者 | 郑理 单位 | 武汉大学硕士生 研究方向 | 自然语言处理 论文题目&#xff1a; Reverse Multi-Choice Dialogue Commonsense Inference with Graph-of-Thought 论文作者&#xff1a; 郑理&#xff0c;费豪&#xff0c;李霏&#xff0c;李波波&am…

EI级 | Matlab实现TCN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.【EI级】 Matlab实现TCN-BiGRU-Mult…

【数据分析】数据分析方法|市场细分与同期群分析

【数据分析】数据分析方法|市场细分与同期群分析 数据分析的目的总的来说只有两个&#xff1a;一个是证伪(或证实)&#xff1b;另一个是推理。证伪是为了确认过程的正确性&#xff0c;这个过程通常是一项具体的业务&#xff1b;推理是为了找到某种确实的逻辑&#xff0c;比如某…

2023年03月09日_谷歌视觉语言模型PaLM-E的介绍

自从最近微软凭借OpenAI 和ChatGPT火了一把之后呢 老对手Google就总想着扳回一局 之前发布了硬刚ChatGPT的Bard 但是没想到翻车了 弄巧成拙 所以呢Google这一周又发了个大招 发布了史上最大的视觉语言模型PaLM-E 这个模型有多夸张呢 参数量高达5,620亿 是ChatGTP-3的三…

爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>

前言: 准备迈入scrapy-redis或者是scrapyd的领域进行一番吹牛~ 忽然想到,遗漏了中间件这个环节! 讲吧~太广泛了;不讲吧,又觉得有遗漏...所以,本章浅谈中间件; (有问题,欢迎私信! 我写文告诉你解法) 正文: 当我们谈到 Scrapy 的中间件时&#xff0c;可以将其比作一个特殊的助…

Python使用PyMySql增删改查Mysql数据库

PyMysql简介 PyMysql是Python中用于连接MySQL数据库的一个第三方库&#xff0c;它实现了MySQL客户端/服务器协议&#xff0c;使得Python程序能够与MySQL服务器进行交互。由于Python 2的mysql-python&#xff08;又称mysqldb&#xff09;模块在Python 3上支持不够完善&#xff0…

在C#中,typeof关键字

在C#中&#xff0c;typeof关键字被用于获取一个类型的 System.Type 对象。这个功能是非常有用的&#xff0c;尤其是在下面这些场景中&#xff1a; 反射&#xff08;Reflection&#xff09;: typeof在使用反射时非常关键。通过获取类型的 Type 对象&#xff0c;你可以查询这个类…