上篇博客https://blog.51cto.com/14181896/2367578介绍LB集群的LVS-NAT模式 , 它是基于IP , 通过修改目标IP地址来实现的 , 而LVS-DR模式基于数据链路层的负载均衡 , 它是通过修改修改MAC地址进行的负载均衡 .


 一 . LVS-DR模式作用及介绍


LVS-DR就是数据链路层负载均衡 , 是指在通信协议的数据链路层修改mac地址进行负载均衡

这种数据传输方式又称作三角传输模式,负载均衡数据分发过程中不修改IP地址,只修改目的mac地址,通过配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,从而达到不修改数据包的源地址和目的地址就可以进行数据分发的目的,由于实际处理请求的真实物理服务器IP和数据请求目的IP一致,不需要通过负载均衡服务器进行地址转换,可将相应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。


 二 . LVS-DR模式的工作过程


image.png


LVS-DR模式流程图解析

(1).当用户请求到达Director Server,,时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(2).PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(3).IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址 
(4).由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(5).RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP 
(6).响应报文最终送达至客户端


 三 . LVS-DR模型的特性


1). 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
2). RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
3). RS跟Director Server必须在同一个物理网络中
4). 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
5). 不支持地址转换,也不支持端口映射,因为DR模型是工作在二层的,二层只处理数据包中的MAC地址
6). RS可以是大多数常见的操作系统

7). RS的网关绝不允许指向DIP(因为我们不允许他经过director)
8). RS上的lo接口配置VIP的IP地址


 四 . 部署LVS-DR实例


实验目标 : 搭建LVS-DR模式负载均衡集群 , 部署LVS-DR服务器 和 两台apache后端服务器 .


实验拓扑图

image.png


实验准备:

客户端/服务器                          IP地址
Client
Directer  ServerDIP:192.168.11.11  VIP:192.168.11.100/24
Real  ServerRIP:192.168.11.12  VIP(lo:0):192.168.11.100/32
Real  ServerRIP:192.168.11.13  VIP(lo:0):192.168.11.100/32


实验需要解决的问题有:

两个http服务器除了有自己的rip以外还要拥有vip
    因为:数据包需从realServer返回 ,realServer返回的数据需要源IP为VIP
    解决:添加 lo接口(本地环路接口) ,lo:1   vip/32.
               ifconfig   lo:0   192.168.11.100/32     (up使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的)

当GW(网关)向下广播vip的时候 要分发器的vip响应 而两个http的vip不要响应
    因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.  
    解决:
       echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
       echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
       #arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo接收设备)
       echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce   
       echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      

实验部署流程


关闭防火墙和selinux(3台服务器均执行)

systemctl  stop  firewalld          #关闭防火墙

setenforce   0                             #关闭selinux


部署后端服务器(192.168.11.12和192.168.11.13)

安装apache服务器(这里以脚本简单脚本方式进行部署)

[root@node12 ~]# vim apache.sh

rpm  -q  httpd || yum install  -y http >/dev/null            #查httpd软件是否安装 , 没有就安装

systemctl  restart  httpd && systemctl  enable  httpd   #启动httpd服务设置开机自启动

ifconfig lo:1 192.168.11.100 netmask 255.255.255.255    #设置虚拟接口IP为192.168.11.100(VIP) , 用于广播

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore          #关闭Linux内核功能 

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ip  a                                                                                     #查看添加虚拟接口IP后的IP状态

echo  'www.node12.com'  >  /var/www/html/index.html

curl  192.168.11.12

将脚本传给主机192.168.11.13

scp  apache.sh  root@192.168.11.13:/root/

image.png

image.png

image.png


在192.168.11.13上运行脚本 , 查看IP信息并设置apache主页

image.png


部署LVS调度器(Director server  IP:192.168.11.11)

[root@node11 ~]# ifconfig ens33:0 192.168.11.100/24 up       #添加虚拟网卡IP为192.168.11.100/24

[root@node11 ~]# ip a                                                               #查看IP信息

 yum install -y ipvsadm > /dev/null                                           #安装ipvsadm软件

[root@node11 ~]# ipvsadm -A -t 192.168.11.100:80 -s wrr     #设置vip对应的后端apache群服务

[root@node11 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.12:80 -g -w 1     #设置权重为1

[root@node11 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.13:80 -g -w 3      #设置权重为3

[root@node11 ~]# ipvsadm -Ln                                             #查看ipvsadm设置的信息

[root@node11 ~]# curl 192.168.11.12                                     #访问192.168.11.12apache服务

[root@node11 ~]# curl 192.168.11.13                                     #访问192.168.11.13apache服务

image.png


windows客户端进行测试

image.png