[负载均衡案例分享系列] 一个由负载均衡使用模式导致间断访问失败问题的处理

对于负载均衡的使用,相信大家都不陌生。常见的使用方法是在多台ECS上架设Web服务器后,前端配置负载均衡,将ECS作为后端Real Server,根据实际业务需求,配置TCP模式或HTTP/HTTPS模式提供服务。

本篇文章主要讨论的是负载均衡4层TCP模式下,一种罕见的部署访问模式导致的间断访问失败问题的处理过程。由此大家可以了解到:

1、4层TCP模式下负载均衡的工作原理

2、4层TCP模式下负载均衡访问部署的限制

3、4层TCP模式下负载均衡问题排查的常见思路

4层TCP模式下负载均衡的工作原理

首先,我们先来温习一下4层负载均衡的工作原理,参考知识点“负载均衡技术原理浅析”。

https://help.aliyun.com/knowledge_detail/39444.html?spm=5176.7839438.2.6.nvWFZU

4层TCP的负载均衡,使用Full NAT的工作模式,负载均衡集群引入local address(内网IP地址)的概念。

首先,我们设定相关的术语:

  • 访问负载均衡的客户端的IP为Client IP,简称CIP。
  • 负载均衡对外服务的IP为Virtual IP, 简称VIP。
  • 负载均衡集群内部的IP为Local IP, 简称LIP。
  • 负载均衡后端Real Server的IP为Real Server IP,简称RIP。

在客户端访问负载均衡的过程中,报文源地址->目的地址会从CIP->VIP转换为LIP->RIP,同时相应的源端口也会改变。而 LIP和RIP均为IDC内网IP,可以跨VLAN通讯。IN/OUT的数据流全部经过LVS,为了保证带宽,采用万兆(10G)网卡。如下是FULLNAT转发模式,当前仅支持TCP协议。


更深入一层,对于后端Real Server,如果负载均衡配置了"获取客户端IP地址",那是如何实现的呢?

如下图,对于运行该ECS的物理机NC,在NC的物理网卡和ECS虚拟网卡接口之间,有一个模块"SLB地址转换模块",专门用来实现LIP->RIP的包,转换为CIP->RIP,让Real
Server可以获取到客户端的真实IP地址。

案例处理过程

问题现象

客户反馈其内网SLB在业务流量较大的情况下,某些固定的ECS客户端访问内网SLB出现无法连接的情况。但与此同时,其它ECS客户端访问SLB正常;而且问题ECS客户端直接访问SLB后端Real Server的业务也没有问题。

部署架构比较简单.

   内网ECS
<---> 内网SLB <--> 内网后端Real Server ECS

客户使用脚本,利用nmap或者nc每隔1秒访问负载均衡,尝试建立TCP连接,而后释放。

当该脚本打印出filter时,则出现连接失败。从客户端抓包来看,客户端发送的TCP SYN包没有得到SLB返回的SYN+ACK响应。

脚本如下:

#!/bin/bash
while true;do
nmap -Pn -p 9999 192.168.1.1 | awk "\$1 ~ /9999/ {print \$2}" | grep "filter"
sleep 1
done

注: 9999是负载均衡的TCP监听端口,192.168.1.1是负载均衡的VIP地址。

分析思路

由于负载均衡访问的链路过长,在处理负载均衡相关网络问题,我们可以根据整体网络链路,结合问题现象和对比测试,来定位问题发生的可能点。

