企业级负载均衡LVS——DR模式下的(加权)轮询调度器、DR模式下的健康检测(ldirectord)

上一篇《企业系统架构——LB集群之LVS负载均衡介绍(3种工作模式)》讲解了DR模式的工作原理及其特点。此篇主要讲解DR模式的(加权)轮询调度器搭建及DR模式下的健康检测(ldirectord)。

一、DR模式的(加权)轮询调度器搭建

1、搭建实验环境==
真机:做客户端client
虚拟机server1(172.25.76.1):做lvs调度器(DS)
虚拟机server2(172.25.76.2) :做后端的web服务器1(RS)
虚拟机server3(172.25.76.3):做后端的web服务器2(RS)
2、实验
在server1上搭建lvs调度器的DR模式:

步骤一:安装ipvsadm服务
ipvsadm工具介绍:
  从2.4版本开始,linux内核默认支持LVS。要使用LVS的能力,只需安装一个LVS的管理工具:ipvsadm。
LVS的结构主要分为两部分:

  • 工作在内核空间的IPVS模块。LVS的能力实际上都是由IVPS模块实现。
  • 工作在用户空间的ipvsadm管理工具。其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块。
yum install ipvsadm.x86_64 -y

在这里插入图片描述

步骤二:查看调度策略

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

在这里插入图片描述


systemctl status ipvsadm.service #可以看到这个服务的启动脚本
vim /usr/lib/systemd/system/ipvsadm.service #查看开启这个服务的时候都干了一些什么

在这里插入图片描述
步骤四:开启服务

systemctl start ipvsadm.service #开启服务,错误
touch /etc/sysconfig/ipvsadm  #建立编写策略的文件
systemctl start ipvsadm.service #开启服务,正确
systemctl status ipvsadm.service #再次查看服务的状态

在这里插入图片描述
日志内容:
在这里插入图片描述
解决:
在这里插入图片描述步骤六:修改配置文件

vim /etc/sysconfig/ipvsadm-config
修改lvs服务的配置文件:no->yes,重启服务的时候保存策略

在这里插入图片描述步骤七:设置DR模式的访问策略

ipvsadm -A -t 172.25.12.100:80 -s rr  #设置客户端进入lvs调度器的入口地址,调度算法是轮询
ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.2:80 -g #设置lvs的策略:入口的第一台后端服务器的信息
ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g #设置lvs的策略:入口的第二台后端服务器的信息
-s表示调度算法,rr表示轮询,-g表示lvs调度器工作在DR模式

在这里插入图片描述查看策略文件:
在这里插入图片描述
步骤八:在lvs(server1)上面设置用户访问的入口地址vip

ip addr add 172.25.76.100/24 dev eth0

在这里插入图片描述
配置web后端服务器(server2):
步骤一:下载httpd服务

yum install httpd -y

在这里插入图片描述步骤二:编辑默认发布页面文件
在这里插入图片描述
步骤三:在后端服务器1(server2)上面设置用户访问的入口地址

ip addr add 172.25.76.100/24 dev eth0  #临时添加ip,可在配置文件/etc/sysconfig/network-scripts/中永久添加

在这里插入图片描述配置web后端服务器(server3):
步骤一:下载httpd服务

yum install httpd -y

在这里插入图片描述步骤二:编辑默认发布页面文件
在这里插入图片描述
步骤三:在后端服务器1(server2)上面设置用户访问的入口地址
在这里插入图片描述注意:在两个web服务器上设置用户访问的入口地址是为了web服务器可以直接给客户端发送资源,不需要再返回给调度器。
客户端问172.25.8.100要的资源,后端服务器直接把资源给客户端,客户端不会识别
因此要在两个后端服务器上面设置入口地址

客户端测试(真机):
在这里插入图片描述查看server3的mac地址:
在这里插入图片描述再次测试:
在这里插入图片描述
在这里插入图片描述
注意:此时客户端访问资源有时候轮询,有时候不轮询,出现这样的现象是为什么呢?

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

3、解决DR模式不轮询的问题

将真实服务器的lo接口的ARP响应关闭掉,当客户端进行ARP广播连接vip时,真实服务器将其屏蔽掉。
实现方式1:在iptables防火墙上添加策略
arptables:用户空间工具,用来 管理 linux内核中的ARP规则表。
这些规则用来检查ARP帧,arptables类似于iptables,但没有那么复杂。
iptables工作于ip层,用于对ip包进行管理。arptables工作与arp协议层,用于对arp数据帧进行管理。
arptables可以像iptables那样对arp数据帧进行各种规则设置,可以ACCEPT,DROP等
在真实服务器(server2)上:
步骤一:下载arptables服务

yum install arptables -y

在这里插入图片描述
步骤二:查看设置的访问规则

arptables -nL

在这里插入图片描述
步骤三:设置规则

arptables -A INPUT -d 172.25.76.100 -j DROP  #丢弃客户端的直接访问
arptables -A OUTPUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.2  #使自己以172.25.76.100的身份发送资源给客户端
cat /etc/sysconfig/arptables   #查看规则
arptables-save > /etc/sysconfig/arptables  #保存策略
cat /etc/sysconfig/arptables  #再次查看

在这里插入图片描述
步骤四:打开服务

systemctl start arptables.service  #开启服务
systemctl status arptables.service  #查看服务状态

在这里插入图片描述在另一台真实服务器(server3)上:
步骤一:下载arptables服务

yum install arptables -y

在这里插入图片描述
步骤二:查看设置的访问规则

arptables -nL

在这里插入图片描述
步骤三:设置规则

