DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。

异地机房的好处:容灾

        |

但是是否可以保证边界最近访问到对应的real server呢?不能,这是最大的问题

        |

   DNS view功能实现边界最近访问。  智能DNS

172.17.1.150 配置成Director:

1,配置网络:

eth0 DIP  172.17.1.150
eth1   VIP  172.17.1.160
[root@localhost network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward

2, 配置LVS TUN模式

[root@localhost network-scripts]# yum install ipvsadm
[root@localhost network-scripts]# ipvsadm -C
[root@localhost network-scripts]# ipvsadm -A -t 172.17.1.160:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.151 -i
[root@localhost network-scripts]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.152 -i
# -i  隧道模式
[root@localhost network-scripts]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.1.160:80 rr
  -> 172.17.1.151:80              Tunnel  1      0          0         
  -> 172.17.1.152:80              Tunnel  1      0          0 
RealServer: 172.17.1.160

3,配置IP:

配置 eth0的  RIP为:  172.17.1.151

[root@localhost ~]# modprobe ipip   #在加载好ipip模块后就会有默认的tunl0隧道。

注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。

使用ifconfig查看。没有tun0  ,加参数-a  时,查看可以看到tun0

[root@localhost ~]# ifconfig -a         #查看。
eth0      Link encap:Ethernet  HWaddr 02:00:73:5E:03:F6  
          inet addr:172.17.1.151  Bcast:172.17.15.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2046 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:129393 (126.3 KiB)  TX bytes:8778 (8.5 KiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
tunl0     Link encap:IPIP Tunnel  HWaddr   
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@localhost ~]# lsmod | grep ipip
ipip                    8403  0 
tunnel4                 2975  1 ipip

配置VIP:

生成ifcfg-tunl0配置文件:

[root@localhost ~]# ifconfig tunl0 172.17.1.160 netmask 255.255.255.255 up
[root@localhost ~]# service network restart

4,关闭ARP转发

echo '0' > /proc/sys/net/ipv4/ip_forward
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
echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter  
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter  
#  tunl0/rp_filter 默认为1 ,需要改为0,关闭此功能。Linux的rp_filter用于实现反向过滤技术,也即uRPF,它验证反向数据包的流向,以避免伪装IP攻击。然而,在LVS TUN 模式中,我们的数据包是有问题的,因为从realserver eth0 出去的IP数据包的源IP地址应该为192.168.1.62,而不是VIP地址。所以必须关闭这一项功能。DR和TUN在网络层实际上使用了一个伪装IP数据包的功能。让client收到数据包后,返回的请求再次转给分发器。
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter    #这个值默认就是0,此功能就是关闭的。所以在LVS DR模式中,不需要修改这一样内核参数

永久生效:

[root@localhost ~]# vim /etc/sysctl.conf #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@xuegod62 ~]# sysctl -p

4,配置web服务器  

[root@localhost ~]#yum install httpd
[root@localhost ~]# echo yunweimao > /var/www/html/index.html
[root@localhost ~]# service httpd restart
RealServer: 172.17.1.152

5,配置IP地址:

配置eth0    RIP  172.17.1.152

[root@localhost ~]# modprobe ipip
#在加载好ipip模块后就会有默认的tunl0隧道

配置VIP:

[root@localhost ~]# ifconfig tunl0 172.17.1.160 netmask 255.255.255.255

查看:

[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:00:2A:B0:03:F7  
          inet addr:172.17.1.152  Bcast:172.17.15.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2286 errors:0 dropped:0 overruns:0 frame:0
          TX packets:128 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:144835 (141.4 KiB)  TX bytes:15940 (15.5 KiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
tunl0     Link encap:IPIP Tunnel  HWaddr   
          inet addr:172.17.1.160  Mask:255.255.255.255
          UP RUNNING NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

6,关闭ARP转发

echo '0' > /proc/sys/net/ipv4/ip_forward
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
echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter

永久生效:

[root@localhost network-scripts]#vim /etc/sysctl.conf  #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@localhost network-scripts]# sysctl -p

7,配置web服务器  

[root@localhost ~]# yum install httpd
[root@localhost ~]# echo maoxiaopu > /var/www/html/index.html
[root@localhost ~]# service httpd restart

测试:

先测试realserver:

http://172.17.1.151

http://172.17.1.152

正常打开

测试VIP:

IBGP全互联 建立虚拟地址邻居 虚拟ip lvs_NAT

注:不能在分发器上直接测试,需要去其他机器上测试

[root@localhost network-scripts]# elinks 172.17.1.160 --dump

NAT/DR/TUN比较

IBGP全互联 建立虚拟地址邻居 虚拟ip lvs_Mask_02

比较

NAT    DR     TUN

配置复杂度

复杂    简单    复杂

拓展性

很好    差    好

支持数量

>100    <20    >100

特点

封装IP    地址转化    修改MAC

支持OS

需要支持IPIP隧道    Any    大部分

三种模式下的简单压力测试

简单的压力测试采用Apache ab命令,500并发用户,10w的请求总数。

[root@localhost network-scripts]# rpm -qf `which ab`

httpd-tools-2.2.15-15.el6.x86_64

结果如下:

LVS模式   总耗时(s) TPS(#/sec)  TPS(Transaction Per Second)每秒系统处理事务的数量

NAT 22.480 4448.34

TUNNEL 10.707 9339.80

DR 10.177 9825.68

可以看出NAT性能要比后两种差一倍。