LVS(Linux virtual server)

目录

一、什么是LVS?

二、LVS 的特点(优点)

三、LVS 的架构 

四、LVS的体系结构

Load Balancer 层

Server Array 层

Shared Storage 层

五、LVS的工作模式

VS/NAT(Virtual Server via Network Address Translation)

VS/TUN(Virtual Server via IP Tunneling)

三种工作模式的对比

六、负载均衡算法

LVS调度算法类型

LVS静态调度算法

LVS动态调度算法

LVS的部署实例

NAT模式的部署集群实例

DR模式的部署集群实例


一、什么是LVS?

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

二、LVS 的特点(优点)

1.高可用性:LVS 支持多种故障检测机制,可以快速检测并隔离故障节点。

2.高性能:LVS 利用 Linux 内核的高效转发能力,能够处理非常高的并发连接数。

3.可扩展性:LVS 支持动态添加或移除后端服务器,轻松应对不断变化的服务需求。

4.成本效益:由于是基于 Linux 平台的开源软件,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有地域网络位置限制。

三种工作模式的对比

NATTUNDR
Real Serveranynon-arp devicetunneling
Real Server Networkprivatelanlan/wan
Real Server Numberlowhighhigh
Real Server Gatewayload balancerown routeonw router
优点端口转换性能优异支持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

管理集群中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

NAT模式的部署集群实例

主机名ipvip角色
node1(LVS)192.168.0.100172.25.254.100VS调度器
webserver1192.168.0.10,gw192.168.0.100null真实服务器RS
webserver1192.168.0.20,gw192.168.0.100null真实服务器RS
webserver1192.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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值