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.hqwc.cn/news/310189.html

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

相关文章

Javaweb-servlet

一、servlet入门 1.Servlet介绍 (1)什么是Servlet Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#…

【JVM】一篇通关JMM内存模型

JMM内存模型 1. 原子性1-1. 问题分析1-2. 问题解决 2. 可见性2-1. 问题分析2-2. 问题解决 3. 有序性3-1. 问题分析3-2. 问题解决 4. CAS与原子性5. synchronized 优化 1. 原子性 很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java…

1、aigc图像相关

aigc图像相关 一、Diffusion webui 在autodl上部署一些问题二、lora和kohyass(1)角色模型(2)风格模型(3)dreambooth(4)模型合并(5)Lora加Adetail其他 三、sd …

Zookeeper无法启动,报“Unable to load database on disk”

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 测试环境部署zookeeper的服务器磁盘满了,引起服务异常,将zookeeper进程杀掉之后&…

Apache-ActiveMQ 反序列化漏洞(CVE-2015-5254)复现

CVE-2016-3088 一、环境搭建 Java:jdk8 影响版本 Apache ActiveMQ < 5.13.0 二、用docker搭建漏洞环境 访问一下web界面 然后进入admin目录登录 账号:admin 密码:admin 三、工具准备 cd /opt wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0…

灸哥问答:作为初学者如何学习设计模式?

最近开始把几年前关于设计模式的笔记逐步整理出来&#xff0c;并且分享给大家。讲设计模式的书籍、视频比比皆是。这次我针对每一个设计模式分为五个方面进行介绍&#xff1a; 什么是 X 设计模式&#xff1f;&#xff08;是什么&#xff1f;&#xff09;为什么用 X 设计模式&a…

Grafana增加仪表盘

1.Grafana介绍 grafana 是一款采用Go语言编写的开源应用&#xff0c;主要用于大规模指标数据的可视化展现&#xff0c;是网络架构和应用分析中最流行的时序数据展示工具&#xff0c;目前已经支持绝大部分常用的时序数据库。 Grafana下载地址&#xff1a;https://grafana.com/g…

image 标签的 width 和 height 有大作用!!!

image 标签的 width 和 height 有大作用!!! 我们将在这里探讨一个问题, 如果在加载图片之后不影响图片下边文字的移动. 在给出答案之前, 要知道 width 在 2019 年之后 有了更多能力. 也就是浏览器会根据 width 和 height 计算 aspect-ratio. 当然, 为了实现我们的目标, 提前知…

YOLOv8改进 添加可变形注意力机制DAttention

一、Deformable Attention Transformer论文 论文地址&#xff1a;arxiv.org/pdf/2201.00520.pdf 二、Deformable Attention Transformer注意力结构 Deformable Attention Transformer包含可变形注意力机制&#xff0c;允许模型根据输入的内容动态调整注意力权重。在传统的Tra…

【MYSQL】-函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

虚拟化技术和云计算的关系

1、云计算底层就是虚拟化技术。 &#xff08;1&#xff09;常见的虚拟化技术&#xff1a;VMware&#xff08;闭源的&#xff0c;需要收费&#xff09;、XEN、KVM &#xff08;2&#xff09;大部分公司用的虚拟化方案&#xff1a;XEN、KVM 2、虚拟化的历史 &#xff08;1&am…

List常见方法和遍历操作

List集合的特点 有序&#xff1a; 存和取的元素顺序一致有索引&#xff1a;可以通过索引操作元素可重复&#xff1a;存储的元素可以重复 List集合的特有方法 Collection的方法List都继承了List集合因为有索引&#xff0c;所以有了很多操作索引的方法 ublic static void main…