• 每天进步一点点!

文章分类

推荐网站

常用手册

LVS之IP隧道(IP-TUN)【原创】

<<返回

2013-12-14 14:36:25

  • 简介

在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直 接返回给客户,将极大地提高整个集群系统的吞吐量。

 

IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

 

我们利用IP隧道技术将请求报文封装转 发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。 VS/TUN的体系结构如下图所示,各个服务器将VIP地址配置在自己的IP隧道设备上。

 

 

  • IP-TUN网络拓扑图

 

 

 

  • 网络环境准备

准备五台计算机,一台模拟外网的互联网用户(可以是Linux也可以是Windows),一台模拟LVS服务器(必须是Linux),另三台模拟真实的服务器(Linux)。我们这里使用VMWare安装CentOS5.6作为LVS服务器,另外用VMWare再clone三台CentOS5.6作为Real Server。用WMWare安装windows(我这里用的是windows2003)作为外网的互联网用户,做实验时,请将防火墙关掉。

  • 克隆三台RealServer

在CentOS5.6关机状态下,进行克隆。右击VM->Manage->Clone->Next....

这里我将3个虚拟机命名为:CentOS5.6.11,CentOS5.6.12,CentOS5.6.13

LVS的负载均衡需要用到ipvsadm,这里我们在CentOS5.6上用yum安装该软件

yum install ipvsadm
  • 设置网卡的连接方式

这里LVS只需要一块网卡,所以将所有计算机的网卡都设置为:vmnet1。

 

  • 配置IP地址

windows2003

ip:8.8.8.200 netmask:255.255.255.0

 

CentOS5.6

ifconfig eth0 8.8.8.10 netmask 255.255.255.0

CentOS5.6.1

ifconfig eth0 8.8.8.11 netmask 255.255.255.0

CentOS5.6.2

ifconfig eth0 8.8.8.12 netmask 255.255.255.0

CentOS5.6.3

ifconfig eth0 8.8.8.13 netmask 255.255.255.0

因为这里都是外网IP,所以不需要网关

 

配置ip-tun

CentOS5.6

#配置tunl0的ip地址及子网掩码
ifconfig tunl0 8.8.8.100 netmask 255.255.255.255
#添加路由表
route add -host 8.8.8.100 dev tunl0

用下面的命令查看是否多出一块tunl0的网卡:

ifconfig tunl0


 

用下面的命令查看路由表

route -n

 


 

说明:在一个计算机上的两个网卡不能属于同一网段,这里tunl0的子网掩码是255.255.255.255,可以将8.8.8.100划分到和其他ip地址为8.8.8.*并且子网掩码为255.255.255.0的不同网段,因为他们的子网掩码和IP地址相与得到的结果不同,前者是8.8.8.100,而后者是8.8.8.0。

在每台真实服务器(Real Server)上做如下相同操作

在CentOS5.6.1,CentOS5.6.2,CentOS5.6.3都输入下面命令

ifconfig tunl0 8.8.8.100 netmask 255.255.255.255
route add -host 8.8.8.100 dev tunl0

在每台真实服务器(Real Server)上都做arp忽略和arp宣告操作

在CentOS5.6.1,CentOS5.6.2,CentOS5.6.3都输入下面命令

echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

说明:

这里将arp_ignore设为1,arp_announce设为2的目的是,当arp广播时8.8.8.11,8.8.8.12,8.8.8.13,作出应答,而每个网卡上的8.8.8.100不做应答。具体的arp_ignore和arp_announce的含义可以参考下面的介绍

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 

1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 

2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 

3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7 - 保留未使用 

8 -不回应所有(本地地址)的arp查询

arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 

0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 

1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 

2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

 

CentOS5.6(LVS)设置ipvsadm

#清除之前的调度转换表
ipvsadm -C
 
#增加一个带有调度算法的转换表,-A增加 t是指tcp,-s用于指明调度算法
ipvsdam -At 8.8.8.100:80 -s rr
 
#增加要调度的真实服务器(RealServer)-r指真实服务器(Real),-m之Nat模式 -g指dr模式 -i指ip隧道模式
ipvsadm -at 8.8.8.100:80 -r 8.8.8.11:80 -i
ipvsadm -at 8.8.8.100:80 -r 8.8.8.12:80 -i
ipvsadm -at 8.8.8.100:80 -r 8.8.8.11:80 -i

用下面命令查看ipvsadm是否设置成功

ipvsadm -L -n

如果成功结果如图所示

 

 

  • 测试是否配置成功

开启CentOS5.6.11,CentOS5.6.12,CentOS5.6.13的apache(CentOS5.6不需要启动apache),在每服务器的网站的根目录都添加一个index.html,内容分别为8.8.8.11,8.8.8.12,8.8.8.13(在真实环境中每台真实服务器的内容是一样的,这里为了看到NAT的轮询效果,把他们的内容设置为每天服务器的IP地址),在windows2003上,通过浏览器访问8.8.8.100,刷新几次,如果配置成功,则网页上会交替显示:8.8.8.11,8.8.8.12,8.8.8.13。

 

  • IP-TUN的优缺点

在VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。

 

VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。

文章评论

  • 暂无评论

发表评论

昵称:

内容:

发表评论