华为云环境下LVS/DR架构的故障诊断优化
本文作者:刘涛
文章目录
- 前言
- 1.LVS/DR集群的问题
- 2.华为云环境
- 3.问题排查
- 3.1 检查LVS/DR模式配置
- 3.1.1 RS服务器
- 3.1.2 DS服务器
- 3.2 继续分析抓包结果
- 3.2.1 调整tcpdump抓包过滤条件
- 3.2.2 client向集群VIP发包
- 3.2.3 DS服务器arp消息
- 3.3 查看丢包
- 3.3.1 监控DS和RS服务器的收发包错误值
- 3.3.2 查看网卡收发包错误
- 3.4 Ping抓包
- 3.5 client发包和DS发包比较
- 3.6 分析总结
- 3.6.1 由表中的二层链路可知:
- 3.6.2 从表中涉及VIP地址可知:
- 4.尝试LVS/TUN模式
- 4.1 安装和配置tun模式
- 4.2 抓包验证
前言
本文针对华为云环境的LVS/DR接收不到数据包的问题, 排查故障, 分析并验证云上二层网络的Ethernet数据包连通性; LVS/DR模式下, 基本确认ip伪装会被华为云物理网络丢弃。
1.LVS/DR集群的问题
问题:
华为云环境下部署LVS/DR后, 后端服务RS收不到数据包.
现象:
- client向集群VIP发包, RS服务器没有收到包; 同时tcpdump也没有抓到相应的包.
- client直接向RS发包, RS可以收到包.
- 在DS服务器上直接向RS发包, RS也可以收到包.
2.华为云环境
使用华为云作为LVS测试环境,四台服务器:
| 角色 | IP | EIP | 功能 |
|---|---|---|---|
| client | xxx.xxx.1.15 | xxx.xxx.25.28 | |
| DS:VIP | xxx.xxx.1.60 | xxx.xxx.25.5 | |
| DS:DIP | xxx.xxx.1.59 | xxx.xxx.25.196 | |
| RS1 | xxx.xxx.1.48 | xxx.xxx.25.181 | UDP程序 |
| RS2 | xxx.xxx.1.98 | xxx.xxx.25.154 | UDP程序 |
其中:
- DS:Director Server, 指的是前端负载均衡器节点;
- RS:Real Server, 后端真实的工作服务器;
- VIP:向外部直接面向用户请求, 作为用户请求的目标的IP地址;
- DIP:Director Server IP, 主要用于和RS通讯的IP地址;
- RIP:Real Server IP, 后端服务器RS的IP地址;
- CIP:Client IP, 客户端的IP地址。
RS服务器上部署的是java udp程序。安装及配置前, DS和RS已经提前关闭防火墙, 以及iptables/selinux/firewalld等服务。
3.问题排查
3.1 检查LVS/DR模式配置
要点:
- 虚拟地址VIP配置在DS上;
- 虚拟地址VIP配置RS的lo网卡上;
- RS服务器上阻止arp应答。
3.1.1 RS服务器
在RS服务器上执行:
# sysctl -ar arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.ens33.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1# sysctl -ar arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.ens33.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 2# sysctl -ar rp_filter | grep 1
net.ipv4.conf.all.rp_filter = 1# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet xxx.xxx.1.60/32 brd xxx.xxx.1.60 scope global lo:0valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000inet xxx.xxx.1.48/24 brd xxx.xxx.1.255 scope global noprefixroute ens33valid_lft forever preferred_lft forever
RS1和RS2更新配置:
# echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
# sysctl -p# sysctl -ar rp_filter | grep 1
<无输出>
3.1.2 DS服务器
在DS服务器上执行:
# sysctl -ar rp_filter | grep 1
<无输出># ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000inet xxx.xxx.1.59/24 brd xxx.xxx.1.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet xxx.xxx.1.60/32 brd xxx.xxx.1.60 scope global ens33:0valid_lft forever preferred_lft forever
# LVS规则
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
UDP xxx.xxx.1.60:52002 rr-> xxx.xxx.1.48:52002 Route 1 0 0-> xxx.xxx.1.98:52002 Route 1 0 0
配置无误
3.2 继续分析抓包结果
Ip地址 + Mac地址:
| 角色 | IP | MAC地址 | 功能 |
|---|---|---|---|
| client | xxx.xxx.1.15 | fa:16:xx:xx:xx:8c | |
| DS:VIP | xxx.xxx.1.60 | fa:16:xx:xx:xx:8d | |
| DS:DIP | xxx.xxx.1.59 | fa:16:xx:xx:xx:8d | |
| RS1 | xxx.xxx.1.48 | fa:16:xx:xx:xx:9a | udp程序 |
| RS2 | xxx.xxx.1.98 | fa:16:xx:xx:xx:d3 | udp程序 |
3.2.1 调整tcpdump抓包过滤条件
DS机器上:
tcpdump ether src fa:16:xx:xx:xx:8c
改为:
tcpdump '(udp or arp or icmp)' -en -v -w ds.cap
RS机器上:
tcpdump ether src fa:16:xx:xx:xx:8d
改为:
tcpdump '(udp or arp or icmp)' -en -v -w rs.cap
3.2.2 client向集群VIP发包
DS上tcpdump抓包结果, 这是client向集群VIP发包时的记录:

