一、DR模式
DR(Direct Routing):直接路由模式。
工作原理:
- 在一台主机上面搭建LVS服务器,设置LVS的工作模式是DR模式。LVS仅仅是一个调度器,它会把客户端的请求转发给后端服务器。
- DR模式直接由后端服务器把数据返回给客户端,不需要再逆向发送数据包,此时LVS调度器叫做DS调度器(Director Server),RS是真正的后端web服务器(Real Server),LVS专注做调度时效率很高
具体过程:
DR模式改变的是MAC地址:
Client发送请求 --> DS(调度器) --> prerouting --> INPUT --> postrouting --> RS(Real Server) –> lo --> 网卡eth0 --> Client
- 用户(client)发送请求给调度器(DS),DS调度器先把请求发往 prerouting 链(内核空间kernal space),确定请求的是不是 VIP 。
- 到了 INPUT 链之后,如果请求的是集群服务,会在这里修改 MAC 地址,把源 MAC 地址改为 DS 的MAC地址,把目的 MAC 地址改为 RS 的MAC地址,此时 IP 仍然不变,处理完成后把请求发往 postrouting 链。
- postrouting 链检测请求的是否为 RS(会检测请求的MAC地址),如果是,接受请求,把请求通过回环接口发给出口的网卡,再发回给客户端。
LVS(ipvs ipvsadm)–> IPVS 改变数据包的 ip 和端口-> POSTROUTING –> 后端服务器
注意:
1.数据在系统内的交流用的是回环接口,与外部的交流用的是网卡。
2.DR 模式高效的原因就是 RS 服务器会直接响应客户端的请求,发送的请求一直往前发送数据包,不会再返回数据包给调度器。
二、DR模式的特性:
- DR模式下调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。
- VIP 地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文。
- 所有的服务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求。
- 所有的请求报文经由 Director Server,但响应报文必须不能经过 Director Server 。
- 不支持地址转换,也不支持端口映射。
- RS的网关绝不允许指向DIP。
- 所有的请求报文都是由调度器(DS)进行调度的。
- MAC 地址在第二层,属于数据链路层,还没有到 IP 所在的网络层。
- RIP 和 DIP 必须处于同一网段中,以便使用MAC地址进行通信。
- 后端服务器(Real Server)上必须配置 VIP 地址,以便接收 LVS 调度器(Director)转发过来的数据包,以及作为响应报文的源 IP
- 后端服务器(Real Server)响应给客户端的数据包的源和目的IP为VIP —> CIP
三、实验搭建
我们使用 3 台虚拟机:sever1,sever2,sever3
server1作为LVS调度器,server2和server3作为后端服务器。
1、实验环境
在server2和server3中安装apache,并且写好测试页,以方便查看实验效果:
yum install httpd -y
cd /var/www/html/
vim index.html ##分别写入不同的内容,方便查看效果。实际应用中,应该是相同的内容。
systemctl start httpd
2、配置 ipvsadm
在server1中:
yum install ipvsadm -y
##查看策略
ipvsadm -l #查看策略(解析ip与域名的对应关系,查看速度较慢)
ipvsadm -ln #-n不解析(速度快)
##添加策略
ipvsadm -A -t 172.25.254.20:80 -s rr #添加策略:tcp,通过80端口访问172.25.254.20,以轮询的调度算法(rr)
ipvsadm -a -t 172.25.254.20:80 -r 172.25.254.52:80 -g #添加策略:tcp,通过80端口访问172.25.254.20,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.254.52的80端口
ipvsadm -a -t 172.25.254.20:80 -r 172.25.254.53:80 -g ##添加策略:tcp,通过80端口访问172.25.254.20,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.254.53的80端口
3、添加 VIP
在 server1,server2,server3 中分别添加 VIP 地址:
ip addr add 172.25.254.20/24 dev eth0 #添加VIP地址到eth0上
ip addr show
注意: 此处的掩码可以设置为 /32 ,表示对外不可见。
4、开启路由功能
开启server1、server2、server3的路由功能:
[root@server1 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
[root@server1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1
5、测试
在客户端(真机)中:
curl 172.25.254.20
5、arp协议
(1)含义
- arp协议是“address resolution protocol”(地址解析协议)。其作用是在以太网(局域网)环境中,数据传输所依赖的是mac地址而非ip地址,而将已知ip地址转换为mac地址的工作是由apr协议来完成的。
- 在局域网中,网络实现传输的是‘帧’,帧理念是有目标主机的mac地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的mac地址。但这个目标mac地址是如何获得的?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标ip地址转换成目标mac地址的过程。arp协议的基本功能就是通过目标设备的ip地址,查询目标设备的mac地址,以保证通信的顺利进行。
- 任何时候,当主机需要找出这个网络中另一个主机的物理地址时,它就可以发送一个apr请求报文,这个报文包好了发送方的mac地址和ip地址以及接受方的ip地址。因为发送方不知道接收方的物理地址,所以查询分组会在网络层中进行广播。
- 局域网中的每一台主机都会接受并处理arp请求报文,然后进行验证,查看接收方的ip地址是不是自己的地址,只有验证成功的主机才会返回一个arp响应报文,这个响应报文包含接收方的ip地址和物理地址。这个报文利用收到的arp请求报文中的请求房屋里地址以单播的方式直接发送给arp请求报文的请求方。
(2)应用
用上面的方法配置 LVS ,server1、2、3 都有可能被访问到:
- 如果绑定的 MAC 地址是 server1 ,则在 server2 和 3 中轮询。
- 如果绑定的 MAC 地址是 sever2 或 sever3 的,那么在测试端根本不会形成轮询,而是直接去了 MAC 绑定的后端服务器 (显然这样在企业中是不允许的)
为了避免 MAC 绑定后端服务器,需要配置 server2 和 server3 的 arp路由策略(arptables网络的用户控制过滤的守护进程)。
在server2中:
yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y
arptables -A INPUT -d 172.25.254.20 -j DROP #当网内广播需要172.25.254.20这个ip时,它丢弃所有网内的请求
arptables -A OUTPUT -s 172.25.254.20 -j mangle --mangle-ip-s 172.25.254.52 #当它自身需要在网内发包时,伪装为自己原本的ip172.25.254.52
在server3中:
yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y
arptables -A INPUT -d 172.25.254.20 -j DROP #当网内广播需要172.25.254.20这个ip时,它丢弃所有网内的请求
arptables -A OUTPUT -s 172.25.254.20 -j mangle --mangle-ip-s 172.25.254.53 #当它自身需要在网内发包时,伪装为自己原本的ip172.25.254.53