LVS下隧道模式RS的MTU值设置

      基础知识:

    MTU是Maximum Transmission Unit(最大传输单元),单位是bytes的方式,是链路层的一个特性,不同网络类型都有一个上限,这里主要说以太网。

      用途:

    设置MTU的初衷是要控制链路层的传输单元,如果IP层有一个数据包要传输,而且数据包的长度比链路层的MTU还要大,那么不可能一次传输完毕,需要把数据包进行分片,每片必须小于通信设备两端的MTU值。设备MTU设置过大,超过了其他设备的MTU值,原本的一个数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。而MTU设置过小,就会增加传输次数,影响效率。

     具体场景:

    

公司的前端接入使用了LVS的模式,client请求vip后,LD将请求提交给我们后端的RS服务器,此时RS经过处理后把报文通过外网直接返回给client,这个过程涉及到一个问题,就是RS在返回用户数据包之前,添加16bytes的VIP地址头。

      

     关键分析:

 

    目前公司所使用的服务器网卡默认的MTU值是1500,而目前大多数设备也使用该数值。RS服务器处理数据包后,网卡的MTU是1500,而此时RS还需要在该包前加上VIP的地址头,此时包长度为1516,超出了大部分设备的MTU值,也就是很多超过1500的包会被拆分成多个数据包,导致很多数据碎片,增加丢包率,对服务器性能和用户体验所有影响。

 

 

    解决方案:

 

    修改外网网卡eth0的mtu值为1480,此时加上vip地址后,就不会超过1500bytes这个网络上的默认值。

 

    # /sbin/ifconfig eth0 mtu 1480,将该配置写入RS初始化脚本。

======================

在LVS的三种网络拓扑模式里面,只有Tunnle模式是可能需要修改RS的MTU值的。原理是:Tunnel模式将数据分组从LD传送至RS的时候会增加20
个字节长度的IP首部。

由于LVS的VS/TUN模式具有RS和LD无需在同一子网的优点,因而非常容易在现有业务IDC格局下的部署和扩容。

 

posted on 2013-01-21 16:02  jackiedai  阅读(1167)  评论(0编辑  收藏  举报

导航