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.xdnf.cn/news/824028.html

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

相关文章

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

c语言-指针练习题

目录 前言一、题目一二、题目二总结 前言 为了巩固c语言中关于指针知识点的掌握,本篇文章记录关于指针的练习题。 一、题目一 有n个整数,使前面各数顺序往后移动m个位置,最后m个数变成最前面的m个数 写一函数实现以上功能,在主函…

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述? 今天在研究了shiro的新版本shiro1.13.0版本,发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出,在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了,新版本如何使用呢…

适用于 Mac 的 10 款顶级数据恢复软件分享

想要免费从Mac恢复永久删除的文件吗?这篇文章给你答案! 在Mac上恢复已永久删除的文件并不难,只需找到合适的工具。今天,我们将为大家评测10款免费的Mac数据恢复软件,让你在拯救Mac数据时无需支付任何费用。这些软件在…

c++简易AI

今天小编一时雅兴大发&#xff0c;做了一个c的简易AI&#xff0c;还是很垃圾的&#xff01; 题外话&#xff08;每期都会有&#xff09;&#xff1a;我的蛋仔名叫酷影kuying&#xff0c;大家能加我好友吗&#xff1f; 上代码咯&#xff01; #include<bits/stdc.h> #in…

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN&#xff1a;双 DQN&#xff0c;实现无偏估计Dueling DQN&#xff1a;提高…

[Angular] 笔记 23:Renderer2 - ElementRef 的生产版本

chatgpt: Renderer2 简介 在 Angular 中&#xff0c;Renderer2 是一个服务&#xff0c;用于处理 DOM 操作的抽象层。它提供了一种安全的方式来操作 DOM&#xff0c;同时与平台无关&#xff0c;有助于维护应用程序的跨浏览器兼容性和安全性。 Renderer2 的作用是在 Angular 组…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域&#xff0c;数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求&#xff0c;我们推出了一款基于Vue3和Flask编写的学生数据可视化…

Peter算法小课堂—浮点数危机

大家先想想下面这个代码运行结果&#xff1a; #include <bits/stdc.h> using namespace std; int main(){double x5.2;double y4.11.1;cout<<(x<y)<<endl;cout<<x-y<<endl;return 0; } 最终发现&#xff0c; &#xff1f;&#xff1f;&…

嘉立创免费领券打样--领券流程及地址

领券地址 https://member.jlc.com/复制到浏览器访问该地址 自行注册账号 注册完账号后往下翻,有一个 “优惠券中心” 点免费券领取 领取对应需要的打样券就可以了 一般情况下都是用1-4层专用券,如果上个月有消费的话(超过20)是可以领通用券的,专用权只能是立创eda画的pcb才能…

80多套 Python 数据可视化炫酷大屏模板,全网最新、最多,最全、最酷、最炫大数据可视化模板

80多套数据可视化炫酷大屏模板&#xff1b;包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 项目背景 由于自己公司项目里面用到一个数据可视化大…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

【23.12.30高可用篇】什么是SLA?

什么是SLA&#xff1f; ✔️简述✔️拓展知识✔️4个9、5个9 ✔️简述 SLA是Service Level Agreement的缩写&#xff0c;意为服务等级协议。它是指供应商和客户之间达成的一份正式协议&#xff0c;规定了供应商应该向客户提供的服务水平、质量、可靠性和响应时间等指标。 SLA通…

基于FPGA的数字电路(PWM脉宽调制)

一.PWM的制作原理 假如我们有一个锯齿波&#xff0c;然后在锯齿波上设置一个阈值&#xff08;黑色水平虚线&#xff09;&#xff0c;凡是大于该阈值时输出均为高电平&#xff0c;反之则为低电平&#xff0c;这样我们是不是就得到一个PWM信号呢&#xff1f;如果我们想调整它的占…

flutter打包后的msix安装程序提示:应用安装失败,错误消息: 已阻止程序包 com.flutter.XXXXX 的部署等解决办法

使用dart的依赖msix打包后的程序&#xff0c;提示&#xff1a; 应用安装失败&#xff0c;错误消息: 已阻止程序包 com.flutter.flutterapp_1.0.0.0_x64__fxkeb4dgdm144 的部署&#xff0c;因为提供的程序包具有与已安装的程序包相同的标识&#xff0c;但内容不相同。请提高要安…

Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

完成登录且优化&#xff1a; 未优化做简单的判断&#xff1a; 全部异常抓捕 优化&#xff1a;返回的是json的格式 BusinessException&#xff1a;所有的错误放到这个容器中&#xff0c;全局异常从这个类中调用 BusinessException&#xff1a; package com.lya.lyaspshop.exce…

【网络安全 | CTF】FlatScience

该题考察SQL注入 正文 后台扫到robots.txt 页面内容如下&#xff1a; 进入login.php 页面源代码如图&#xff1a; 传参debug得到php代码&#xff1a; <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

【产品经理】用户研究与需求分析

笔记为课程学习笔记&#xff0c;若有错误欢迎指出哟~ 【产品经理】用户研究与需求分析 需求收集1.需求定义2.需求来源3.需求收集方法 需求池SWOT分析SWOT分析——道斯矩阵&#xff08;TOWS&#xff09;用户体验五要素应用场景层次结构用户体验五要素产出物 用户角色与用户画像经…

二叉树简单实现(C语言版)

一.简单建二叉树 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在大家对二 叉树结构掌握还不够深入&#xff0c;为了降低大家学习成本&#xff0c;此处手动快速创建一棵简单的二叉树&#xff0c;快速进入二叉树 …