LVS(Linux virtual server)文稿

在当今的互联网世界中,随着网站流量的增长和用户对服务稳定性的需求不断提高,单一服务器往往难以应对大规模的访问量。这就会涉及到一个概念——高并发

在这里插入图片描述
如图所示,同一时间内,大批量的用户对所提供服务的服务器发出请求,这通常情况下会造成单一服务器的宕机或者故障。就好比你的母亲和你的父亲同时呼喊你叫你出门做事,你就会出现左右为难。这时就需要改进服务器的架构使其能够面对高并发需求。

高并发是什么?

高并发(High Concurrency)是指系统在短时间内能够处理大量并发请求的能力。在互联网和信息技术领域中,随着用户数量的增长以及对服务响应速度的要求提高,系统需要能够同时处理成千上万甚至更多的用户请求,这就要求系统具备高并发处理能力。

高并发的特点:

  1. 大量用户同时访问:例如,在双十一购物节期间,电商平台可能会在同一时刻面临数以亿计的用户访问。
  2. 短时间内完成处理:系统需要在极短的时间内完成这些请求的处理,保证用户体验。
  3. 资源高效利用:在处理大量请求的同时,还需要合理分配和使用服务器资源,避免资源浪费或过度消耗导致系统崩溃。

实现高并发的技术手段:

  1. 负载均衡:通过负载均衡器将请求分发到不同的服务器节点上,确保单个服务器不会过载。
  2. 缓存机制:使用缓存来减少数据库的压力,加快数据读取速度。
  3. 异步处理:采用异步编程模型,比如事件驱动、消息队列等技术,使得处理过程可以并行执行。
  4. 数据库优化:对数据库进行索引优化、读写分离、分库分表等操作,提高数据库处理能力。
  5. 无状态服务:设计无状态的服务端逻辑,使得任何服务器实例都可以处理任意用户的请求。
  6. 资源池化:如连接池、线程池等,可以有效管理和复用资源,减少创建和销毁资源的开销。
  7. 分布式系统:构建分布式系统,通过多个节点共同承担负载。

高并发场景示例:

  • 电商网站在大型促销活动时的秒杀功能。
  • 社交媒体平台在热门事件发生时的消息推送。
  • 在线支付系统处理大量交易请求。
  • 大型在线游戏服务器支持成千上万个玩家同时在线。

问:如何快速解决高并发问题?

答:负载调度(即LVS)

使用负载调度器似乎就能够避免性能的浪费,让尽可能有限的主机服务器发挥他们所能够提供的全部价值。
于是为了确保服务的高可用性和性能,许多组织采用负载均衡技术来分散请求到多个服务器上。其中,Linux Virtual Server (LVS) 作为一种成熟且强大的解决方案,已经得到了广泛的使用。本文将介绍 LVS 的基本概念、工作原理以及如何设置一个简单的 LVS 集群。

什么是 LVS?

LVS 是一个开源项目,它利用 Linux 内核实现了高性能和高可用性的负载均衡服务。LVS 可以将来自客户端的请求分发到多个后端服务器上,这些服务器共同为用户提供服务。通过这种方式,不仅可以提高系统的吞吐量,还能增加系统的可靠性和稳定性。

LVS 的优势

高可用性:LVS 支持多种故障检测机制,可以快速检测并隔离故障节点。
高性能:LVS 利用 Linux 内核的高效转发能力,能够处理非常高的并发连接数。
可扩展性:LVS 支持动态添加或移除后端服务器,轻松应对不断变化的服务需求。
成本效益:由于是基于 Linux 平台的开源软件,LVS 在成本方面具有显著优势。

LVS 的架构

LVS 主要由以下几个组件构成:

负载调度器 (Scheduler):负责接收客户端请求,并根据特定算法选择一台后端服务器进行转发。
后端服务器RS (Real Servers):实际提供服务的应用程序服务器。
共享存储 (Shared Storage):可选组件,用于实现会话持久化等功能。

LVS体系结构

在这里插入图片描述

Load Balancer 层

位于整个集群系统的最前端,由一台或多台负载调度器(Director Server)组成。LVS 模块安装在 Director Server 上,其主要作用类似于路由器,含有完成 LVS 功能所需的路由表。通过这些路由表,Director Server 能够将用户的请求分发给 Server Array 层的应用服务器(Real Server)。此外,在 Director Server 上还安装了对 Real Server 服务的监控模块 Ldirectord,该模块用于监测各个 Real Server 的健康状况,并在 Real Server 不可用时将其从 LVS 路由表中剔除,在其恢复后重新加入。

Server Array 层

由一组实际运行应用服务的机器组成,Real Server 可以是 WEB 服务器、MAIL 服务器、FTP 服务器、DNS 服务器、视频服务器中的一个或多个。这些 Real Server 之间通过高速局域网 (LAN) 或分布于不同地理位置的广域网 (WAN) 连接。在实际应用中,Director Server 有时也可同时兼任 Real Server 的角色。

Shared Storage 层

为所有 Real Server 提供共享存储空间和内容一致性的存储区域。在物理上,通常由磁盘阵列设备组成。为了保证内容的一致性,可以通过 NFS 网络文件系统共享数据。然而,在繁忙的业务系统中,NFS 的性能可能不尽人意,此时可采用集群文件系统,例如 Red Hat 的 GFS 文件系统、Oracle 提供的 OCFS2 文件系统等。

LVS工作模式

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Serve(r负载调度器)上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR。

VS/NAT: 即(Virtual Server via Network Address Translation)
网络地址翻译技术实现虚拟服务器。客户端发送请求数据到达调度器时,调度器会将请求报文的目标地址(即虚拟IP地址)改写成选定调度的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端处理完请求后,Real Server返回数据给用户需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,最后由调度器把数据转发给用户,完成整个负载调度过程。

