最新消息:

lvs fullnat 大文件问题

FullNAT admin 3811浏览 0评论

问题描述

fullnat模式下,RS没有重新编译toa模块。下载大文件,下载速率逐渐减小。

问题解决

关闭DS服务器的gro,就可以解决。 关闭RS的ip包DF应该也可以解决。

ethtool -K eth0 gro off

问题分析

  • 环境
CS 10.1.0.1
DS  10.1.0.2 10.0.0.2
RS  10.0.0.3

# DS
ipvsadm -A -t 10.1.0.2:80 -s rr
ipvsadm -P -t 10.1.0.2:80 -z 10.0.0.2
ipvsadm -a -t 10.1.0.2:80 -r 10.0.0.3:8080 -b

ethtool -K eth0 gro on

# RS
yum install nginx
dd if=/dev/zero of=./tmpfile bs=1M count=30
  • 测试

通过下载一个大文件,发现速度越来越慢。若DS是编译了toa模块就没问题。

# RS
wget -S 'http://10.1.0.2:80/tmpfile' -O /dev/null
  • 分析+验证
    1. 既然RS编译了toa模块可以,如果是DS不支持tcp option是不是可以解决呢。修改/proc/sys/net/ipv4/vs/fullnat_toa_entry内容为0,测试后没有效果。
      toa是解决真正的客户端ip的,DS通过把客户端ip放到ip option字段,RS toa模块,三次握手后通过把tcp option的字段提取出来。
      参考文章:

      1. LVS FULLNAT模式下客户端真实地址的传递
      2. lvs 负载均衡fullnat 模式clientip 怎样传递给 realserver
    2. 简单的猜测测试不行,那就抓一下包吧,抓包发现icmp包。根据icmp包的报错,知道DS分包丢弃。
    15:39:07.168229 IP (tos 0xc0, ttl 64, id 28648, offset 0, flags [none], proto ICMP (1), length 576)
        10.0.0.2 > 10.0.0.3: ICMP 10.0.0.2 unreachable - need to frag (mtu 1500), length 556
    
    1. 对比RS编译了toa模块的抓包结果。发现编译了toa模块的后端发过来的包,没有设置ip flag DF选项,而没有编译toa模块的后端发过来的包则设置了DF选项。

转载请注明:爱开源 » lvs fullnat 大文件问题

您必须 登录 才能发表评论!