Frame-351,mac地址xx:8c ------> xx:8d,即: 1.15 —> 1.59
下一个包:
Mac地址xx:8d ------> xx:9a, 即: 1.59 —> 1.48, 如下图:

上面两张图中, 标识码都是0x704d, 是同一个包; TTL先是64, 再到63, 过了一跳。表明lvs/DR生效了, 包的mac地址更改成了rs-1.48的, 包也发出了。
3.2.3 DS服务器arp消息
DS服务器上抓包, arp请求和应答:

1.48收到的arp请求:

说明DS(1.59/1.60) 到 RS(1.48/1.98) 在二层网络上是通的。
3.3 查看丢包
3.3.1 监控DS和RS服务器的收发包错误值
# udp收发包
watch -d netstat -su
# 链路层收发包
watch -d netstat -i
# 网卡收发包
watch -d ifconfig
没有发现异常信息!
3.3.2 查看网卡收发包错误
1.59网卡:
# ethtool -S ens33 | grep errorrx_errors: 0tx_errors: 0rx_length_errors: 0rx_over_errors: 0rx_crc_errors: 0rx_frame_errors: 0rx_missed_errors: 0tx_aborted_errors: 0tx_carrier_errors: 0tx_fifo_errors: 0tx_heartbeat_errors: 0tx_window_errors: 0rx_long_length_errors: 0rx_short_length_errors: 0rx_align_errors: 0rx_csum_offload_errors: 0
# ethtool -S ens33 | grep droptx_dropped: 0dropped_smbus: 0
1.48和1.98同样没有错误和丢包
3.4 Ping抓包
从DS上ping RS服务器, 查看通讯过程:

发出的icmp包, 源mac地址和ip地址对应DS服务器, 而目的mac地址和ip地址对应RS1服务器;

Ping reply包,源mac地址和ip地址对应RS1服务器,目的mac地址和ip地址对应DS服务器。
3.5 client发包和DS发包比较
- client发包链路: 1.15 —> 1.59/1.60 —> 1.98
- DS直接发包链路: 1.59/1.60 —> 1.98
Client发包, DS上收到的包: 1.15 —> 1.59

