LVS(Linux Virtual Server,Linux 虚拟服务器)是一种开源的网络负载均衡技术,最初由中国的红帽工程师设计并维护。它基于 Linux 内核,通过软件的方式来实现高性能、高可用的网络负载均衡服务。LVS 主要利用了 IP 分层(三层)的概念,支持多种负载均衡策略,如轮询、最少连接数、会话保持等。
一.LVS 可以分为几种模式:
- NAT(Network Address Translation)模式:也称为地址转换模式,内部服务器对外只暴露虚拟IP,外部客户端访问的是 LVS 负载均衡设备。
- DR(Direct Routing)模式:直接路由模式,每个后端服务器都有一个单独的公网出口,LVS 根据调度算法将流量转发到相应的后端。
- TUN(Transparent Network Overlay)模式:透明模式,数据包在传输过程中不会改变源和目的IP,常用于高可用的数据库集群。
2.LVS(Linux Virtual Server)是一个开源的高性能负载均衡解决方案,主要用于分发网络流量到一组服务器上。它的主要组件包括:
-
Director(调度器):也称为Director Server,它是整个系统的控制中心,负责管理和调度工作。它监听客户端的请求,并将请求转发给选定的RealServer。
-
RealServer(后端服务器):通常是一组真正的应用程序服务器,处理来自Director的实际服务请求。这些服务器可能是Web服务器、数据库服务器等。
-
Proxy(代理):LVS支持多种代理技术,如NAT(Network Address Translation)、TUN/TAP设备以及IP Masquerading。Proxy负责透明地将流量转发给RealServer,并可能进行一些数据包操作,如SSL卸载。
-
Heartbeat(心跳检测):用于监控RealServer的状态,如果某台服务器宕机,Director会立即切换流量到其他健康的服务器。
-
IP Hash 和 轮询算法:LVS使用这些算法来分配请求,比如IP哈希可以根据客户端的IP地址进行负载均衡,轮询则按照添加顺序轮流处理请求。
二.总结
LVS 的优点包括低成本、易于部署和管理、高度可伸缩等。然而,随着软件负载均衡技术的发展,比如 Nginx、HAProxy 等现代工具的兴起,LVS 在某些场景下可能会被其他更轻量级且功能更丰富的解决方案所替代。
三.3.1lvs部署命令的相关介绍
-
程序包:ipvsadm
-
Unit File: ipvsadm.service
-
主程序:/usr/sbin/ipvsadm
-
规则保存工具:/usr/sbin/ipvsadm-save
-
规则重载工具:/usr/sbin/ipvsadm-restore
-
配置文件:/etc/sysconfig/ipvsadm-config
-
ipvs调度规则文件:/etc/sysconfig/ipvsadm
3.2ipvsadm命令
核心功能:
-
集群服务管理:增、删、改
-
集群服务的RS管理:增、删、改 查看
命令参数
命令 | 解释 |
---|---|
-A|E | 增加|修改 |
-D | 删除 |
-R | 重载 |
-S | 保存 |
-t | tcp服务 |
-u | udp服务 |
-s | 指定调度算法 |
-p | 设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver |
-f | firewall mask 火墙标记 |
-a|e | 添加|更改realserver |
-t|u | tcp|udp协议 |
-g | 直连路由模式 |
-i | ipip隧道模式 |
-m | nat模式 |
-w | 设定权重 |
-Z | 清空计数器 |
-C|-L | 清空|查看lvs策略 |
--rate | 输出速率信息 |
pvs规则:/proc/net/ip_vs
ipvs连接:/proc/net/ip_vs_conn
四.4.1NAT模式
LVS的NAT模式(Network Address Translation,网络地址转换)是一种在网络层实现负载均衡的方法。在这种模式下,Director Server(DS)充当所有服务器节点的网关,既是客户端请求的入口,也是Real Server(RS)响应客户端的出口。以下是NAT模式的工作原理和特点:
1. 工作原理:
客户端发送请求到DS,请求的数据包源IP是客户端IP(CIP),目标IP是虚拟IP(VIP)。
DS接收到请求后,根据预设的负载均衡算法选择一个RS,并将请求数据包的目标IP地址修改为选定的RS的IP(RIP),同时修改源MAC地址为DS的MAC地址,目标MAC地址为RS的MAC地址,然后将数据包发送给RS。
RS接收到请求后,处理它并准备响应。RS将响应数据包的源IP设置为RIP,目标IP设置为CIP。
RS将响应数据包发送回DS,DS再次修改数据包,将源IP更改为VIP,然后转发给客户端。
2. 特点:
RS必须使用私有IP地址,网关指向DS的IP(DIP)。
DIP与RIP必须在同一网段内。
DS作为所有服务器节点的网关,也就是说请求和响应报文都需要经过DS。
支持端口映射。
在高负载场景中,DS压力比较大,易成为性能瓶颈。
NAT模式的配置相对简单方便,适用于多种网络环境,尤其是在RS分布广泛时。然而,由于所有流量都经过DS,它可能成为系统的瓶颈,尤其是在请求流量小而响应流量大的Web类应用中。
在NAT模式下,LVS使用网络地址转换技术,通过修改数据包的源IP地址和目标IP地址来实现请求的分发和响应的路由。这种方式使得客户端与RS之间的通信对彼此透明,客户端无法感知到RS的存在。
4.2DR模式
LVS的DR模式(Direct Routing,直接路由模式)是一种高效的负载均衡方式,其核心原理是在网络层通过修改数据包的MAC地址来实现请求的分发和响应的直接返回,从而减少负载均衡器在响应路径上的处理压力。以下是LVS-DR模式的工作原理和特点:
1. 工作原理:
客户端发送请求到配置有VIP(Virtual IP)的LVS调度器(Director Server)。
LVS调度器根据负载均衡算法选择一个合适的后端真实服务器(Real Server)。
LVS调度器修改客户端请求数据包的目标MAC地址为选中的Real Server的MAC地址,源MAC地址修改为Director Server的MAC地址,然后通过二层网络发送给Real Server,源IP和目标IP保持不变。
Real Server接收到请求后,直接处理并生成响应报文,将响应报文的源IP设置为VIP,目标IP设置为客户端IP,然后直接发送给客户端,绕过LVS调度器。
2. 关键特性:
LVS调度器和所有Real Server都必须在同一物理网络中,即它们通过二层网络进行通信。
Real Server需要配置有VIP,但通过特定的网络配置(如 arp_ignore 和 arp_announce 内核参数设置)避免ARP冲突。
请求报文由LVS调度器转发,而响应报文直接由Real Server发送给客户端,不经过LVS调度器。
不支持地址转换和端口映射,因为请求和响应的IP地址和端口在客户端和Real Server之间直接对应。
减少了LVS调度器的网络I/O压力,因为它只处理进入的请求,响应直接由Real Server处理。
由于减少了数据包在LVS调度器上的处理,提高了系统的整体性能和响应速度。
4. 配置注意事项:
确保前端路由器将目标IP为VIP的请求报文发往Director Server,而不是Real Server。这可以通过在前端网关做静态绑定或使用 arptables 实现。
Real Server的网关配置不能指向Director Server的IP,以确保响应报文不会经由Director Server。
LVS-DR模式适用于需要高性能和高可用性的服务,如Web服务和数据库服务,尤其是在LVS调度器和Real Server可以部署在同一物理网络的环境中。通过合理配置,可以实现高效的负载均衡和故障转移,提高系统的稳定性和可靠性。
4.3TUN模式
LVS的TUN模式(IP Tunneling模式)通过在原始IP数据包上封装一个新的IP头部来转发请求到后端的真实服务器(Real Server),并允许这些服务器直接将响应发送回客户端,从而绕过负载均衡器(Director Server)。以下是TUN模式的工作原理和特点:
1. 工作原理:
客户端发送请求到LVS的虚拟IP地址。
LVS接收请求后,在内核空间的PREROUTING链上为请求数据包添加一个新的IP头部,源IP设置为LVS的IP地址(DIP),目标IP设置为选定的后端服务器的IP地址(RIP)。
封装后的数据包通过POSTROUTING链发送给RIP。
Real Server接收到封装的IP数据包,解封装后处理请求,并将响应直接发送回客户端,响应过程中不经过LVS。
2. 特点:
TUN模式支持跨网络区域部署,允许LVS和Real Server不在同一个物理网络中。
所有Real Server必须支持“IP Tunneling”或“IP Encapsulation”协议。
不支持端口映射,因为TUN模式不会改变原始数据包的端口信息。
Real Server需要在loopback接口配置VIP,并且必须设置内核参数以避免通过ARP协议对外通告VIP。
LVS仅负责处理入站请求,响应报文由Real Server直接发往客户端,减少了LVS的负载。
减少了LVS的网络I/O压力,因为它只处理进入的请求,响应直接由Real Server处理。
可以支持大规模的服务器数量,适用于大型Web应用和服务。
3. 配置注意事项:
需要在Real Server上启用IP隧道模块(如 ipip 或 tunl )。
Real Server上的VIP配置在loopback接口上,以避免ARP冲突。
需要配置适当的路由规则,确保请求能够通过IP隧道正确路由到Real Server。
4.使用场景:
适合于需要跨越不同网络区域或对安全性有较高要求的服务部署。
适用于客户端请求包较小,但服务器响应数据包较大的服务场景。
TUN模式通过IP隧道技术,提供了一种灵活的负载均衡解决方案,尤其适用于需要跨越不同网络区域或进行远程访问时。使用TUN模式时,需要确保所有相关服务器都支持IP隧道技术,并且正确配置了相关的网络参数和路由规则。
五.实验参考
5.1NAT模式
LVS的配置:
-
# 使用脚本
-
vmset.sh eth0 172.25.254.100 lvs.org
-
vmset.sh eth1 192.168.0.100 lvs.org
-
# 修改网关
-
vim /etc/NetworkManager/system-connections/eth1.nmconnection
-
将eth1网关删除
-
# 更新网卡
-
nmcli connection reload
-
nmcli connection up eth1
-
# 启用内核路由功能
-
vim /etc/sysctl.conf
-
添加 net.ipv4.ip_forward = 1
-
# 安装ipvsadm
-
yum install ipvsadm -y
-
# 添加调度策略
-
ipvsadm -A -t 172.25.254.100:80 -s rr
-
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
-
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
-
# 查看策略
-
ipvsadm -Ln
-
TCP 172.25.254.100:80 rr
-
-> 192.168.0.10:80 Masq 1 0 0
-
-> 192.168.0.20:80
测试:
-
[root@lvs ]# for i in {1..5}; do curl 172.25.254.100; done
-
webserver2 - 192.168.0.20
-
webserver - 192.168.0.10
-
webserver2 - 192.168.0.20
-
webserver - 192.168.0.10
-
webserver2 - 192.168.0.20
测试完成
5.2DR模式
Webserver:
# Webserver1,2的基础配置与实验一相同
# RS(real server)主机中使vip不对外响应
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# 在server设定vip
[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo
Client:
# 使用脚本
vmset.sh eth0 172.25.254.200 Client.org
# 修改网关
vim /etc/NetworkManager/system-connections/eth0.nmconnection
address1=172.25.254.200/24.172.25.254.100
# 更新网卡
nmcli connection reload
nmcli connection up eth0
router:
# 使用脚本
[root@router ~]# vmset.sh eth0 172.25.254.100 router.org
[root@router ~]# vmset.sh eth1 192.168.0.100 router.org
[root@router ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnec
[connection]
id=eth1
type=ethernet
interface-name=eth1
[ipv4]
address1=192.168.0.100/24
method=manual
# 更新网卡
[root@router ~]# nmcli connection reload
[root@router ~]# nmcli connection up eth1
[root@router ~]# nmcli connection up eth0
# 启用内核路由功能
[root@router ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
LVS:
# 使用脚本
[root@lvs ~]# vmset.sh eth1 192.168.0.50 lvs.org
# 修改网关为192.168.0.100
[root@lvs ~]#vim /etc/NetworkManager/system-connections/eth1.nmconnection
address1=192.168.0.50/24,192/168/0/100
# 更新网卡
[root@lvs ~]# nmcli connection reload
[root@lvs ~]#nmcli connection up eth1
# 在回环接口配置VIP
[root@lvs ~] ip a a 192.168.0.200/32 dev lo
# 下载ipvsadm
[root@lvs ~] yum install ipvsadm -y
# 配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
# 查看策略
[root@lvs ~]# ipvsadm -Ln
TCP 192.168.0.200:80
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 2 0 0
测试:
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
测试成功