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:
注:不能在分发器上直接测试,需要去其他机器上测试
[root@localhost network-scripts]# elinks 172.17.1.160 --dump
NAT/DR/TUN比较
比较
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性能要比后两种差一倍。
关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。
本人目前从事爬虫这一块,有需要网站、自媒体、客户端、小程序、微信、以及不方便查找,需要抓取数据的可以联系我,明码标价99元/1次。自己女票从事平面设计这一块,需要设计海报,宣传册的也可以联系我,明码标价3元/1页。
本人微信: