LVS负载均衡企业实战之DR模式

DR模式全称为Direct Routing,即为直连路由模式,故名思义,NAT模式用于与外网相连的场景,而DR模式用于一个局域网内的场景。

一、工作流程图解:
在这里插入图片描述工作流程详述:用户请求LVS服务器的VIP,请求到达LVS服务器时,LVS将请求的报文的目标IP(即VIP)保持不变,目标MAC修改为后端Realserver服务器的MAC地址,转发给后端服务器;然后后端RealServer服务器收到报文,若目标MAC不是本地则丢弃报文,目标MAC是本地则处理请求。后端处理请求的服务器最终将数据直接返回给用户,不再经过LVS服务器。

二、DR模式特点&配置要点
1)LVS服务器单网卡即可配置负载均衡;
2)要求LVS必须和后端Realserver服务器在一个局域网;
3)LVS和Realserver要么统一配置公网IP,要么统一配置内网IP,比较浪费公网IP地址,所以一般在局域网中使用。
4)LVS和后端Realserver服务器上均配置VIP地址,故上述流程详述中识别后端服务器是靠MAC地址;LVS的VIP直接配置在真实物理网卡上,后端Realver机器的VIP配置在lo网卡上,避免冲突。
5)LVS服务器不需要开启路由转发功能;
6)Realserver上的VIP地址必须要抑制VIP的ARP响应。

三、LVS负载均衡之DR模式配置详解
1、配置ip_vs模块

ipvsadm -A -t 172.16.193.100:80 -s wrr
ipvsadm -a -t 172.16.193.100:80 -r 172.16.193.201:80 -g -w 2
ipvsadm -a -t 172.16.193.100:80 -r 172.16.193.202:80 -g -w 1

2、LVS服务器添加子网卡(VIP)
注:此处是给LVS服务器添加VIP,所以需要选择物理网卡的子网卡

cp ifcfg-ens33 ifcfg-ens33:1

vim ifcfg-ens33:1
#写入以下内容
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=172.16.193.100
NETMASK=255.255.255.0

systemctl restart network

在这里插入图片描述添加子网卡成功!
注:我使用的苹果电脑的终端,添加了子网卡的网卡不能用ssh连接!

3、后端服务器添加子网卡并抑制ARP的响应
把下面的脚本放到各个后端服务器,执行一下即可!

#!/bin/sh
#LVS Client Server
VIP=172.16.193.100
case  $1  in                                                                                                                                                                                                                                                    
start)                                                                                                                                                                                                                                            
    ifconfig lo:0 $VIP netmask 255.255.255.0 broadcast $VIP
    /sbin/route add -host $VIP 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
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
    exit 0
;;                                                                                                                                                                                                                                         
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac

脚本重点释疑:
arp_ignore参数(1)含义:只响应目标IP是本地真实网卡上配置的IP
arp_announce参数(2)含义:忽略报文的源IP地址,使用主机上能够跟用户通信的真实网卡发送数据

自己的理解:
arp_ignore参数,因为Nginx上的三台机器我们都需要配置抑制arp响应这个脚本,所以就是当用户访问VIP这个IP地址时,只会是LVS的VIP去响应,后端三个服务器因为被抑制而无法响应

arp_announce参数,当LVS将报文送到后端服务器,让其处理后,将处理后的数据返回给用户时,按理来说应该使用被请求IP(VIP)作为源IP,返回处理后的数据,但是配置了这个参数便使用真实网卡的IP作为源IP,返回处理后的数据。

发布了162 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/104232319