一般而言,对于客户端访问量流量大的情况下才出现问题,我们会怀疑如下可能性:

  1. 云盾防护
    是否客户端的某些访问行为触发了云盾的防护机制,导致访问失败。
    跟进分析:未发现云盾的拦截日志中有相关记录,可排除。
  2. 物理机性能问题
    流量过高达到ECS 内网卡流量上限。
    跟进分析:检查发现ECS内网卡流量不高,可排除。
  3. 后端RS的问题
    后端RS的TCP内核参数配置不合理,导致TCP核心资源耗尽,例如Time Wait量过多导致新连接无法建立,或者后端RS的防火墙对于指定源地址丢包。
    跟进方案:检查/var/log/messages日志,检查sysctl.conf配置文件参数,检查防火墙配置,未发现可疑点。可排除。
  4. IDC中间链路问题
    是否中间交换机链路对于特定源IP、特定目的IP存在丢包情况。
    跟进方案:网络团队检查链路告警日志,未发现可疑点,升级相关设备驱动到最新版本后,问题依旧。可排除。
  5. 负载均衡或者NC物理机上相关模块的处理问题
    考虑到该问题仅仅在流量大情况下发生,结合客户端访问Real Server不存在丢包,仅仅是访问负载均衡失败,但考虑到负载均衡集群是为多个负载均衡实例提供服务,集群上其它负载均衡实例均正常工作。所以我们比较怀疑是否NC物理机处理存在问题。

抓包分析

为了准确定位问题,我们需要在问题情况下,进行必要的抓包对比分析。

注:为了保障客户数据的安全性,我们对所有IP地址进行隐藏

客户端内网CIP为:xxx.xxx.88.100, 内网SLB为xxx.xxx.23.111,内网Real Server为xxx.xxx.98.79

所以实际链路是

xxx.xxx.88.100(客户端ECS)<--> SLB:xxx.xxx.23.111 端口 18056 <--> 后端ECS: xxx.xxx.98.79 端口 8056

注:因为客户端有绕过SLB到RS的实际业务,所以在客户端,Real Server,Real Server所在NC抓包会发现大量8056端口的包。

客户端抓包

注:此处的网络包分析使用微软Network
Monitor工具,与Wireshark分析方法类似。

编号2268. 客户端源端口46690直接访问Real Server的8056端口的SYN包。

编号2270. 客户端源端口21521访问负载均衡VIP的18056端口的SYN包,后续没有得到响应 (这是我们重点关注的包)。

编号2271. 客户端源端口46696直接访问Real Server的8056端口的SYN包。

Real Server所在NC的物理网卡抓包

抓包条件tcp[13] & 2 == 2 and tcp port 8056,抓取网络包如下:

20:31:36.424279 proto: TCP (6), length: 52) xxx.xxx.88.100.46690 > xxx.xxx.98.79.8056: S, cksum 0xc894 (correct), 3791054471:3791054471(0) win 14600

20:31:36.424350 proto: TCP (6), length: 52) xxx.xxx.98.79.8056 > xxx.xxx.88.100.46690: S, cksum 0x6b50 (correct), 4256391041:4256391041(0) ack 3791054472 win 14600

如上两个包是客户端源端口46690的SYN包是直接访问Real Server的8056端口的三次握手交互。

20:31:36.436453 proto: TCP (6), length: 60) xxx.xxx.124.161.5004 > xxx.xxx.98.79.8056: S 3171571935:3171571935(0) win 14600

该网络包为负载均衡集群将客户端源端口21521访问SLB IP 18056端口的SYN包通过Full NAT模式转换后,通过Local IP xxx.xxx.124.161的源端口5004发给后端Real Server。

这说明负载均衡集群没有丢包,该SYN包到达了NC的物理网卡。

20:31:36.445127 proto: TCP (6), length: 52) xxx.xxx.88.100.46696 > xxx.xxx.98.79.8056: S, cksum 0x92d2 (correct), 2695912842:2695912842(0) win 14600

20:31:36.445194 proto: TCP (6), length: 52) xxx.xxx.98.79.8056 > xxx.xxx.88.100.46696: S, cksum 0x1e24 (correct), 2827406360:2827406360(0) ack 2695912843 win 14600

如上客户端源端口46696的SYN包是直接访问Real Server的8056端口。

后端Real Server抓包

可以看到客户端访问Real Server 源端口为46690以及46696的包,但是无法看到SLB LIP转发的SYN包,所以该网络包丢在NC的物理网卡和后端Real
Server的虚拟化接口上。

通过引入NC虚拟化同学,我们确认该问题是由于TCP 会话冲突导致。因为客户端通过本地IP地址和随机源端口直接访问后端Real
Server,而客户端访问负载均衡VIP的包会被负载均衡更改五元组后,经过NC的“SLB地址转换模块”后,以CIP->RIP的方式发给后端Real Server。