arptables -A INPUT -d 172.25.76.100 -j DROP  #丢弃客户端的直接访问
arptables -A OUTPUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.3  #使自己以172.25.76.100的身份发送资源给客户端
cat /etc/sysconfig/arptables   #查看规则
arptables-save > /etc/sysconfig/arptables  #保存策略
cat /etc/sysconfig/arptables  #再次查看

在这里插入图片描述
步骤四:打开服务

systemctl start arptables.service  #开启服务
systemctl status arptables.service  #查看服务状态

在这里插入图片描述客户端(真机)测试:
此时做完这个:就可以实现调度了
web2和web3就不会接受客户端的请求了,每次客户端的访问只能由调度器接受。
只有调度器才会接收这个请求,因此也就是通过访问lvs调度器的MAC地址,调度器改写请求报文的目标MAC地址,因此可以实现访问调度器,调度器转向RS上,将内容直接返回客户。
通过调度器访问时,因为调度器里面设置了调度规则,因此可以实现正常访问。

arp -d 172.25.76.100  #清除缓存
curl 172.25.76.100   #测试

在这里插入图片描述查看调度器server1的eth0网卡ip地址:
在这里插入图片描述
4、DR模式下的LVS调度器(加权轮询算法)

调度器(server1):
在轮询算法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

在这里插入图片描述客户端(真机):

arp -d  172.25.76.100
curl 172.25.76.100

在这里插入图片描述
调度器上查看调度轮询次数:
在这里插入图片描述

二、DR模式下的健康检测(Idirectord)

1、ldirectord介绍
ldirectord对lvs策略的动态维护:ldirectord是监视集群节点(真实服务器),并从集群中自动移除节点,我们需要使用ldirectord程序,这个程序在启动时自动建立IPVS表(不用手动建立了),然后监视集群节点的健康情况,在发现失效节点时将其自动从IPVS表中移除。

2、 ldirectord是如何监视集群节点(真实服务器)的?
ldirectord守护进程通过向每台真实服务器真实IP(RIP)上的集群资源发送访问请求来实现对真实服务器的监控,这对所有类型的LVS集群都是成立的:LVS-DR,LVS-NAT和LVS-TUN。正常情况下,为每个Director上的VIP地址运行一个ldirectord守护进程,当真实服务器不响应运行在Director上的ldirectord守护进程时,ldirectord守护进程运行适当的ipvsadm命令将VIP地址从IPVS表中移除。(以后,当真实服务器回到在线状态时,ldirectord使用适当的ipvsadm命令将真实服务器重新添加到IPVS表中),
为了监视web集群内的真实服务器,ldirectord守护进程使用HTTP协议向每个真实服务器请求一个专用的web页面,如果真实服务器是健康的,Director知道将从真实服务器接收到什么内容,如果从真实服务器返回应答字串或web页面的时间太长,或根本没有返回任何内容,或返回的内容不是预期的,Director就知道该真实服务器出错了,并从IPVS表中将这个真实服务器移除。

背景: 之前DR模式下的LVS,我们都是假设后端服务器是可以正常工作。但对于一台后端服务器来说,它不可能永远是可以使用的,有自己的寿命或者会出现其它问题。当lvs集群中的一台后备服务器挂了之后,为了不影响客户的正常访问,应该将它从集群当中踢出去,让客户不再轮询访问。

模拟问题 :关闭server3的httpd服务,一个web挂了,会影响客户的访问。
在这里插入图片描述
客户端访问:
在这里插入图片描述3、使用 ldirectord监视集群节点

LVS调度器 (server1)上
步骤一:配置高可用的yum源
先查看真机共享的镜像中高可用安装包位置:
在这里插入图片描述配置yum仓库:
在这里插入图片描述
在这里插入图片描述
步骤二:安装ldirectord插件

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y

在这里插入图片描述
步骤三:查看配置文件

rpm -qc ldirectord-3.9.5-3.1.x86_64 #查看已安装软件的配置文件
rpm -ql ldirectord-3.9.5-3.1.x86_64 #查询已安装软件包都安装到何处

在这里插入图片描述步骤四:更改配置文件路径

cp  /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/

在这里插入图片描述步骤五:编辑配置文件

vim /etc/ha.d/ldirectord.cf

在这里插入图片描述步骤六:开启ldirectord服务

systemctl start ldirectord
systemctl status ldirectord

在这里插入图片描述客户端(真机)测试:
在这里插入图片描述RS后端服务器(server2):
关闭httpd服务,模拟宕机。
在这里插入图片描述客户端(真机)测试:
此时只有server3服务器在工作
在这里插入图片描述调度器(server1):
查看到宕机后的server2已经从IPVS表中移除
在这里插入图片描述RS后端服务器(server2):
开启httd服务,使其上线
在这里插入图片描述客户端(真机)测试:
此时又恢复两台服务器轮询工作
在这里插入图片描述调度器(server1):
查看到上线的server2已经从进入IPVS表,进行轮询调度
在这里插入图片描述4、如果两个后端服务器都挂掉时,调度器会暂时充当服务器,给客户提供资源

在LVS调度器(server1)上:
步骤一:下载httpd服务,并编写配置文件
在这里插入图片描述在这里插入图片描述步骤二:关闭两个后端服务器
在这里插入图片描述在这里插入图片描述
客户端(真机)测试:
在这里插入图片描述LVS调度器查看IPVS列表:
调度器上线,暂时充当服务器,给客户提供资源
在这里插入图片描述

发布了170 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CapejasmineY/article/details/102594489