请求报文与响应报文都经由Director转发,这几乎完全派生出一个新的问题——director的性能瓶颈。好处是这种模式几乎适用于任何类型的real server,并且允许内部网络使用私有IP地址,并通过调度器的公共IP地址进行外部通信。

VS/TUN :即(Virtual Server via IP Tunneling)
IP隧道技术实现虚拟服务器。客户端发送请求数据到达调度器时,调度器会在请求报文之外再封装一个IP首部,但不改变请求报文原有的IP首部。通过IP隧道将包发往选定调度的Real Server地址。在此时,Real Server将直接响应客户端的请求,不需要调度器的中继转发。用户直接接收Real Server的数据包。因此TUN技术对Real Server的地域与网络位置没有要求,并且调度器不转发数据包,这使得集群系统的吞吐量大大提高。

TUN模式不支持端口映射。且TUN模式下,lvs集群能够支持较多数量的Real Server。但是需要隧道的支持,这种技术可以实现虚拟专用网。

VS/DR: 即(Virtual Server via Direct Routing)
直接路由技术实现虚拟服务器。客户端发送请求数据到达调度器时,调度器会在接受到请求数据包后为数据包重新封装一个指向选定调度Real Server的MAC地址,将请求数据包发送给选定调度的Real Server。Real Server接受到数据包后完成请求直接响应用户,通过网络回传数据给用户。不需要隧道与二次调度。这种模式是负载调度机制中性能最好的,但必须要求Real Server与Director Server都拥有网卡并且连在同一物理网段上

DR不支持跨网段与端口转换,且对于DS与RS有地域网络位置限制。

模式NATDRTUN
Real Serveranytunnelingnon-arp device
Real Server Networkprivatelan/wanlan
Real Server Numberlowhighhigh
Real Server Gatewayload balancerown routerown route
优点端口转换支持WAN性能优异
缺点性能瓶颈需要隧道支持,不支持端口转换不支持跨网段与端口转换
工作层级网络层,传输层网络层,传输层数据链路层,网络层

负载均衡算法

.LVS调度算法类型

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

LVS静态调度算法

1、RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

2、WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往
第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请
求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

LVS动态调度算法

主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)

2、WLC:Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight。但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

7.FO(Weighted Fai Over)调度算法:常用作灰度发布
在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_FOVERLOAD标志)的且权重最高的真实服务器,进行调度.当服务器承接大量链接,我们可以对此服务器进行过载标记(IP_VS_DEST_F OVERLOAD),那么vs调度器就不会把链接调度到有过载标记的主机中。

8.OVF(Overflow-connection)调度算法
基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:
未过载(未设置IP_VS_DEST_F OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值
其权重值不为零

LVS部署实例

LVS依托ipvsadm程序包在linux上运行,通过简单的ipvsadm命令实现集群服务管理的增删改

#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66
-A添加
-E修改
-ttcp协议
-uudp协议
-s指定调度算法,默认为WLC
-p设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-ffirewall mask 火墙标记,是一个数字

管理集群中real server的增删改

#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.100:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
[root@DR-server ~]# ipvsadm -C
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.20:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
-a#添加realserver
-e#更改realserver
-t#tcp协议
-u#udp协议
-f#火墙 标签
-r#realserver地址
-g#直连路由模式
-i#ipip隧道模式
-m#nat模式
-W#设定权重
-Z#清空计数器
-C#清空lvs策略
-L#查看lvs策略
-n#不做解析
--rate#输出速率信息

部署NAT模式集群实战案例

主机名ipvip角色
node1(LVS)192.168.0.100172.25.254.100VS调度器
webserver1192.168.0.10,gw192.168.0.100null真实服务器RS
webserver2192.168.0.20,gw192.168.0.100null真实服务器RS
client192.168.0.104用户机

其中director服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡连接后端web服务器。

web服务器采用仅主机网卡与director相连。

配置命令

在lvs(node1)中启用内核路由功能

]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
]# sysctl --system

在lvs(node1)中安装ipvsadm

# yum install ipvsadm -y

在lvs(node1)中添加调度策略

]# ipvsadm -A -t 172.25.254.100:80 -s rr
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m

查看调度策略

]# ipvsadm -Ln

保存调度策略

测试

[Administrator.WIN-20240602BIS] ➤ for N in {1..10};do curl 172.25.254.100;done
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20

部署DR模式集群实战实例

主机名ipvip角色
client172.25.254.200 vm NATnull测试主机
route172.25.254.200-NAT,192.168.0.10-仅主机null路由器
lvs192.168.0.50,gw 192.168.0.10 仅主机lo 192.168.0.200调度器
rs1192.168.0.101,gw 192.168.0.10 仅主机lo 192.168.0.200web服务器1
rs2192.168.0.102,gw 192.168.0.10 仅主机lo 192.168.0.200web服务器2

配置命令

配置实验环境

其他设备同理

解决vip响应问题

DR模式中各主机上均需要配置VIP,解决地址冲突的方式有三种:

(1)在前端网关做静态绑定

(2)在各RS使用arptables

(3)在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

1:尽量避免将接口信息向非直接连接网络进行通告

2:必须避免将接口信息向非本网络进行通告

[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

配置lo环回vip

[root@lvs ~]# ip a a 192.168.0.200/32 dev lo

在rs1和rs2中也需要配置lo

在lvs中配置策略

[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 wrr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0

测试

[root@client ~]# for N in {1..10};do curl 192.168.0.100;done
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
RS1 server - 192.168.0.101

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值