一、LVS概念
LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。
二、LVS优势
高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。
高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。
三、LVS整体架构
LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端。
四、LVS相关术语
VS:Virtual Server。虚拟服务
DS:Director Server。指的是前端负载均衡器节点
RS:Real Server。后端真实的工作服务器
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:Director Server IP,主要用于和内部主机通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址
CIP:Client IP,访问客户端的IP地址
五、LVS工作模式
LVS工作模式分为以下四种模式,不过Full--NAT模式没有被编译进内核,工作中常用的模式是DR模式,也算默认的工作模式。
1. NAT模式(Network Address Translation)
路由转发模式。在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。
2. DR模式(Direct Routing)
直接路由模式。在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。
3. TUN模式(IP Tunneling)
隧道模式。该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。
4. FULLNAT模式
通过同时修改请求报文的源IP地址和目标IP地址进行转发。阿里自己研发的FULL-NAT模式,非内部员工是使用不到的。
七、LVS调度算法
6.1调度算法分类
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
6.2静态调度算法
1. 轮询调度 rr(Roundrobin)(常用)
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
2. 加权轮询调度 wrr(Weightted RR)(常用)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
3. 源地址散列调度算法 sh (Source Hashing)
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
4. 目标地址散列调度算法 dh (Destination Hashing)
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
6.3 动态调度算法
1. 最少链接 lc(Least Connection)(常用)
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
overhead=活动连接数*256+非活动连接数
2. 权重最少链接 wlc(111Weighted LC)(常用)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
overhead=(活动连接数*256+非活动连接数)/权重值
3. 最短期望延迟 sed(Shortest Expection Delay)
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
overhead=(活动连接数+1)*256/权重值
4. 最少队列 nq(Nerver Queue)
无需队列,如果有realserver的连接数为0就直接分配过去
5. 基于局部性的最少连接调度算法 lblc(Locality-Based LC)
根据请求的目标IP找出该目标IP最近使用的服务器,若该服务器可用且没超载,就将请求发给它;若服务器不存在或者超载,且有服务器处于一半的工作负载,则用最少连接原则将请求发给一个可用服务器。是针对目标IP地址的负载均衡算法,可以看作动态的dh算法。可根据负载情况实现正向代理、web缓存等。
6. 带复制的基于局部的最少连接算法 lblcr(LBLC with Replication)
该算法维护从一个目标IP地址到一组服务器的映射(lblc维护的是一个目标IP地址到一台服务器的映射)。根据请求的目标IP找出该目标IP对应的服务器组,按最少连接原则从组内选出一台没有超载的服务器,将请求发给它;若该服务器超载,则最少连接原则从该集群中选出一台服务器加入到服务器组中,将请求发给该服务器。如果服务器组在一段时间没有修改,将最忙的服务器从组内剔除,以降低复制程度。这个算法也是针对目标IP地址的负载均衡算法,解决lblc负载不均衡的问题,从负载重的RS复制到负载轻的RS。可根据负载情况实现正向代理、web缓存等。
7. fo算法(Weighted Fail Over)
该算法会遍历lvs关联的RS链表,找到未过载(未设置IP_VS_DEST_F_OVERLOAD标识)且权重最高的RS进行调度。
8. ovf算法(Overflow-connection)
基于RS的活动连接数和权重值来实现。它会将新连接调度到权重值最高的RS,直到其活动连接数超过它的权重值,之后调度到下一个权重值最高的RS。该算法会遍历lvs关联的RS链表,找到权重值最高的可用RS。可用RS需要满足以下条件:
①未过载(未设置IP_VS_DEST_F_OVERLOAD标识)。
②RS当前活动连接数小于其权重值。
③权重值不为0。
七、工作模式之NAT模式
7.1 NAT原理及优缺点
原理
所谓NAT模式,即网络地址转换模式,分发器有着一个公网IP地址,该公网IP地址对外提供服务,当客户端的请求数据发送到分发器后,由分发器将公网地址转换成私网地址,根据一定的算法,分发给后台的服务器组进行处理。后台的服务器组在处理完成后,将响应数据包发送给分发器,由分发器将私网IP地址转化成公网IP地址后,再反馈给客户端。
在NAT工作模式下,由于分发器要同时处理数据包的处理和响应,因此分发器的性能称为整个架构的瓶颈。如果后台真实服务器数量过多,则分发器的工作量就会越大,并且分发器还要维护NAT表,消耗大量的内存资源,因此这个模式尽管很适合公司网络,但是其后台能够支持的真实服务器数量不多。
优点
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点
扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发 RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈 支持端口映射,可修改请求报文的目标PORT VS必须是Linux系统,RS可以是任意OS系统7.2 NAT实验
配置如下:
7.3 具体步骤
7.3.1 网卡准备:
需要两个网卡,一个为vmnet8,一个为仅主机模式,再修改网卡网段,方便配置
NAT模式
仅主机模式
再点击确认
安装软件包
yum install -y ipvsadm
7.3.2 LVS配置
1、配置网卡
配置eth0网卡,为nat模式(172.25.254.0)
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@lvs ~]# nmcli connection reload[root@lvs ~]# nmcli connection up eth0
配置eth1网卡,为仅主机模式(192.168.0.0)
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs ~]# nmcli connection reload[root@lvs ~]# nmcli connection up eth1
2、打开内核路由功能
(1)查看路由转发
(2)打开内核路由功能
(3)生效
3、下载ipvsadm
[root@lvs ~]# systemctl stop ipvsadm
当ipvsadm停止时,才会执行成功以下命令,因为这是临时命令,重启服务后,就会消失
4、临时命令
(1)添加虚拟服务器
(2)添加后端服务器
(3)查看负载均衡设置
5、永久命令
(1)停止服务
(2) 将刚刚执行过的命令保存到文件中,就可永久执行
7.3.3 webserver1配置
7.3.4 webserver2配置
[root@webserver2 ~]# nmcli connection reload[root@webserver2 ~]# nmcli connection up eth1
7.3.5 测试
八、工作模式之DR模式
8.1 DR模式原理及优缺点
原理
DR模式,即Direct Routing,直接路由模式。在此模式下,分发器有接收客户端请求的公网IP地址,各个真实服务器也要有自己的环回地址,该地址与分发器公网IP地址完全相同,并且该地址还需要能够正常访问公网。这样,当客户端的请求发送到分发器后,分发器只需要将该请求数据包修改MAC地址后,发送给后端真实服务器即可,由于目的MAC地址和IP地址都是自己,因此后端真实服务器会对该数据包进行正常响应。在响应完成后,真实服务器会将该数据包直接从环回地址处发送出去,也不需要经过分发器。
在DR模式下,网络层面需要解决两个问题,一个是解决IP地址冲突的问题,由于在一个局域网中存在多个相同的公网IP地址,因此必须设置后端真实服务器不对ARP请求报文进行响应;另一个是后端真实服务器的转发问题,必须设置真实服务器使用自己的真实网卡转发环回网卡的数据包。
优点
和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点
(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
8.2 DR实验
配置如下,
8.3 具体步骤
8.3.1 webserver1
1、设置RIP
[root@webserver1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver1 ~]# nmcli connection reload[root@webserver1 ~]# nmcli connection up eth0
2、将VIP设置为环回接口
3、后端服务器不响应
注意:
1.当arp_ignore参数配置为0时,eth1网卡上收到目的IP为环回网卡IP的arp请求,但是eth1也会返回arp响应,把自己的mac地址告诉对端。
2.当arp_ignore参数配置为1时,eth1网卡上收到目的IP为环回网卡IP的arp请求,发现请求的IP不是自己网卡上的IP,不会回arp响应。
3.当arp_announce参数配置为0时,系统要发送的IP包源地址为eth1的地址,IP包目的地址根据路由表查询判断需要从eth2网卡发出,这时会先从eth2网卡发起一个arp请求,用于获取目的IP地址的MAC地址。该arp请求的源MAC自然是eth2网卡的MAC地址,但是源IP地址会选择eth1网卡的地址。
4.当arp_announce参数配置为2时,eth2网卡发起arp请求时,源IP地址会选择eth2网卡自身的IP地址。
8.3.2 webserver2
1.设置RIP
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload[root@webserver2 ~]# nmcli connection up eth0
2、将VIP设置为环回接口
3、后端服务器不响应
8.3.3 router
1、设置eth0为外网地址
[root@router ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@router ~]# nmcli connection reload[root@router ~]# nmcli connection up eth0
2、设置eth1为内网地址
[root@router ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
查看路由
3、设置路由转发
[root@router ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
生效
查看
8.3.4 LVS
1、eth0:仅主机
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@lvs ~]# nmcli connection reload[root@lvs ~]# nmcli connection up eth0
2、将VIP设置为环回接口
3、添加ipvs规则
4、添加后端服务器,指定模式为DR
8.3.5 client
[root@client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@client ~]# nmcli connection reload[root@client ~]# nmcli connection up eth0
8.3.6 测试
8.4 防火墙标签解决轮询错误
8.4.1 轮询中可能出现的错误
以http 和 https 为例,当我们在 RS 中同时开放 80 和 443 端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题,当我第一次访问80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。8.4.2 解决步骤
1.下载mode_ssl,使用https2.防火墙标记
在vs调度器中设定端口标签,认为80和443是一个整体
3.添加调度策略
4.测试
九、工作模式之TUN模式
原理
Tunnel模式即隧道模式,所谓Tunnel模式,即分发器只负责接收客户端发送过来的数据包,然后将该数据包封装后按照算法发送给真实服务器,真实服务器在处理完该数据包后,不需要将该数据包发送给分发器,而是直接将该数据包发送给客户端。
在Tunnel模式下,每个真实服务器都会有自己的公网IP地址,该公网IP地址一方面用于接收从分发器发送的客户端请求,一方面给客户端发送其响应报文。也正因为每个真实都有自己的公网IP地址,因此真实服务器不用拘泥于网络架构,可以分散存储,起到容灾备份的作用。
优点
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点
隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
十、ipvsadm命令
-D | 删除 |
-C | 清空 |
-R | 重载 |
-S | 保存 |
-A | 添加 |
-E | 修改 |
-t | tcp服务 |
-u | udp服务 |
-s | 指定调度算法 |
-p | 设置持久连接超时 |
-f | firewall mask 火墙标记,是一个数字 |
-a | 添加realserver |
-e | 更改 realserver |
-t | tcp 协议 |
-u | udp 协议 |
-f | 火墙 标签 |
-r | realserver 地址 |
-g | 直连路由模式 |
-i | ipip 隧道模式 |
-m | nat 模式 |
-w | 设定权重 |
-Z | 清空计数器 |
-C | 清空 lvs 策略 |
-L | 查看lvs策略 |
-n | 不做解析 |
--rate | 输出速率信息 |