DR 模式是 lvs 集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于 NAT 模式的搭建与原理,为什么还要有 DR 模式与 IP 隧道模式呢?
首先我们来看 3 张图。LVS/NAT 模式如下图:
LVS/IP 隧道模式,如下图:
LVS/DR 模式,如下图。
上面三张图来自: , 此文也正式是官方详细描述 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 地址)技术,所有服务器都必须在同一个物力网段中。
首先我先上我的整体搭建机器的架构图上来,以便更直观的搭建与理解。
首先配置分发器这台机器,操作很简单,跟着做就可以啦。
- [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 广播包发送过来,做出应答。
接下来是大家最喜欢的总结内容啦,内容有二,如下:
1、希望能关注我其他的文章。
2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的 2 个交流群,我们一起学习探讨。
来源: http://www.cnblogs.com/knowledgesea/p/6407018.html