Web服务器群集——企业级调度器LVS(LVS-NAT,LVS-DR负载均衡集群配置)

Posted Pakho`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web服务器群集——企业级调度器LVS(LVS-NAT,LVS-DR负载均衡集群配置)相关的知识,希望对你有一定的参考价值。

一、企业级调度器LVS(Linux Virtual Server)

  • 集群概念
  • LVS模型
  • LVS调度算法
  • LVS实现

1.1 集群和分布式

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
  • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题

1.2 集群功能分类

  • LB:Load Balancing负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点

在这里插入图片描述

  • HA:High Availability高可用集群(增加服务可用性),高可用集群,是以提升服务的始终在线能力为着眼点,不会因为宕机而导致服务不能用

衡量可用性:在线时间/(在线时间+故障处理时间)
99%:一年有三天不在线
99.9%:一年有0.3天不在线
99.99%:一年有0.03天不在线
99.999%:一年有0.003天不在线
Keepalived能够做到这一点

在这里插入图片描述

HA为LB服务

1.3 负载均衡

  • 负载均衡(Load Banlance),当然这只是一个简单的概括,比如,我有10台机器都提供Web服务,那么我如何进行均衡的利用这10台机器呢,让这10台机器保证高性能、高可用、高并发就是负载均衡要考虑和要做的事情
  • 实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,负载均衡的部署方式也可以分为路由和服务直接返回模式

1.3.1 负载均衡的主要方式

本方式仅限于负载均衡集群可用的方式 其余不做描述

一、网络层负载均衡

  • LVS-NAT

在网络层和传输层(IP和端口)通过修改目标地址进行负载均衡
用户访问请求到达负载均衡服务器,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台真实服务器,
然后将用户请求的目标地址修改成真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再将数据返回回去,类似反向服务器负载均衡

在这里插入图片描述

优点:相应请求时速度较反向服务器负载均衡要快
缺点:无法处理更高级的请求

二、数据链路层负载均衡

  • LVS-DR

在数据链路层修改Mac地址进行负载均衡
负载均衡服务器的IP和它所管理的web服务器集群的虚拟IP一致
负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址
通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问

在这里插入图片描述

优点:不需要负载均衡服务器进行IP地址的转换,数据响应时,不需要经过负载均衡服务器
缺点:负载均衡服务器的网卡带宽要求较高

1.3.2 四层负载和七层负载

所谓四层就是基于IP+端口的负载均衡,主要代表有lvs
七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx

在这里插入图片描述

二、LVS概述

  • LVS是Linux Virtual Server,linux虚拟服务器,是一个虚拟的服务器集群系统
  • LVS工作在一台Server上提供Directory(负载均衡器)的功能,本身不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机,)从而实现集群环境中的负载均衡
框架
LB-server负载均衡器
realy-server真实服务器

2.1 LVS工作模式

2.1.1 NAT转发模式

  • NAT Network Address Translation,网络地址转换
    在这里插入图片描述

工作原理

① 客户端将请求发往前端的负载均衡服务器,请求报文源地址是CIP(客户端),后面统称为CIP,目标地址为VIP(负载均衡前端地址,后面统称为VIP)
② 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去
③ 报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS
④ 然后LVS将报文源地址改为本机并发送给客户端
注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

优缺点

优点:节约IP地址,网络隔离更安全
缺点:LVS很可能成为系统性能瓶颈,所有的请求都需要应答

2.1.2 DR直连路由模式

在这里插入图片描述

工作原理

① 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
② 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS
③ RS发现请求报文中的目的MAC是自己,就会将次报文接受下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端

特点

1、集群节点和director必须在一个物理网络内
2、RIP可以使用公网地址或私有地址
3、director仅处理入站请求,director服务器压力较小
4、集群节点网关不指向director,故出站不经过director
5、不支持端口映射
6、大多数操作系统可以作为真实服务器,要支持隔离arp广播

ARP问题

通常,DR模式需要在Real-Server上配置VIP,配置方法为:
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255
1)原因在于,当LVS把客户端的包转发给真实服务器时,因为包的目的IP地址是VIP,那么如果真实服务器收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所有需要将这个IP地址绑到卡上,当发送应答包给客户端时,真是服务器就会把包的源和目的地址调换,直接回复客户端
2)关于ARP广播 上面绑定VIP的掩码为“255.255.255.255”,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止与LVS上VIP冲突,而导致IP冲突
另外在Linux的真是服务器上,需要设置ARP的sysctl选项

2.1.3 TUN-IP隧道模式

在这里插入图片描述工作原理

① 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
② 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS
③ RS 收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己的lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端

2.1.4 FULL-NAT

在这里插入图片描述

Full解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题

2.1.5 模式对比

在这里插入图片描述

三、LVS-NAT部署

在这里插入图片描述

3.1 实验环境

基于原有的网卡添加VMnet0和VMnet2
在这里插入图片描述

这里因为我的真实地址是192.168.1网段所以桥接的是192网段
在这里插入图片描述

使用四台主机CentOS Linux release 7.5.1804 (Core)
Client:VMnet0 192.168.1.29/24
LVS:   VMnet0 192.168.1.31/24
       VMnet2 192.168.200.10
Web1:  VMnet2 192.168.200.20
Web2:  VMnet2 192.168.200.30

3.2 实验步骤

3.2.1 web1配置网站和路由

#httpd刚才已安装
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd
[root@web1 ~]# echo web1 > /var/www/html/index.html               #输入网页内容用于测试
[root@web1 ~]# route add -net 192.168.1.0/24 gw 192.168.200.10    #为客户端添加一条静态路由

3.2.2 web2配置网站和路由

#httpd刚才已安装
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd
[root@web2 ~]# echo web2 > /var/www/html/index.html 
[root@web2 ~]# route add -net 192.168.1.0/24 gw 192.168.200.10

3.2.3 LVS-NAT配置路由功能和负载策略

[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward             #启动路由转发功能参数
[root@lvs ~]# yum -y install ipvsadm                             #安装LVS
[root@lvs ~]# ipvsadm -A -t 192.168.1.31:80 -s rr                #-A:对外提供的地址 -t:tcp -s:策略 rr:轮巡
[root@lvs ~]# ipvsadm -a -t 192.168.1.31:80 -r 192.168.200.20:80 -m #-a:对内真实服务器 -r:真实 -m:地址伪装
[root@lvs ~]# ipvsadm -a -t 192.168.1.31:80 -r 192.168.200.30:80 -m

3.3 客户端测试

[root@client ~]# elinks --dump http://192.168.1.31

实现负载均衡,实验完成
在这里插入图片描述

总结一下:本实验主要是解决环境问题,安装完Apache需要关机切换网卡,但是我之前直接点强制关机导致Apache无法启动,后来使用了shutdown -h now 才能够正常启动,不排除是BUG,最后是对于路由下一跳的理解问题,可能长期没有配置过路由的关系,致使理解错误,实验失败,后来经过调整,实验成功!

四、LVS-DR部署

  • Direct routing,直连路由

4.1 实验环境

DR模型要求每一台服务器需要配置一个公网IP地址

虚拟IP的设计,遵循本网段未使用的IP即可

#处于同一网段
Client:192.168.100.9/24
LVS-DR:192.168.100.10/24  虚拟IP地址:192.168.100.123
Web1: 192.168.100.11/24   虚拟IP地址:192.168.100.123
Web2:192.168.100.12/24   虚拟IP地址:192.168.100.123

4.2 实验步骤

4.2.1 LVS服务器

#如没有ifconfig命令需安装
[root@lvs-dr ~]# yum -y install net-tools

4.2.2 LVS准备VIP和路由

[root@lvs-dr ~]# ifconfig ens32:0 192.168.100.123 broadcast 192.168.100.255 netmask 255.255.255.0 up 
#启动子接口  广播地址为192.168.100.255 子网掩码为255.255.255.0 up:启动

在这里插入图片描述

[root@lvs-dr ~]# route add -host 192.168.100.123 dev ens32:0 #添加主机路由,不允许使用真实设备,需使用dev设备ens32接口通信

4.2.3 设置路由转发

[root@lvs-dr ~]# vim /etc/sysctl.conf 
...
net.ipv4.ip_forward = 1                     #开启路由转发功能
net.ipv4.conf.all.send_redirects = 0        #禁止转发重定向报文
net.ipv4.conf.ens32.send_redirects = 0      #禁止ens32转发重定向报文
net.ipv4.conf.default.send_redirects = 0    #禁止转发默认重定向报文

4.2.4 LVS设置负载均衡条目/规则

ipvsadm -C 清除所有LVS规则

[root@lvs-dr ~]# yum -y install ipvsadm
[root@lvs-dr ~]# ipvsadm -A -t 192.168.100.123:80 -s rr #添加VIP规则
[root@lvs-dr ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.100.11:80 -g #-g:dr模式 直连路由网关模式
[root@lvs-dr ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.100.12:80 -g
参数说明
-A添加Virtual Server
-t指定使用tcp协议
-s指定调度策略/负载算法为rr
-a添加真实服务器
-r指定真实服务器是谁
-gLVS类型DR

4.2.5 LVS让配置永久生效

[root@lvs-dr ~]# ipvsadm-save > /etc/sysconfig/ipvsadm  #-save:保存
[root@lvs-dr ~]# systemctl enable ipvsadm               #开机自启

4.2.6 Web集群

一、两个Web服务器部署Web服务

DR并不会像NAT灵活,有时候因为缓存的问题只显示一台机器

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo web > /var/www/html/index.html      #修改主页内容
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd

[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo web > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd

4.2.7 两个Web服务器的lo网卡设置子网掩码为32位VIP

[root@web1 ~]# ifconfig lo:0 192.168.100.123/32
[root@web2 ~]# ifconfig lo:0 192.168.100.123/32

4.2.8 为两个Web服务器设置内核参数

[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore     #忽略arp响应,不允许接受
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce   #可以回答,为了让vip包发出去,只允许发
关于arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式
0 -(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的ARP请求,而只对设置的唯一和连接地址做出回应
4-7 -保留未使用
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

4.2.9 客户端测试

[root@client ~]# elinks --dump http://192.168.100.123

在这里插入图片描述

五、轮询算法

轮询算法说明
Fixed Scheduling Method:静态调服算法
RR 轮询Round-Robin:调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数的系统负载
WRR 加权轮询调度器通过“加权轮叫”调度算法,根据真实服务器的不同处理能力,来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量,调度器可以自动问询真实服务器的负载情况,并动态地调整其权值
DH 目标地址hash“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
SH 目标地址hash“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
Dynamic Scheduling Method:动态调服算法
LC 最少连接调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的连接数最少的服务器上,如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地负载均衡
WLC 加权最少连接在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载,调度器可以自动问询真实服务器的负载情况,并动态地调整其权值

总结:关于命令

ipvsadm

命令说明
-A添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务
-E编辑一个虚拟服务,修改算法
-D删除一个虚拟服务
-C清空虚拟服务列表
-a添加一台真实服务器
-e编辑一台真实服务器
-d减少一台真实服务器
-t使用TCP服务,该参数后需加主机与端口信息
-u使用UDP服务,该参数后需加主机与端口信息
-g直连路由模式
-w指定真实服务器权重

查看统计

[root@lvs-dr ~]# ipvsadm -Lnc        #查看当前ipvs模块中记录的连接(可用于观察转发情况)

可以看到用户请求之后是通过11和12服务器进行处理的 证明192.168.100.10lvs-dr服务器正在进行负载均衡
在这里插入图片描述

[root@lvs-dr ~]# ipvsadm -Ln         #查看当前配置的虚拟服务和各个真实服务器的权重

在这里插入图片描述

[root@lvs-dr ~]# ipvsadm -Ln --stats --rate  #查看ipvs模块的转发情况统计

今天是我的生日,此文作为自己的笔记希望对大家有所帮助,也望自己前程似锦,加油!

Pakho 2021年6月11日 3:13

以上是关于Web服务器群集——企业级调度器LVS(LVS-NAT,LVS-DR负载均衡集群配置)的主要内容,如果未能解决你的问题,请参考以下文章

Haproxy搭建web群集

Haproxy搭建web群集——(实践!)

Haproxy搭建web群集(实战!!!)

详述Haproxy搭建web群集

DR+keepalived实现web群集的负载均衡和高可用性

使用Haproxy搭建Web群集的方法