lvs集群技术

发布于:2025-07-22 ⋅ 阅读:(19) ⋅ 点赞:(0)
LVS 集群概述:构建高性能负载均衡架构

LVS(Linux Virtual Server)是基于 Linux 内核的开源负载均衡解决方案,由中国工程师章文嵩博士开发,旨在为大规模网络服务提供高性能、高可用的负载分发能力。以下是对 LVS 集群的全面概述:

一、简要介绍

LVS(Linux Virtual Server,Linux 虚拟服务器)是一个基于 Linux 内核的负载均衡集群系统,由章文嵩博士主导开发,旨在通过负载均衡技术将多台服务器组成一个高性能、高可用的服务器集群,对外提供统一的服务入口,提升服务的处理能力和可靠性2. 核心架构
LVS集群采用三层分层架构:

负载调度层(Director) :运行ipvs内核模块的调度节点,接收所有客户端请求,通过调度算法分发至后端。关键IP包括:

VIP(Virtual IP) :对外服务IP,客户端访问入口

DIP(Director IP) :与后端通信的内部IP

真实服务器层(Real Server, RS) :实际处理请求的服务节点(如Web/DB服务器),通过RIP(Real IP) 标识。

共享存储层 :为RS提供一致性数据源(如NFS/GFS),避免本地存储导致内容差异。

二、三种工作模式


    LVS 的工作模式本质上是负载均衡器与后端真实服务器之间数据交互方式的体现,不同模式在网络架构、数据流向和适用场景上有着显著差异,目前主要分为 NAT 模式、DR 模式和 TUN 模式三种。NAT 模式(网络地址转换模式)中,负载均衡器作为客户端与真实服务器的网关,所有请求和响应均经其转发。客户端请求到 VIP 后,负载均衡器会将目标 IP 转为真实服务器的 RIP,同时记录转换关系;真实服务器处理后将响应发回负载均衡器,负载均衡器再把源 IP 换回 VIP 转发给客户端。其优势是配置简单、真实服务器无需公网 IP,安全性高,但因流量集中于负载均衡器,易成瓶颈,适合 10 台以内真实服务器的小规模场景。

DR 模式(直接路由模式)的核心是负载均衡器仅处理请求,响应由真实服务器直接发往客户端。负载均衡器与真实服务器均配置 VIP(真实服务器的 VIP 在回环接口,且禁止 ARP 广播),客户端请求到 VIP 后,负载均衡器仅修改报文的目标 MAC 地址为选定真实服务器的 MAC,随后转发。真实服务器因回环接口有 VIP 而处理请求,再直接用 VIP 作为源 IP 向客户端响应。该模式要求负载均衡器与真实服务器在同一局域网,支持上百台服务器,适合高并发的 Web 服务、电商秒杀等流量密集场景。

TUN 模式(IP 隧道模式)用于真实服务器与负载均衡器不在同一局域网的情况,借助 IP 隧道技术转发请求。负载均衡器接收请求后,会给原 IP 报文加新 IP 头(源 IP 为 DIP,目标 IP 为真实服务器 RIP),通过隧道发送;真实服务器支持 GRE 等隧道协议,解封装后处理请求,再直接响应客户端。此模式突破局域网限制,可跨地域部署,但隧道封装解封装有性能开销,配置较复杂,适用于 CDN 节点、跨数据中心灾备等场景

三、LVS 的负载均衡算法


轮询(Round Robin,RR):按顺序将请求依次分发到每台真实服务器,适合服务器性能相近的场景。

加权轮询(Weighted Round Robin,WRR):为真实服务器分配权重,权重高的服务器接收更多请求(如性能强的服务器权重高)。 

最少连接(Least Connections,LC):优先将请求分发到当前连接数最少的服务器,适合请求处理时间差异大的场景(如动态网页)。

加权最少连接(Weighted Least Connections,WLC):结合权重和连接数,权重高且连接少的服务器优先接收请求。

源地址哈希(Source Hashing,SH):根据客户端 IP 地址哈希,将同一客户端的请求固定分发到同一台服务器,适合需要会话保持的场景(如登录状态)。

目标地址哈希(Destination Hashing,DH):根据请求的目标 IP 哈希,适合缓存服务器集群(如反向代理缓存)。

四.总结与应用

1.选择lvs的优势:
高性能:LVS基于Linux内核实现,性能高效,能够处理大量的并发请求。

高可用性:通过负载均衡和故障转移机制,确保系统的高可用性。