3.6 分析总结
汇总测试和抓包结果:
| 场景 | 源 | 目的 | 是否通过vip | rs1结果 |
|---|---|---|---|---|
| ping | 1.59 | rs1服务器 | 通、tcpdump有数据 | |
| arp | 1.59 | rs1服务器 | 通、tcpdump有数据 | |
| nc发udp包 | 1.15 | 1.60 | 是 | rs1收不到包、tcpdump无数据 |
| 1.60 | 1.60 | 是 | rs1收不到包、tcpdump有数据 | |
| 1.59 | 1.60 | 是 | rs1收到包、tcpdump有数据 | |
| 1.59 | rs1服务器 | rs1收到包、tcpdump有数据 | ||
| 1.60 | rs1服务器 | rs1收到包、tcpdump有数据 |
DS服务器到RS的ethernet数据包情况:
| 场景 | 源ip | 目的ip | 源mac | 目的mac | rs结果 |
|---|---|---|---|---|---|
| Ping | ds-ip | rs1-ip | ds-mac | rs1-mac | 通、tcpdump有数据 |
| Arp | ds-ip | rs1-ip | ds-mac | rs1-mac | 通、tcpdump有数据 |
| nc发udp包 | client-ip | VIP | ds-mac | rs1-mac | rs收不到包、tcpdump无数据 |
| VIP | VIP | ds-mac | rs1-mac | rs收不到包、tcpdump有数据 | |
| ds-ip | VIP | ds-mac | rs1-mac | rs收到包、tcpdump有数据 | |
| ds-ip | rs1-ip | ds-mac | rs1-mac | rs收到包、tcpdump有数据 | |
| VIP | rs1-ip | ds-mac | rs1-mac | rs收到包、tcpdump有数据 |
3.6.1 由表中的二层链路可知:
- 从ds-mac到rs-mac, 大部分通, 少部分不通;
- arp和ping的结果, 表明DS和RS之间二层链路是通的;
- DS和RS上协议栈及网卡没有错误和丢包, 表明DS和RS上发包成功, 从二层链路可以接收到的数据包也都成功入栈。
3.6.2 从表中涉及VIP地址可知:
有问题的包都是涉及VIP的源地址或者目的地址:
-
源IP是VIP,目的IP也是VIP:
RS可以收到包,因为VIP地址在RS上是loopback环回接口,从网卡上收到本身发出去的包,RS默认情况下会拒收,即会丢弃该数据包。
# RS修改内核参数
sysctl -w net.ipv4.conf.all.accept_local=1
# 或者
# echo "net.ipv4.conf.all.accept_local = 1" >> /etc/sysctl.conf
# sysctl -p
-
源IP是CIP,目的IP是VIP:
RS收不到包, tcpdump抓不到包,而且DS/RS协议栈和网卡没有收发包错误和丢包;表明包成功发送出DS,但是没有到达RS,说明包在DS和RS之间丢失。
-
结论:
考虑到华为云环境下, 网络是虚拟网络, 比如构建于vxLan之上的二层链路网络; DS和RS之间还有物理网络设备, 如: VTEP入口。
考察云环境下的链路:
| 源 | VTEP | 目的/源 | VTEP | 目的 | |
|---|---|---|---|---|---|
| client发包 | client-ip | 通过 | VIP | ||
| client发包 | client-mac | 通过 | ds-mac | ||
| DS转发 | client-ip | 拒绝 | VIP | ||
| DS转发 | ds-mac | 拒绝 | rs-mac |
VTEP入口启用了rp_filter[功能是防止ip伪装和欺骗]。
4.尝试LVS/TUN模式
4.1 安装和配置tun模式
安装和配置tun模式, 并且在RS服务器上关闭rp_filter功能:
# echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
# sysctl -p
从client向集群VIP发包, RS上正常收到udp包。
考察云环境下的链路:
| 源 | VTEP | 目的/源 | VTEP | 目的 | |
|---|---|---|---|---|---|
| client发包 | client-ip | 通过 | VIP | ||
| client发包 | client-mac | 通过 | ds-mac | ||
| DS转发 | ds-ip | 通过 | rs-ip、 内含ip包: client-ip —> VIP | ||
| DS转发 | ds-mac | 通过 | rs-mac、内含ip包: client-ip —> VIP |
VTEP设备看到的数据包, 是ds-ip/ds-mac发送到rs-ip/rs-mac的, 符合rp_filter的验证。
RS服务器接收到数据包后, tunl0网卡及内核ipip模块解封数据包后, 内核协议栈看到的数据包是client-ip发送到VIP的, 而VIP是本地tunl0网卡的IP地址, 并且本地已经关闭rp-filter功能, 可以顺利通过内核ip路由的校验, 进入协议栈及应用层。
4.2 抓包验证
从101.43发包, 链路是:
101.43 —> 101.60/101.41 —> 101.42
在101.60/101.41上抓包, 收到的包:
Frame-53, 2d:d7 —> ce:54, 即101.43至101.60/101.41:

Frame-54, ce:54 —> 9f:4b, 即101.41至101.42:

可以看到这个Frame做了IP-over-IP. ip协议层上, ip地址和mac地址一一对应, 可以通过rp-filter检查。
至101.42, 内核IPIP模块解封后:

