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

news2025/1/20 5:57:41

线上小程序突然报错,查看网关日志,访问下游微服务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.coloradmin.cn/o/1344728.html

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

相关文章

图像分割实战-系列教程2:Unet系列算法

图像分割实战-系列教程 总目录 语义分割与实例分割概述 Unet系列算法 1、Unet 整体结构:概述就是编码解码过程简单但是很实用,应用广起初是做医学方向,现在也是 语义分割与实例分割概述 Unet系列算法

EBU7140 Security and Authentication(一)常见加密算法

前言 主要根据 EBU7140 课程内容整理,比较偏向应试~ Block1:介绍课程,传统加密方式。 Block2:公钥加密的原理和应用。 Block3:一些特定安全协议技术(如防火墙 Kerberos身份验证协议等)。 B…

PLC龙门刨床横梁运动控制程序示例

一、龙门刨床横梁运动控制 二、按钮信号地址分配 三、对应的程序梯形图 1、首先按下上升按钮, 同时接通这两个触点(上升之前先对横梁进行放松) 2、当放得足够松的时候,放松通路断开,上升通路接通,横梁开始上…

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850 2023/12/29 11:10 开发板:Firefly的AIO-3399J【RK3399】 SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.…

Java设计模式实战:从If-Else到策略+工厂方法的演变

引言 可能很多开发者,虽然理解了设计模式的概念,但在实际工作中应用却是另一回事。本篇文章旨在用一个具体的案例来展示如何将设计模式应用到工作的编程问题中。正所谓:“纸上得来终觉浅,绝知此事要躬行。”理论的学习固然重要&a…

Mybatis底层原理分析以及源码阅读

费话不多少先上图,我只喜欢画图分析,看图片: 有两个问题: 问题1: 我们一直在写Mapper/DAO只写了接口,没有写具体的实现吧? 【是的】 问题2: 没有写实现类就没办法实例化执行后续的操…

Windows系统清理优化方法总结

一、禁用不必要的系统服务 1、家庭组:家庭组是Win10磁盘,CPU需要高服务,多数用户都没有使用,因此建议关闭,不会造成其他负面影响。 快捷键 winr 调出服务输入框键入services.msc点击确定 找到家庭组相关的两个服务双…

【已解决】 ubuntu apt-get update连不上dl.google.com

在终端使用apt-get update时,连接dl.google.com超时,一直卡在0%,原因是当前ip无法ping到google(墙)。 解决方法: dl.google.com国内可用IP 选一个,然后按以下命令操作: cd ~ vim …

css实现一个斑马条纹动画,实现一个理发店门口的小转转,进度条动画同理!

css实现一个斑马条纹动画,实现一个理发店门口的小转转 前置基础知识 css背景background的重复渐变属性repeating-linear-gradient() 该属性类似于linear-gradient(),但他会在整个方向上重复渐变以覆盖整个容器 一、先写一个普通渐变例子linear-gradient() &…

【STM32】STM32学习笔记-TIM输出比较(15)

00. 目录 文章目录 00. 目录01. 输出比较简介02. PWM简介03. 输出比较通道(高级)04. 输出比较通道(通用)05. 输出比较模式06. PWM基本结构07. PWM参数计算08. 舵机简介09. 舵机硬件电路10. 直流电机及驱动简介11. 直流电机硬件电路12. 附录 01. 输出比较简介 OC(Ou…

如何解决“电脑缺失msvcp110.dll”错误,msvcp110.dll文件解决方法

“msvcr110.dll丢失”。那么,msvcr110.dlll丢失到底是什么意思呢?它对我们的电脑有什么影响?本文将详细介绍msvcr110.dll的作用以及msvcr110.dll丢失对电脑的影响,并提供5个解决方案来解决这个问题。 一、msvcr110.dll的作用 ms…

成为一名FPGA工程师:面试题与经验分享

在现代科技领域,随着数字电子技术的迅猛发展,FPGA(可编程逻辑器件)工程师成为了备受瞩目的职业之一。FPGA工程师不仅需要掌握硬件设计的基本原理,还需要具备良好的编程能力和解决问题的实践经验。面对如此竞争激烈的行…

超简单一行命令在电脑上部署安装短视频直播、引流推流人气的工具,7个开源免费流媒体直播平台和3款开源免费直播推流工具

超简单一行命令在电脑上部署安装短视频直播、引流推流人气的工具,7个开源免费流媒体直播平台和3款开源免费直播推流工具。爆款引流短视频关注的指标、分类和引流技巧,引流短视频应用技巧,直播短视频引流五维方法论,实操干货整理分享。 如今上到太空站、下到在家养猪,各行…

编程羔手解决Maven引入多个版本的依赖包,导致包冲突了

最近升级了些依赖发现有个hutool的方法老报错,java.lang.NoSuchMethodError: cn.hutool.core.util.ObjectUtil.defaultIfNull(Ljava/lang/Object;Ljava/util/function/Supplier;) 在 Maven 项目中,当不同的依赖模块引入 Hutool 的不同版本时&#xff0c…

ubuntu20部署Bringing-Old-Photos-Back-to-Life

环境准备: ubuntu20.04 Python 3.8.10 首先将微软的「Bringing-Old-Photos-Back-to-Life」库 clone 到本地: git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git cd Face_Enhancement/models/networks/ git clone https:/…

迷宫问题的对比实验研究(代码注释详细、迷宫及路径可视化)

题目描述 对不同的迷宫进行算法问题,广度优先、深度优先、以及人工智能上介绍的一些算法:例如A*算法,蚁群算法等。 基本要求: (1)从文件读入9*9的迷宫,设置入口和出口,分别采用以上方…

Vscode —— 解决Vscode终端无法使用npm的命令的问题

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错 解决办法👇 方法一:【右键单击Vscode】以【管理员身份运行】,【重启Vscode】 方法二:①【用户变量】的【path】添加npm所在路径的…

C语言实验3:函数的定义

目录 一、实验要求 二、实验原理 1.函数头 2.函数体 3.函数的定义及使用 三、实验内容 1. sum函数 代码 截图 分析 2. sum函数 代码 截图 分析 3. rank_grade函数 代码 截图 分析 4. rank_grade函数 代码 截图 分析 5. 函数的嵌套使用 代码 截图 分析…

实现二叉树的基本操作与OJ练习

目录 1.二叉树的基本操作 1.1二叉树基本操作完整代码 1.2检测value值是否存在 1.3层序遍历 1.4判断一棵树是不是完全二叉树 2.OJ练习 2.1平衡二叉树 2.2对称二叉树 2.3二叉树遍历 1.二叉树的基本操作 1.1二叉树基本操作完整代码 public class BinaryTree {static…

推荐系统/电商中的 业务指标GMV

GMV(Gross Merchandise Volume)是指在一定时间内,一个电商平台上所有商品的总销售价值,通常以货币单位(例如美元、人民币等)表示。GMV是一个关键的电商业务指标,用于衡量平台的交易规模和业务增…