Chinaunix首页 | 论坛 | 博客
  • 博客访问: 809992
  • 博文数量: 142
  • 博客积分: 3505
  • 博客等级: 中校
  • 技术积分: 1501
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 19:30
文章分类

全部博文(142)

文章存档

2012年(33)

2011年(109)

分类: LINUX

2011-09-10 21:52:48

一次负载均衡的排障: PMTU

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://virtualadc.blog.51cto.com/3027116/660901

问题

某日,一个重要客户报障,新上线的一套ERP系统,使用负载均衡做流量调度。本地用户访问无问题,但是通过VPN拨号连接的用户无法正常应用,客户端登录成功,但数据传输失败。

处理过程

部分用户正常,部分用户有问题,最常见的可能性就是和MSS报文大小相关。现场测试,客户端跳过负载均衡直接连接后台服务器访问正常。确认问题在负载均衡设备处,在负载均衡设备上抓包查看:

发现如下的ICMP Type 3 Code 4 PMTU Discovery 报文

该报文表明,从服务器到VPN客户端之间的MTU值最大不应超过1443字节, 使用默认的1500字节大小是无法发送成功的。

回归基本原理

PMTU发现的工作原理如下

 

(1)    源端主机按照自己的MTU对报文进行分片,之后向目的主机发送报文。

(2)        中间转发设备接收到该报文进行转发时,如果发现转发报文的接口支持的MTU值小于报文长度,则会丢弃报文,并给源端返回一个ICMP差错报文(也就是我们在负载均衡抓到的报文),其中包含了转发失败的接口的MTU

(3)        源主机收到该差错报文后,将按照报文中所携带的MTU重新对报文进行分片并发送。

(4)        如此反复,直到目的端主机收到这个报文,从而确定报文从源端到目的端路径中的最小MTU

解决问题

根据流程,可以判断是负载均衡设备未将收到的 PMTU报文转发给服务器,导致服务器未能正确获知链路上的MTU,继续使用较大的MTU发送报文,结果在中途被drop掉,不能发送给客户端。

检查负载均衡配置,允许ICMP转发后,再次测试VPN客户,一切访问正常。

经验总结

1)确认您选择的负载均衡设备支持PMTU功能

2)确认负载均衡设备可以转发PMTU ICMP报文给服务器(不要在负载均衡设备或者服务器上设置过于严格的安全策略,例如丢弃所有ICMP报文)

(J.L)

本文出自 “ADC技术博客” 博客,请务必保留此出处http://virtualadc.blog.51cto.com/3027116/660901

阅读(1314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~