相关文章:
华为云环境下LVS/DR架构的故障诊断优化
本文作者:刘涛 文章目录 前言1.LVS/DR集群的问题2.华为云环境3.问题排查3.1 检查LVS/DR模式配置3.1.1 RS服务器3.1.2 DS服务器 3.2 继续分析抓包结果3.2.1 调整tcpdump抓包过滤条件3.2.2 client向集群VIP发包3.2.3 DS服务器arp消息 3.3 查看丢包3.3.1 监控DS和RS服…...
leetcode hot100除自身以外的数组的乘积
238. 除自身以外数组的乘积 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…...
SQL server学习09-数据库编程(上)
目录 一,了解T-SQL语言 1,常量(标量值) 2,变量 1)局部变量 2)全局变量 二,内置函数 1,字符串函数 2,数学函数 3,日期时间函数 4&#x…...
什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
在刚刚过去的 FlutterInProduction 活动里,Flutter 官方除了介绍「历史进程」和「用户案例」之外,也着重提及了未来相关的 roadmap ,其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…...
java全栈day19--Web后端实战(java操作数据库3)
一、MyBatis 1.1介绍 前提引入: controller(控制层)作用:接受请求,响应数据 service(业务层)作用:负责具体的逻辑处理 dao(持久层)作用:数据访问层 一般的访问流程:浏览器发起请求过来,先…...
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802958.html?templateId1718516 问题现象 Mybatis-Plus是Mybatis的增强工具,旨在简化开发者的CRUD操作,目前被广泛应用,Mybatis-Plus框架适配了多种…...
Ansible 批量管理华为 CE 交换机
注:本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地:贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具,AnsibleWorks 成立于 2012 年&a…...
基于自定义注解与 AOP 切面实现接口日志全面数据库存储
基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...
GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...
单片机:实现驱动超声波(附带源码)
单片机实现驱动超声波模块 超声波模块(如HC-SR04)广泛应用于距离测量、避障系统、自动驾驶等嵌入式项目中。它能够通过发射超声波信号并接收反射波来计算物体的距离。本文将介绍如何使用单片机(如51系列单片机)驱动超声波模块&am…...
2025.01.15python商业数据分析top2
一、 导入项目 导入项目、准备项目数据 import pandas as pd# 文件路径为python文件位置下的相对路径dwxpd.read_excel("电蚊香套装市场近三年交易额.xlsx") fmfzpd.read_excel("防霉防蛀片市场近三年交易额.xlsx") msmcpd.read_excel("灭鼠杀虫剂市…...
信息系统项目管理-绩效考核
1.1.组织战略 组织的产品和服务战略的类型通常可以分为:技术密集型、()、目标动态型。 A市场导向型 B成本导向型 C人力密集型 D产品导向型 答案B 在组织的四项基本能力中,建立战略性奖励措施,根据员工对组织的贡献&am…...
【Linux】数据呈现
一、数据的输入与输出 1、标准文件描述符 Linux系统会将每个对象都当做文件来处理,包括输入和输出。它用文件描述符来标识每个文件对象。 文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。每个进程一次最多可以打开9个文件描述符。bash sh…...
oracle 加字段和字段注释 sql
在 Oracle 数据库中,你可以使用 ALTER TABLE 语句来添加字段,并使用 COMMENT ON COLUMN 语句来添加字段注释。以下是一个示例: 假设你有一个名为 employees 的表,你想要添加一个名为 email 的字段,并为其添加注释。 …...
计算机网络压缩版
计算机网络到现在零零散散也算过了三遍,一些协议大概了解,但总是模模糊糊的印象,现在把自己的整体认识总结一下,(本来想去起名叫《看这一篇就够了》,但是发现网上好的文章太多了,还是看这篇吧&a…...
一文了解 gis 相关服务=》及前端地图服务相关总结
文章目录 概要OGC技术名词解释cesium 应用案例openlayers 中应用实例XYZ服务OSM服务WMS服务WMTS服务WFS服务 mapbox 应用实例矢量瓦片服务栅格瓦片服务WMS服务WFS服务 leaflet 中 地图服务实例加载OpenStreetMap瓦片图层加载自定义XYZ瓦片图层加载WMS服务图层加载WFS服务图层加…...
Brocade G610 配置
配置流程 zone创建–>cfg创建–>ip配置–>cfg启动并保存 查看端口信息 G610:admin> switchshow switchName: G610 switchType: 170.5 switchState: Online switchMode: Native switchRole: Principal switchDomain: 1 switchId: ff…...
DuetWebControl 开源项目常见问题解决方案
DuetWebControl 开源项目常见问题解决方案 DuetWebControl A completely new web interface for the Duet electronics [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/du/DuetWebControl 一、项目基础介绍 DuetWebControl 是一个为 RepRapFirmware 设计的完全响…...
亚信安全举办“判大势 悟思想 强实践”主题党日活动
为深入学习和贯彻党的二十届三中全会精神,近日,亚信安全举办了 “学习贯彻党的二十届三中全会精神——‘判大势 悟思想 强实践’党日活动”,并取得圆满成功。 本次活动特邀南京市委宣讲团成员、南京市委党校市情研究中心主任王辉龙教授出席。…...
Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