灵活性:支持多种工作模式和负载均衡算法,可以根据实际需求进行配置。

开源免费:LVS是开源软件,用户可以根据自己的需求进行定制和优化。

2.模式选择:
追求性能 → DR模式(机房内部)

简化配置 → NAT模式(小型集群)

跨地域扩展 → TUN模式(云环境)

3.典型场景:
Web高并发:DR + WLC算法

会话敏感服务:DR + SH算法

混合云部署:TUN + SED算法

LVS的应用场景:

Web服务器集群:通过LVS将客户端的HTTP请求分发到多个Web服务器,提高网站的响应速度和可靠性。

数据库集群:将数据库读写请求分发到多个数据库服务器,提高数据库的性能和可用性。

企业级应用:在企业级应用中,LVS可以用于负载均衡中间件、应用服务器等,确保系统的高可用性。

4.局限性:
LVS无应用层解析(HTTP/HTTPS),需结合Nginx/Haproxy实现七层负载。

依赖Linux:LVS只能运行在Linux操作系统上,对于非Linux环境的支持有限。

维护成本:在大规模集群中,LVS的维护和管理需要专业的技术人员。

五、LVS 集群搭建示例

4.1 NAT模式
实验环境:

一共准备四台虚拟机,一台模拟客户虚拟机,一台lvs调度主机,两台RealServer主机 IP配置如下:

client->nat                                           172.25.254.111
LVS->nat+仅主机                                172.25.254.222 +192.168.179.10
两台realserver->仅主机                       RS1:192.168.179.20                  RS2:192.168.179.30

关闭防火墙

systemctl disable --now firewalld

在/var/www/html/index.html写入内容

[root@RS1 ~]# echo "RS1 server - 192.168.0.101" > /var/www/html/index.html

在lvs上启动路由功能并安装ipvsadm

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
sysctl --system
 
yum install ipvsadm -y

在lvs虚拟机中添加规则

ipvsadm -A -t 172.25.254.222:80 -s rr
ipvsadm -a -t 172.25.254.222:80 -r 192.168.179.20:80
ipvsadm -a -t 172.25.254.222:80 -r 192.168.179.20:80 -m
ipvsadm -a -t 172.25.254.222:80 -r 192.168.179.30:80 -m

将client的网关设置为lvs相同网段的IP 两台RS也是如此

ipvsadm -Ln
ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
 
#重新加载规则
ipvsadm -R < /etc/sysconfig/ipvsadm-config
 
#开机启动
systemctl enable --now ipvsadm.service

测试

 for N in {1..6};do curl 172.25.254.222;done
RS2 server - 192.168.179.30
RS1 server - 192.168.179.20
RS1 server - 192.168.179.20
RS2 server - 192.168.179.30
RS1 server - 192.168.179.20
RS1 server - 192.168.179.20

部署DR模式集群 

配置5台主机的环境命令(已关闭防火墙,RS1与RS2已开启HTTPD)

关闭防火墙(除了route)
systemctl disable --now firewalld.service
###在DR_lvs上安装ipvsadm
dnf install ipvsadm -y
使不同网段能通过路由通讯
#route内核路由功能
echo net.ipv4.ip_forward=1 > /etc/sysctl.conf 
 
打开防火墙
systemctl enable --now firewalld.service 
 
firewall-cmd --permanent --add-masquerade #开启地址伪装
firewall-cmd --reload #重启防火墙

 修改网卡后要重新启动服务

#####每次修改网卡都需要
[root@node1 chen]# nmcli connection reload 
[root@node1 chen]# nmcli connection up eth0 #将修改的网卡名称放上去

在lvs 和 rs 中设定vip

[root@lvs ~]# ip addr add dev lo 192.168.179.201/32
[root@RS1 ~]# ip addr add dev lo 192.168.179.201/32
[root@RS2 ~]# ip addr add dev lo 192.168.179.201/32

在RS1和RS2中解决响应问题

[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

在lvs中配置策略

[root@lvs ~]# ipvsadm -A -t 192.168.179.201:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.179.201:80 -r 192.168.179.20:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.179.201:80 -r 192.168.179.30:80 -g
[root@lvs ~]# ipvsadm -Ln
测试结果
 for N in {1..6};do curl 172.25.254.222;done
RS2 server - 192.168.179.30
RS1 server - 192.168.179.20
RS1 server - 192.168.179.20
RS2 server - 192.168.179.30
RS1 server - 192.168.179.20
RS1 server - 192.168.179.20

网站公告

今日签到

点亮在社区的每一天
去签到