LVS实验

一、LVS简介

LVS(Linux Virtual Server,Linux 虚拟服务器)是 Linux 内核原生的高性能四层(IP 层 / TCP/UDP 层)负载均衡方案,专为构建高可用、高并发的服务器集群设计

1.1 核心定位与起源

  • 本质:内核级 IP 负载均衡器,将用户请求按策略分发到后端多台真实服务器(Real Server, RS),对外表现为单一虚拟 IP(VIP)。
  • 开发者:章文嵩博士,1998 年发起开源项目,自 Linux 2.4.24 起成为内核标准模块。
  • 优势性能极高、开销极低、免费开源、Linux 原生,适合大规模流量场景。

1.2 核心架构(三层模型)

  1. 负载调度器(Director Server)
    • 集群入口,持有VIP(Virtual IP),接收用户请求。
    • 持有DIP(Director IP),用于与后端服务器通信。
    • 核心:按调度算法转发请求、健康检查、故障屏蔽。
  2. 服务器池(Server Pool)
    • 实际处理业务的真实服务器(RS),使用RIP(Real IP)
    • 所有 RS 提供相同服务(如 Web、DB),保证一致性。
  3. 共享存储(Shared Storage)
    • 为 RS 提供统一数据存储,确保数据一致(如 NFS、分布式存储)。

1.3 关键术语

  • VIP:对外服务的虚拟 IP,用户唯一访问入口。
  • DIP:调度器内网 IP,用于与 RS 通信。
  • RIP:后端真实服务器 IP,集群内部通信。
  • CIP:客户端 IP 地址。

1.4 三种核心工作模式(转发机制)

1. NAT 模式(网络地址转换)
  • 原理:调度器修改请求的目标 IP(VIP→RIP);响应时修改源 IP(RIP→VIP),所有流量经调度器。
  • 特点:配置简单、支持跨网段;调度器易成瓶颈、带宽压力大。
  • 适用:小规模集群、测试环境。
2. DR 模式(直接路由,最常用)
  • 原理 :调度器仅修改数据包MAC 地址(目标为 RS 的 MAC),不修改 IP;RS 直接用 VIP 响应客户端,流量不回调度器。
  • 特点 :性能最高、吞吐量最大;要求调度器与 RS 在同一物理网段
  • 适用:大规模高并发场景(如 Web 服务)。
3. TUN 模式(IP 隧道)
  • 原理:调度器将请求封装在新 IP 包中,隧道转发给 RS;RS 解封装后直接响应客户端。
  • 特点:支持跨地域、跨网段部署;有隧道封装开销。
  • 适用:异地多活、跨机房集群。

1.5 常用调度算法(负载分配策略)

  1. 轮询(Round Robin, rr):按顺序轮流分发。
  2. 加权轮询(Weighted RR, wrr):按权重比例分发(性能强的 RS 权重高)。
  3. 最少连接(Least Connections, lc):发给当前连接数最少的 RS。
  4. 加权最少连接(WLC):结合权重的最少连接。
  5. 源地址哈希(SH):同一客户端 IP 始终转发到同一 RS(会话保持)。
  6. 目标地址哈希(DH):按目标 IP 哈希分发。

1.6 核心特性

  • 四层负载均衡:工作在 IP/TCP 层,不解析应用层内容,性能远超七层(如 Nginx、HAProxy)。
  • 内核级实现 :基于ipvs内核模块,处理效率极高、资源占用极低。
  • 高可用 :配合Keepalived实现主备切换,VIP 漂移,无单点故障。
  • 透明性:用户仅感知 VIP,无需修改客户端 / 服务端代码。
  • 可扩展:可动态增删 RS,水平扩展集群能力。

1.7 适用场景 vs 不适用场景

✅ 适合用 LVS
  • 追求极致性能、高并发、低延迟的四层转发。
  • 大规模 Web、API、数据库、缓存等服务集群。
  • Linux 环境、预算有限、需要内核级负载均衡。
❌ 不适合用 LVS
  • 需要七层功能:SSL 卸载、URL 路由、内容缓存、请求改写。
  • 复杂健康检查、会话保持、流量染色、灰度发布。
  • 非 Linux 环境、需要图形化管理界面。

1.8 与七层负载均衡(Nginx/HAProxy)对比

特性 LVS(四层) Nginx/HAProxy(七层)
工作层次 IP/TCP 层 HTTP / 应用层
性能 极高(内核级) 较高(用户态)
功能 仅转发 丰富(路由、缓存、SSL 等)
配置复杂度 中(网络配置多) 低(应用层配置)
适用 大规模流量转发 应用层精细化控制

LVS 是构建高性能 Linux 集群的基石,DR 模式 + 加权最少连接 + Keepalived是生产环境最经典组合。

二、nat模式

2.1 nat模式原理

|-----|-----------------------------------------------------|----------------------------------------|---------------|
| 节点 | 网卡配置 | IP配置 | 网关 |
| VS | NAT模式( DIP:172.25.254.100) 仅主机模式(VIP:192.168.0.100) | 172.25.254.100(NAT) 192.168.0.100(仅主机) | |
| RS1 | 仅主机模式 | 192.168.0.10 | 192.168.0.100 |
| RS2 | 仅主机模式 | 192.168.0.20 | 192.168.0.100 |

2.2 nat模式实验环境搭建

VS主机中

bash 复制代码
[root@vsnode ~]# vmset.sh eth0 172.25.254.100 vsnode
[root@vsnode ~]# vmset.sh eth1 192.168.0.100 vsnode noroute

RS1

RS2

测试:

2.3 nat模式实现过程

规则持久化:

利用自定义文件进行持久化

利用守护进程进行规则持久化

3.1 DR模式原理

环境搭建

router:

vsnode:

测试:

client:

RS1+RS2:

bash 复制代码
[root@RS1 ~]# vmset.sh eth0 192.168.0.10 RS1 noroute
[root@RS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up eth0
[root@RS1 ~]# route  -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

#在lo上设定vip
[root@RS1 ~]# cd /etc/NetworkManager/system-connections/
[root@RS1 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS1 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ethernet]

[ipv4]
address1=127.0.0.1/8
address2=192.168.0.200/32
method=manual

[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@RS1 system-connections]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.0.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
       
bash 复制代码
 #arp禁止响应
[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

测试:

相关推荐
悠闲蜗牛�1 小时前
边缘AI推理实战:从服务器到嵌入式设备的模型部署与优化
运维·服务器·人工智能
qianshanxue112 小时前
--components=main,contrib,non-free什么意思
linux
盐焗西兰花2 小时前
鸿蒙学习实战之路-STG系列(5/11)-守护策略管理-添加与修改策略
服务器·学习·harmonyos
红豆子不相思2 小时前
Tomcat 环境搭建与集群实战
服务器·git·tomcat
gx23482 小时前
1-LVS
linux·服务器·lvs
The️2 小时前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
fengtangjiang3 小时前
国产操作系统安装tomcat
linux·运维·tomcat
尘似鹤3 小时前
linux驱动学习---竞争与并发(原子操作与各种锁)
linux·学习
盐焗西兰花3 小时前
鸿蒙学习实战之路-STG系列(4/11)-应用选择页功能详解
服务器·学习·harmonyos