DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
DR模式是互联网使用比较多的一种模式。
DR模式原理图:
DR模式原理过程简述:
VS/DR模式的工作流程图如上图所示,它的连接调度和管理与NAT和TUN中的一样,它的报文转发方法和前两种不同。DR模式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。另:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。)然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。
DR模式小结:
1、通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
3、因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
4、RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
5、RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
6、由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。
官方三种负载均衡技术比较总结表:
工作模式 |
VS/NAT |
VS/TUN |
VS/DR |
Real server(节点服务器) |
Config dr gw |
Tunneling |
Non-arp device/tie vip |
Server Network |
Private |
LAN/WAN |
LAN |
Servernumber(节点数量) |
Low 10-20 |
High 100 |
High 100 |
Real server gateway |
Load balance |
Own router |
Own router |
优点 |
地址和端口转换 |
Wan环境加密数据 |
性能最高 |
缺点 |
效率低 |
需要隧道支持 |
不能跨域LAN |
实验环境图:
LVS配置:
# ifconfig eth0:0 10.6.2.195 netmask 255.255.255.255
# route add -host 10.6.2.195 dev eth0:0
# route -n
# yum install -y ipvsadm
# modprobe ip_vs
# ipvsadm -C
# ipvsadm -At 10.6.2.195:80 -s rr
# ipvsadm -at 10.6.2.195 -r 10.6.2.192 -g
# ipvsadm -at 10.6.2.195:80 -r 10.6.2.192 -g
# ipvsadm -at 10.6.2.195:80 -r 10.6.2.191 -g
# ipvsadm -Ln
# watch ipvsadm -Ln
Real Server 配置:
# ifconfig lo:0 10.6.2.195 netmask 255.255.255.255
# route add -host 10.6.2.195 dev lo:0
# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce