LVS(Linux Virtual Server)集群,即Linux虚拟服务器集群,是一个在Unix/Linux平台下实现负载均衡集群功能的系统。它由国人章文嵩博士在1998年开发,是中国国内最早出现的自由软件项目之一,现在LVS已经是Linux内核标准的一部分。LVS集群通过将多台服务器组织起来,共同对外提供服务,以提高系统的整体性能、可扩展性和高可用性。
LVS的核心作用是分发网络请求,以达到以下目标:
可扩展性: 通过向集群中添加更多后端服务器(Real Server),线性提升系统的整体处理能力和吞吐量,以应对不断增长的访问量。
高可用性: 当某个后端服务器发生故障时,LVS能够自动检测到(通常需结合健康检查工具如keepalived
),并将后续流量路由到其他健康的服务器上,保证服务不间断。
高性能: LVS工作在内核空间,转发效率极高,本身消耗资源少,对网络请求的处理延迟很低。
透明性: 客户端访问的是虚拟服务地址(VIP),无需感知背后实际提供服务的具体是哪台后端服务器。
可管理性: 提供统一入口,便于管理和维护后端服务器群。
LVS通过不同的报文转发机制实现负载均衡:
NAT模式: 修改请求/响应报文的IP地址。Director成为性能瓶颈。
DR模式: 仅修改请求报文的MAC地址。响应由Real Server直接返回给客户端。性能最高,最常用,要求Real Server与Director在同一物理网络。
TUN模式: 通过IP隧道封装请求报文。Real Server可以在不同网络,但需要支持IP隧道协议,配置较复杂。
LVS安装及命令详解
核心命令ipvsadm功能:管理虚拟服务器、真实服务器和规则。
添加一个虚拟服务192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除虚拟服务
ipvsadm -D -t 192.168.1.100:80
管理真实服务
添加一个真实服务器192.168.1.123,使用DR模式,权重2
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
修改真实服务器的权重
ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
NAT模式的实现
工作原理
数据包流向:客户端发送请求到VIP -> LVS Director修改目标IP为真实服务器IP -> 真实服务器处理响应 -> LVS Director修改源IP为VIP返回客户端。
数学表示:流量转发公式($$ \text{转发率} = \frac{\text{处理请求数}}{\text{接收请求数}} \times 100% $$)
关键组件:IPVS内核模块、连接跟踪机制。
实验步骤
1.实验环境配置
client:
LVS:
webserver1:
webserver2:
1、启动内核路由功能:
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
2、安装ipvsadm:
[root@lvs ~]# yum install ipvsadm -y
3、在webserver1和webserver2中安装httpd包,并关闭防火墙:
webserver1:
[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo "welcome to webserver1 - 192.168.0.10" > /var/www/html/index.html
[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# systemctl stop firewalld
webserver2(与webwserver1类似)
4、在lvs中检测:
[root@lvs ~]# curl 192.168.0.10
welcome to webserver1 - 192.168.0.10
[root@lvs ~]# curl 192.168.0.20
welcome to webserver2 - 192.168.0.20
5、添加调度策略:
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[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 172.25.254.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
6、保存规则:
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
7、删除规则:
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
8、重新加载规则:
[root@lvs ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
[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 172.25.254.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0