Linux企业级负载均衡集群LVS DR模式

LVS的直接路由模式(DR模式)

1、DR模式的原理

在一主机上面搭建lvs服务器,设置lvs的工作模式是DR模式, lvs仅仅是一个调度器 ,调度器会把客户端的请求转发给后端服务器,DR模式 直接由后端服务器把数据返回给客户端,不需要逆向发送数据包,lvs专注只做调度就可,效率很高 ,此时 lvs调度器叫做DS调度器(director server) ,RS是真正的后端web服务器(real server)。

  • Client发送请求 --> DS(调度器) -->prerouting --> INPUT -->postrouting -->RS(真正的服务器)–>lo回环接口 --> 网卡eth0 -->Client(详细解释
  • 数据在系统内的交流用的是回环接口,与外部的交流用的是网卡eth0
  • DR模式高效的原因:RS服务器会直接响应客户端的请求,发送的请求一直往前发送数据包,不会再逆向返回数据包给调度器。

2、DR模式中的名词解释

  • 源MAC地址: DS调度器的MAC地址
  • 目的MAC地址: RS真正服务器的MAC地址

3、DR模式的特点

  • DR模式中 所有请求报文都是由调度器(DS)进行调度 的,DS只处理入站请求,响应请求由RS完成。
  • RS的RIP和DS的DIP必须处于同一网段中,以便使用MAC地址进行通信。
  • RS上必须配置VIP(VIP:设置的统一入口,对外公布的ip,客户请求进来的ip)地址,以便接收DS转发过来的数据包,以及作为CIP(响应报文的源IP:客户端的IP)
  • DR模式不支持端口映射
  • DR模式改变的是MAC地址, MAC地址在第二层(数据链路层)还没有到IP所在的网络层,可能会有人恶意连接,一直发送数据包给一台后端服务器,不轮询,导致后端服务器瘫痪,但可以解决。

4、DR模式下的LVS调度器(轮询算法)

实验环境

主机信息 主机的功能(服务)
真机172.25.7.250 客户端client
server1(172.25.7.1) lvs调度器(DS)
server2(172.25.7.2) 后端的web服务器1(RS)
server3(172.25.7.3) 后端的web服务器2(RS)

1、server1 :lvs调度器
安装编写策略的工具ipvsadm服务 yum install ipvsadm -y

  • 注意:如果是6.5版本的yum源,需要搭建负载均衡的yum源才可以安装此服务

在这里插入图片描述

在这里插入图片描述

2、ipvsadm -Ln 列出策略(查看调度策略)
3、添加策略:

  • 注意: -s表示调度算法,rr表示轮询,-g表示lvs调度器工作在DR模式
  • ipvsadm --help看到,共10种调度算法(详解)
ipvsadm -A -t 172.25.7.100:80 -s rr 
		#设置客户端进入lvs调度器的入口地址,调度算法是轮询
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.2:80 -g 
		# 设置lvs的策略:入口的第一台后端服务器的信息
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.3:80 -g
		# 设置lvs的策略:入口的第二台后端服务器的信息    

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、ipvsadm -Ln 列出已添加策略(查看调度策略)
5、给调度器添加VIP: ip addr add 172.25.7.100/24 dev eth0
在这里插入图片描述
6、在两台RS:server2、server3 上 ,配置VIP,且安装httpd服务
安装httpd :yum install httpd -y
配置用户访问的入口地址 : ip addr add 172.25.7.100/32 dev eth0

  • 注意:子网掩码为32是因为这个ip不对外,只有自己用
  • 在两RS上设置用户访问的入口地址的原因:为了RS(后端web服务器)可以直接给客户端发送资源,不需要再返回给调度器,因为客户端访问的是入口地址,如果不使用入口地址给客户发送资源,客户端可能不会接收这个数据包。如果直接在客户端curl 172.25.7.100发现客户端要不到资源。因为DR工作模式是:client->lvs->rs->client, 由后端服务器端直接送回资源给客户端,但是客户端问172.25.7.100要的资源,后端服务器直接把资源给客户端,客户端不会识别 ,因此要在两个后端服务器上面设置入口地址。
    在这里插入图片描述
    在这里插入图片描述

7、在两台RS:server2、server3 上 ,编写共享页面

在这里插入图片描述

server2

  
  
  • 1

在这里插入图片描述

server3

  
  
  • 1

8、在两台RS:server2、server3 上,开启httpd服务

在这里插入图片描述

9、在LVS服务器上,查看调度策略

ipvsadm -l #  做解析,慢
ipvsadm -nl #  不做解析,快

  
  
  • 1
  • 2

在这里插入图片描述
10、 在真机上测试:curl 172.25.7.100 在真机上测试,发现客户端发出请求,通过调度器访问web资源的时候,会一直向同一个web服务器(server3)要资源,并 没有实现轮询

arp -an | grep 172.25.7.100 , 可以看到默认缓存的是server3的mac地址在这里插入图片描述

在这里插入图片描述
11、arp -d 172.25.7.100 清除缓存 再次测试,没有实现轮询

在这里插入图片描述
在这里插入图片描述

  • 注意:此时客户端访问资源有时候轮询,有时候不轮询,出现这样的现象是为什么呢?

因为DR模式是通过 修改MAC地址 进行访问的,调度器和两台web服务器上都有172.25.7.100这个入口地址VIP,所以客户端在请求的时候,三台虚拟机都有可能回复请求,客户端会记录回复他的那台虚拟机的mac地址,所以下次在访问的时候他会找记录过的mac地址对应的虚拟机(有可能是真实的服务器)直接访问,这在现实中是 不允许 的,因为 如果请求全部发往后端某一台真正的服务器的话,这台服务器会因为压力过大而宕机。而且,直接访问后端的真正的服务器,我们的server1(LVS调度器)也就没有起到作用,并没有实现真正意义上的负载均衡,这也是DR模式的一个缺点。这就类似于DDOS攻击,有可能会导致后端服务器瘫痪,造成用户不能正常访问资源。

现在解决DR模式不轮询的问题:

  • 因为客户端第一次访问172.25.7.100的时候server1,server2,server3均可以接收客户端的请求,这个是随机的,有可能不会经过lvs调度器,客户端直接问web服务器要资源。 在两个web后端上进行设置,防止ddos攻击。

方法一:添加arptable策略解决

12、在 server2 上,安装针对MAC地址的防火墙管理工具 yum install -y arptables

  • arptables:用户空间工具,用来 管理 linux内核中的ARP规则表. 这些规则用来检查ARP帧.arptables类似于iptables,但没有那么复杂.iptables工作于ip层,用于对ip包进行管理.arptables工作与arp协议层,用于对arp数据帧进行管理.arptables可以像iptables那样对arp数据帧进行各种规则设置,可以ACCEPT,DROP等
  • arptables -nL 可查看设置的访问规则
  • man arptable 可查看设置规则

在这里插入图片描述
在这里插入图片描述

13、设置规则:

arptables -A INPUT -d 172.25.7.100 -j DROP		
		##添加策略,让目的地址为172.25.7.100的访问不能到达RS,丢弃客户端的直接访问
		## -d, --destination [!] address[/mask]目的地址
		## -j, --jump target跳到目标
arptables -A OUTPUT -s 172.25.7.100 -j mangle --mangle-ip-s 172.25.7.2	
		##让返回的数据来自server2  172.25.7.2使自己以172.25.7.100的身份发送资源给客户端
cat /etc/sysconfig/arptables                #查看规则
arptables-save > /etc/sysconfig/arptables	#保存策略
cat /etc/sysconfig/arptables                #再次查看
systemctl start arptables.service           #重启服务
systemctl status arptables.service

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

server3(后端服务器)同理

在这里插入图片描述
此时,server2和server3不会接受客户端的请求了,每次客户端的访问只能由LVS调度器接受,即每次客户端只能通过lvs调度器去找web1和web2服务

14、在真机上测试:curl 172.25.7.100 实现了轮询

在这里插入图片描述

在这里插入图片描述

当客户端(172.25.7.250)发送数据包给LVS调度器(172.25.7.100) 的时候(源地址172.25.7.250——>>目的地址172.25.7.100),此时LVS会将源MAC地址变为LVS服务器的MAC地址,将目的MAC地址变为web服务器的MAC地址,然后就实现调度了.直接去找目标MAC地址,然后找web服务器,web服务器直接将数据返回给客户端(IP地址全程不变)

方法二 : 配置内核参数

  • arp_ignorearp_announce 参数都和 ARP协议 相关,主要 用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。
  • arp_ignore参数的作用:控制系统在收到外部的arp请求时,是否要返回arp响应。1:只响应目的IP地址为接收网卡上的本地地址的arp请求
  • arp_announce的作用:控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5、DR模式下的LVS调度器(加权轮询算法)

在轮询算法LVS调度器的基础上,更改调度策略:

1、ipvsadm -C 清空策略
2、 添加策略:

ipvsadm -A -t 172.25.7.100:80 -s wrr 
		#设置客户端进入lvs调度器的入口地址,调度算法是加权轮询
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.2:80 -g -w 1
		# 设置lvs的策略:入口的第一台后端服务器的信息,加权为1
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.3:80 -g -w 2
		# 设置lvs的策略:入口的第二台后端服务器的信息,加权为2      

在这里插入图片描述

3、arp -d 172.25.7.100 清除缓存 再次测试,实现了加权轮询
在这里插入图片描述

在这里插入图片描述

发布了107 篇原创文章 · 获赞 0 · 访问量 1442

猜你喜欢

转载自blog.csdn.net/weixin_45029822/article/details/104452373