企业级负载均衡集群——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
整个过程的数据流向如下
用户(client)发送请求给调度器(DS),DS调度器先把请求发往prerouting链(内核空间kernal space),确定请求的是不是VIP
到了INPUT链之后,如果请求的是集群服务,会在这里修改MAC地址,把源MAC地址改为DS的MAC地址
把目的MAC地址改为RS的MAC地址,此时IP仍然不变,处理完成后把请求发往postrouting链
检测请求的是否为RS(会检测请求的MAC地址),如果是,接受请求,把请求通过回环接口发给出口的网卡,再发回给客户端
数据在系统内的交流用的是回环接口,与外部的交流用的是网卡eth0
DR模式高效的原因就是RS服务器会直接响应客户端的请求,发送的请求一直往前发送数据包,不会再返回数据包给调度器
原理如图:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明

2.DR模式中的名词解释

DS 调度器,lvs的前端设备
RS 真正提供服务的后端服务器
RIP 后端服务器的ip地址
DIP 调度器和后端服务器通信的ip
CIP 源IP(客户端的IP)
VIP 目的IP(设置的统一入口),对外公布的ip,客户请求进来的ip
源MAC地址 DS调度器的MAC地址
目的MAC地址 RS真正服务器的MAC地址

3.DR模式的特点

所有的请求报文都是由调度器(DS)进行调度的
DR模式不支持端口映射
RS和DS必须在同一网络,可以不在同一网段,使用交换机即可
MAC地址在第二层,数据链路层,还没有到IP所在的网络层
realserver的RIP和Director的DIP必须处于同一网段中,以便使用MAC地址进行通信
realserver上必须配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP
realserver响应给客户端的数据包的源和目的IP为VIP—>CIP
director只处理入站请求,响应请求由realserver完成
七层调度(负载均衡),4层分摊流量
LVS(Linux Virtual Server)Linux虚拟服务器
附着在netfilter上,有5个内置的钩子函数处理内置的请求,工作在4层模型上,会强行改变数据的流向
它不接受请求,只是一个调度器,把请求发给后端真正的服务器(RS)
LVS包括两个东西:
(1)IPVS:工作在INPUT链,依附于5个内置钩子函数,其实就是一段代码,已经集成在LInux的源码中
(2)IPVSADM:具体编写策略的工具
DR模式改变的是MAC地址
DR模式可能会有人恶意连接,一直发送数据包给一台后端服务器,不轮询,导致后端服务器瘫痪,可以解决

4.实现基本DR模式的搭建

