DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为何还要有DR模式与IP隧道模式呢?html
首先咱们来看3张图。LVS/NAT模式以下图:linux
LVS/IP隧道模式,以下图:nginx
LVS/DR模式,以下图。web
上面三张图来自:http://www.linuxvirtualserver.org/zh/lvs3.html ,此文也正式是官方详细描述LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工做原理,以及它们的优缺点的文章,推荐你们要详细看看。算法
这里我简述总结下他们的路由方式以及作一个区别:服务器
VS/NAT模式:客户机-->请求分发服务器-->Real Server-->请求分发服务器--->客户机。网络
VS/DR模式:客户机-->请求分发服务器-->Real Server-->客户机。架构
VS/TUN模式:客户机-->请求分发服务器-->Real Server-->客户机。负载均衡
由此能够看出,NAT模式的请求分发服务器会成为这个模式的瓶颈所在,由于全部请求与响应走要通过他转发。那么IP隧道模式与DR模式的区别在于,DR模式与IP隧道模式相比,DR模式没有IP封装的开销,但因为采用物理层(修改MAC地址)技术,全部服务器都必须在同一个物力网段中。ide
首先我先上个人总体搭建机器的架构图上来,以便更直观的搭建与理解。
首先配置分发器这台机器,操做很简单,跟着作就能够啦。
[root@localhost network-scripts]# ifconfig eth0:1 172.18.8.6 netmask 255.255.255.255 --此接口只是临时生效,下面须要配置的是永久生效 [root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
[root@localhost network-scripts]# cat ifcfg-eth0:1 TYPE="Ethernet" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" NAME="eth0:1" DEVICE="eth0:1" ONBOOT="yes" IPADDR="172.18.8.6" NETMASK="225.225.225.0" HWADDR="00:0c:29:af:ff:3a"
[root@localhost network-scripts]# ipvsadm -A -t 172.18.8.6:80 -s rr [root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.5 -g [root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.4 -g
到此,分发器这台机器就配置完成啦。
而后配置Real Server
[root@localhost ~]# ifconfig lo:1 172.18.8.6 netmask 255.255.255.255 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:1
[root@localhost network-scripts]# cat ifcfg-lo:1 CE=lo:1 IPADDR=272.18.8.6 NETMASK=255.255.255.255 # If you're having problems with gated making 127.0.0.0/8 a martian, # # you can change this to something else (255.255.255.255, for example) ONBOOT=yes NAME=loopback
[root@localhost network-scripts]# echo "1">"/proc/sys/net/ipv4/conf/eno16777736/arp_ignore" [root@localhost network-scripts]# echo "2">"/proc/sys/net/ipv4/conf/eno16777736/arp_announce" [root@localhost network-scripts]# cat /etc/sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv4.conf.eno16777736.arp_ignore=1 net.ipv4.conf.eno16777736.arp_announce=2
[root@localhost network-scripts]# /usr/sbin/nginx
直接联通realserver,没问题,以下。
访问分发器ip,作到啦轮询效果,以下。
arp响应限制arp_ignore:
arp响应限制arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,做出相应级别的限制: 肯定不一样程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
在dr模式中咱们的realserver配置arp_ignore为1:意思是否是eno16777736所在ip的请求,我不与应答。arp_announce为2:意思是我不对外公布我有出来eno16777736所在ip以外的任何ip,避免主动宣告ip使arp广播包发送过来,作出应答。