在流量大的情况下,通过SLB LIP过来的以CIP->RIP访问后端Real Server的包,会与之前客户端直接以CIP->RIP的包存在冲突,导致NC无法将访问负载均衡的网络包发到后端ECS,造成问题。

而该问题仅仅在内网客户端同时访问内网负载均衡和后端的内网Real Server的部署模式,以及大流量的情况下才会出现。

负载均衡的使用建议

关于该问题,我们已经与负载均衡开发团队沟通,当前我们认为该方式不符合负载均衡的使用场景,建议客户避免该使用场景,后续会有相应的官方文档详细说明。

因此,请务必确保SLB使用模式的合理性,避免前端ECS同时访问SLB VIP以及直接后端ECS。在流量大的情况下,会出现会话冲突情况,导致通过SLB访问的会话出现无法访问的情况。


排查技术分享

通过该案例的分析,作为阿里云售后支持团队,我们也希望客户了解到如下的一些排查建议。

抓包是否必要?

在分析网络问题的过程中,抓包分析确实是最准确定位问题的方式。但是我们不建议未经分析,全链路抓包定位问题,这比较低效、而且耗时。

最好的方式是首先通过合理的对比测试,已有日志分析来排除可能原因,尽量的缩小问题范围,而后在必要的网络链路节点,通过合理的使用tcpdump的抓包条件,对比分析定位问题。

例如,该案例中,客户仅仅是TCP连接建立失败,但由于客户实际业务流量较大,抓取所有包分析明显不合理。使用tcpdump时,利用过滤条件"host 192.168.1.1 and tcp[13]&2==2", 仅仅抓取指定IP地址以及TCP三次握手建立连接的TCP SYN包和SYN+ACK包,这样包的量较少而且比较容易定位问题。

负载均衡集群是否可以抓包?

由于负载均衡集群的流量非常大,不建议在负载均衡抓包。一般而言,涉及到负载均衡的抓包有2种情况:

  1. 怀疑负载均衡丢包
  2. 健康检查失败

在上述情况下,我们建议如下4点抓包对比定位问题。

  1. 客户端
  2. 后端Real Server所在的NC物理网卡
  3. 后端Real Server的虚拟网卡接口
  4. 后端Real Server的操作系统内部

如上就是一个负载均衡案例处理的具体流程,我们之后也会继续分享一些负载均衡实际案例的处理分析过程以及最佳实践。

更多精彩活动:【有“福”同享.第二季】每日一分享,虚机邮箱免费用

时间: 2024-08-18 10:47:02

[负载均衡案例分享系列] 一个由负载均衡使用模式导致间断访问失败问题的处理的相关文章

海量图片系统集群分布式存储和负载均衡案例分享

对于Web服务器而言,用户对图片信息的访问是很消耗服务器资源的.当一个网页被浏览时,Web服务器与浏览器建立连接,每个连接表示一个并发.当页面包含多个图片时,Web服务器与浏览器会产生多个连接,同时发送文字和图片以提高浏览速度.因此,页面中图片越多Web服务器受到的压力也就越大. 一般小型网站是把所有页面和图片统一存放在一个主目录下,这样的网站对系统架构.性能要求都很简单.下面是原理图 一些稍有规模的网站都保存有大量图片资源.用户在访问这些站点网页时,网页中图片信息占到页面数据流量的大部分.由于

30天突破百度权重3的案例分享系列一:关键词为王

百度权重是爱站网.站长工具等第三方网站数据查询网站根据一定的算法而给出的类似于谷歌PR的数值,虽然有很多不足之处,不能看的太重,毕竟没有百度的承认,也只能流于民间,但也有一定的参考价值.因为现在很多链接交换群都打出了权重多少(qzX)的字样,不跟上没人搭理,为了能在换链接的时候有一定的优势,我也不得不走上了提升这个百度权重的道路,本文分享自己30天(操作30天,实际域名是2011年6月17的,网站是3月22上线,4月10号才有时间正是打理)快速突破权重3的经验,纯粹个人一点不多的经验,欢迎各位拍

LVS:三种负载均衡方式比较+另三种负载均衡方式

什么是LVS?   首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的.高可用的虚拟服务器.整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序.   为此,在设计时需要考虑系统的透明性.可伸缩性.高可用性和易管理性.一般来说,LVS集群

【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. 负载均衡主要有如下几个功能点: 负载均衡服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic Compute Service,简称ECS)资源虚拟成一个高性能.高可用的应用服务池:根据应用指定的方式,将来自客户端的网络请求分发到云服务器池中

一个爆品战略的案例访谈系列

2015年会做一个"爆品战略"的案例访谈系列. 做个客观性声明:只做价值和干货,绝不注水. 王治全是电商老兵,库巴创始人,二次创业杀入家纺电商.原因是因为库巴转型综合电商后,拜访了N家家纺厂商,发现一个大痛点:利润虚高.效率极低.王治全则以无甲醛.纯棉这两个点迅速打开市场. 王治全创业两年多的关键数据:销售额近亿,90天顾客回购率57%. 王治全的一款爆品是240根床品.双十一当天单品SPU卖出4200套,2015年240根床品计划销量在8至10万套. 王治全总结大朴爆品成功三要素:一

Photoshop高低频磨皮法修图原理和完整案例分享

  本文讲解Photoshop高低频磨皮法修图原理,并分享一个完整的高低频磨皮修图案例. 第一,高低频磨皮法原理讲解 Photoshop高低频磨皮法是将图像的形状和颜色分解成高频.低频两个图层,单独调整,互不干扰.低频层用来控制图像色斑和颜色,调节不会影响到图片细节.高频层主要控制细节而不改变颜色. 第二,photoshop高低频磨皮修图案例分享 看完上面的高低频磨皮法原理阐述,下面我们一起动手操作一个photoshop高低频磨皮修图案例. 首先,呈现出原图和高低频磨皮修图的效果对比: 操作步骤

交互设计案例分享:对话框引导用户操作

文章描述:交互设计案例分享:对话框引导用户操作. "怎么了?"除非你对某类对话框已司空见惯,否则遇到,第一反应往往是这样的?这种体验就像你明明急着去赶车,途中却不断被拦住塞传单一样.不能否认,它是一种打断,有时甚至会成为打扰.做为设计师,虽知"打断"暂不能杜绝,但不使之变为"打扰",却是我们该努力做到的: ① 多次打断=打扰 隔一个小时打断你一下,你或者还可以忍受.若是1分钟内好几次打断你,想起来就抓狂吧?这也是Chrome为什么在判断此网页多次

设计案例分享:QQ登陆节日banner的创作过程

文章描述:设计案例分享:QQ登陆节日banner的创作过程. QQ登录banner是与用户沟通情感的小窗口,在一些特殊的日子里我们尝试一些力所能及的表达方式来给用户一种感动,一种记忆. QQ登录banner正力求避免直白的画面呈现,增强画面的趣味性.故事性,唤起用户共鸣,以幽默的方式带给用户愉悦的心情. 下面分类归纳一些节日banner的创作过程,通过记录一些设计过程中的反复与纠结,总结几点与大家共享.一. 避免低幼与直白的画面铺陈 [开学日] 九月一日开学,对于在校学生或是毕业许久的社会人士,

发外链让关键字提升到首页第2名案例分享

前两天我在A5发的一篇文章叫做:"关键字指数2400在40天排名第6案例分享"其中讲述了我的新站在40天如何做到关键字:电子烟(排名第4),百度指数2400 相关网页约2,990,000篇关键字:健康电子烟(排名第2),百度指数730 相关网页约1,720,000篇,不好意思,上次那篇文章我留了一手,只是把重点一笔带过,没有详细的讲解,那么这次我决定详细的说出来我的2010站,把关键字做到第2,重点到底在哪里,请看正文. 此文的重点就是外链,我这次发这篇文章比较单纯,首发是在落伍者论坛