客户端:真机 172.25.61.250
lvs调度器:server1 172.25.61.1
后端服务器:
server2 172.25.61.2
server3 172.25.61.3
此次实验使用最基本的轮询算法
在server1上的操作:
yum install ipvsadm -y
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
ipvsadm -Ln #列出策略(查看调度策略)
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
查看ipvsadm服务的基本信息
systemctl status ipvsadm.service可以看出这个服务的启动脚本
vim /usr/lib/systemd/system/ipvsadm.service查看开启这个服务的时候都干了一些什么
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
systemctl start ipvsadm
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
查看错误原因:
cat /var/log/messages
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
touch /etc/sysconfig/ipvsadm 建立编写策略的文件
systemctl start ipvsadm.service开启服务,正确
systemctl status ipvsadm.service再次查看服务的状态
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
配置服务
vim /etc/sysconfig/ipvsadm-config
修改lvs服务的配置文件:no->yes,重启服务的时候保存策略
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
设置DR模式的访问策略
ipvsadm -A -t 172.25.61.100:80 -s rr #rr为轮询调度策略
ipvsadm -a -t 172.25.61.100:80 -r 172.25.61.2:80 -g #-g为工作在DR模式
ipvsadm -a -t 172.25.61.100:80 -r 172.25.61.3:80 -g
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
ipvsadm -Ln
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
ip addr add 172.25.61.100/32 dev eth0 #给lvs调度器添加VIP
ip addr show
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
在后端服务器端:
ip addr add 172.25.61.100/32 dev eth0 #给后端服务器添加VIP
ip addr show
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
因为客户端第一次访问172.25.8.100的时候server1,server2,server3均可以接收客户端的请求,这个是随机的
有可能不会经过lvs调度器,客户端直接问web服务器要资源,这样是将服务器直接暴露在客户端的访问下,是不安全的,容易受到攻击
所以在两个web后端上进行设置,防止ddos攻击
yum install arptables -y #安装针对MAC地址的防火墙管理工具
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
arptables -nL #查看设置的访问规则
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
arptables -A OUTPUT -s 172.25.61.100 -j mangle --mangle-ip-s 172.25.61.2 ##使自己以172.25.61.100的身份发送资源给客户端
arptables -A INPUT -d 172.25.61.100 -j DROP #丢弃客户端的直接访问
arptables -L #查看规则
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
yum install httpd -y
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
cd /var/www/html/
ls
vim index.html #添加发布页面
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
systemctl start httpd
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
在server3上执行相同的操作即可
在客户端上测试:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
清楚缓存之后,还是一样实现轮询调度:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
总结:
因为lvs、web1、web2均有172.25.61.100这个ip地址
当客户端第一次找lvs调度器这个入口地址的时候
他可能直接找到web1或者web2,因此就不能实现调度了
现在在web1和web2上面进行设置拒绝客户端请求172.25.61.100这个ip
因此只有lvs调度器入口地址才会接受客户端的请求
因此客户端访问就是一直是使用调度器的MAC地址
每次客户端只能通过lvs调度器去找web1和web2服务
这样就实现了调度,轮询工作
当客户端发送数据包给172.25.61.100(lvs)的时候(源地址172.25.61.250–》目的地址172.25.61.100)
此时lvs会将源mac地址变为lvs服务器的mac地址,将目的mac地址变为web服务器的mac地址,然后就实现调度了
直接去找目标mac地址,然后找web服务器,web服务器直接将数据返回给客户端(IP地址全程不变)
DR模式的特点:
不支持端口影射
RS和DS必须在同一网络(不是同一网段)
DR工作在数据链路层使用的是MAC地址,还没有牵扯到IP地址
IP地址始终不变,变的是MAC地址
lo是回环接口(和自己进行交流的时候用,使用起来快),系统里服务和服务之间使用的回环接口,效率高,快
etho是网卡(和外界进行交流的时候用)

5.DR模式下的健康检测(Idirectord)

为什么要进行健康检测?
之前lvs的DR模式和TUN模式我们都是假设后端服务器是可以正常工作的
对于一台后端服务器来说,它不可能永远是可以使用的,有自己的寿命或者会出现其它问题
当lvs集群中的一台后备服务器挂了之后,为了不影响客户的正常访问,应该将它从集群当中踢出去,让客户不再轮询访问
调度器只把客户端的请求转发给状态好的那台web服务器,否则客户端是一会可以访问,一会不能访问
其实实际的企业当中,一个集群的web服务器上面的资源一模一样,访问哪个客户根本感觉不到
我给大家演示的时候写的共享内容不一样是为了实验效果看的更明显而已
如果lvs集群当中所有的后备服务器都挂了,为了不影响客户的正常访问,在调度器上面也安装一个httpd服务,当客户端访问调度器的时候,调度器直接通过自己的httpd服务告诉服务器坏了
以上这两种情况我们都要考虑到,因此要给客户端一个正常的回应。
健康监测的实现:
在没有健康监测之前,当一个后端服务器挂了时,客户端的显示:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
影响客户的使用,所以要进行健康监测
在lvs调度器端:
ipvsadm -C #清除上一个实验的结果
vim /etc/yum.repos.d/yum.repo
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
yum clean all
yum repolist
yum install ldirectord-3.9.5-3.1.x86_64.rpm
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d
vim ldirectord.cf 编辑设置信息
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
systemctl start ldirectord
ipvsadm -Ln
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
yum install httpd -y
cd /var/www/html
vim index.html
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
systemctl start httpd
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
客户端测试:
正常情况:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
当server2坏掉时:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
当server2恢复时:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
当server3坏掉时:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
当server3恢复时:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
当server2和server3同时坏掉时:
企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明